diff options
| -rw-r--r-- | docs/administration/updating.md | 2 | ||||
| -rw-r--r-- | docs/configuration/cheatsheet.md | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/side_effects.ex | 21 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/controllers/status_controller.ex | 14 | ||||
| -rw-r--r-- | priv/static/static-fe/static-fe.css | 1 | ||||
| -rw-r--r-- | test/tasks/user_test.exs | 17 | 
6 files changed, 42 insertions, 15 deletions
| diff --git a/docs/administration/updating.md b/docs/administration/updating.md index 2a08dac1f..c994f3f16 100644 --- a/docs/administration/updating.md +++ b/docs/administration/updating.md @@ -1,6 +1,6 @@  # Updating your instance -You should **always check the release notes/changelog** in case there are config deprecations, special update special update steps, etc. +You should **always check the [release notes/changelog](https://git.pleroma.social/pleroma/pleroma/-/releases)** in case there are config deprecations, special update steps, etc.  Besides that, doing the following is generally enough: diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md index f6529b940..d0a57928c 100644 --- a/docs/configuration/cheatsheet.md +++ b/docs/configuration/cheatsheet.md @@ -155,7 +155,7 @@ config :pleroma, :mrf_user_allowlist, %{    * `:strip_followers` removes followers from the ActivityPub recipient list, ensuring they won't be delivered to home timelines    * `:reject` rejects the message entirely -#### mrf_steal_emoji +#### :mrf_steal_emoji  * `hosts`: List of hosts to steal emojis from  * `rejected_shortcodes`: Regex-list of shortcodes to reject  * `size_limit`: File size limit (in bytes), checked before an emoji is saved to the disk diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index de02baf0f..1d2c296a5 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -273,14 +273,20 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do      {:ok, object}    end -  def handle_undoing(%{data: %{"type" => "Like"}} = object) do -    with %Object{} = liked_object <- Object.get_by_ap_id(object.data["object"]), -         {:ok, _} <- Utils.remove_like_from_object(object, liked_object), -         {:ok, _} <- Repo.delete(object) do -      :ok +  defp undo_like(nil, object), do: delete_object(object) + +  defp undo_like(%Object{} = liked_object, object) do +    with {:ok, _} <- Utils.remove_like_from_object(object, liked_object) do +      delete_object(object)      end    end +  def handle_undoing(%{data: %{"type" => "Like"}} = object) do +    object.data["object"] +    |> Object.get_by_ap_id() +    |> undo_like(object) +  end +    def handle_undoing(%{data: %{"type" => "EmojiReact"}} = object) do      with %Object{} = reacted_object <- Object.get_by_ap_id(object.data["object"]),           {:ok, _} <- Utils.remove_emoji_reaction_from_object(object, reacted_object), @@ -310,6 +316,11 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do    def handle_undoing(object), do: {:error, ["don't know how to handle", object]} +  @spec delete_object(Object.t()) :: :ok | {:error, Ecto.Changeset.t()} +  defp delete_object(object) do +    with {:ok, _} <- Repo.delete(object), do: :ok +  end +    defp send_notifications(meta) do      Keyword.get(meta, :notifications, [])      |> Enum.each(fn notification -> diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index 3f4c53437..12be530c9 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -201,15 +201,13 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do    @doc "DELETE /api/v1/statuses/:id"    def delete(%{assigns: %{user: user}} = conn, %{id: id}) do      with %Activity{} = activity <- Activity.get_by_id_with_object(id), -         render <- -           try_render(conn, "show.json", -             activity: activity, -             for: user, -             with_direct_conversation_id: true, -             with_source: true -           ),           {:ok, %Activity{}} <- CommonAPI.delete(id, user) do -      render +      try_render(conn, "show.json", +        activity: activity, +        for: user, +        with_direct_conversation_id: true, +        with_source: true +      )      else        _e -> {:error, :not_found}      end diff --git a/priv/static/static-fe/static-fe.css b/priv/static/static-fe/static-fe.css index db61ff266..89e9f4877 100644 --- a/priv/static/static-fe/static-fe.css +++ b/priv/static/static-fe/static-fe.css @@ -80,6 +80,7 @@ header a:hover, .h-card a:hover {  /* keep emoji from being hilariously huge */  .display-name img {      max-height: 1em; +    max-width: 1em;  }  .display-name .nickname { diff --git a/test/tasks/user_test.exs b/test/tasks/user_test.exs index 9220d23fc..2a3e62e26 100644 --- a/test/tasks/user_test.exs +++ b/test/tasks/user_test.exs @@ -110,7 +110,23 @@ defmodule Mix.Tasks.Pleroma.UserTest do      test "a remote user's create activity is deleted when the object has been pruned" do        user = insert(:user) +      user2 = insert(:user) +        {:ok, post} = CommonAPI.post(user, %{status: "uguu"}) +      {:ok, post2} = CommonAPI.post(user2, %{status: "test"}) +      obj = Object.normalize(post2) + +      {:ok, like_object, meta} = Pleroma.Web.ActivityPub.Builder.like(user, obj) + +      {:ok, like_activity, _meta} = +        Pleroma.Web.ActivityPub.Pipeline.common_pipeline( +          like_object, +          Keyword.put(meta, :local, true) +        ) + +      like_activity.data["object"] +      |> Pleroma.Object.get_by_ap_id() +      |> Repo.delete()        clear_config([:instance, :federating], true) @@ -127,6 +143,7 @@ defmodule Mix.Tasks.Pleroma.UserTest do          assert %{deactivated: true} = User.get_by_nickname(user.nickname)          assert called(Pleroma.Web.Federator.publish(:_)) +        refute Pleroma.Repo.get(Pleroma.Activity, like_activity.id)        end        refute Activity.get_by_id(post.id) | 
