summaryrefslogtreecommitdiff
path: root/lib/pleroma/web/activity_pub/transmogrifier.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pleroma/web/activity_pub/transmogrifier.ex')
-rw-r--r--lib/pleroma/web/activity_pub/transmogrifier.ex44
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