diff options
Diffstat (limited to 'lib/pleroma/web/activity_pub/transmogrifier.ex')
-rw-r--r-- | lib/pleroma/web/activity_pub/transmogrifier.ex | 44 |
1 files changed, 11 insertions, 33 deletions
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 142af1a13..6d49f0141 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -516,52 +516,30 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do end def handle_incoming( - %{ - "type" => "Undo", - "object" => %{"type" => "Follow", "object" => followed}, - "actor" => follower, - "id" => id - } = _data, - _options - ) do - with %User{local: true} = followed <- User.get_cached_by_ap_id(followed), - {:ok, %User{} = follower} <- User.get_or_fetch_by_ap_id(follower), - {:ok, activity} <- ActivityPub.unfollow(follower, followed, id, false) do - User.unfollow(follower, followed) - {:ok, activity} - else - _e -> :error - end - end - - def handle_incoming( - %{ - "type" => "Undo", - "object" => %{"type" => type} - } = data, + %{"type" => "Undo", "object" => %{"type" => objtype, "id" => object_id}} = data, _options ) - when type in ["Like", "EmojiReact", "Announce", "Block"] do - with {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do + when objtype in ~w[Like EmojiReact Announce Block Follow] do + with {:ok, %User{}} <- ObjectValidator.fetch_actor(data), + {_, %Activity{}} <- {:exists, Activity.get_by_ap_id(object_id)}, + {:ok, activity, _} <- Pipeline.common_pipeline(data, local: false) do {:ok, activity} + else + {:error, _} = e -> e + e -> {:error, e} end end # For Undos that don't have the complete object attached, try to find it in our database. - def handle_incoming( - %{ - "type" => "Undo", - "object" => object - } = activity, - options - ) + def handle_incoming(%{"type" => "Undo", "object" => object} = activity, options) when is_binary(object) do with %Activity{data: data} <- Activity.get_by_ap_id(object) do activity |> Map.put("object", data) |> handle_incoming(options) else - _e -> :error + {:error, _} = e -> e + e -> {:error, e} end end |