diff --git a/lib/pleroma/object/fetcher.ex b/lib/pleroma/object/fetcher.ex index c76974adc..a9e6e508c 100644 --- a/lib/pleroma/object/fetcher.ex +++ b/lib/pleroma/object/fetcher.ex @@ -182,6 +182,10 @@ def fetch_object_from_id(id, options \\ []) do log_fetch_error(id, e) {:reject, reason} + {:transmogrifier, {:error, reason}} = e -> + log_fetch_error(id, e) + {:error, reason} + {:transmogrifier, reason} = e -> log_fetch_error(id, e) {:error, reason} diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 55985d310..f6d2ea652 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -686,6 +686,16 @@ defp handle_incoming_normalised( end end + defp handle_incoming_normalised( + %{ + "type" => "Undo", + "object" => %{"type" => "Delete"} + }, + _options + ) do + {:error, :unsupported} + end + # For Undos that don't have the complete object attached, try to find it in our database. defp handle_incoming_normalised( %{ @@ -727,7 +737,7 @@ defp handle_incoming_normalised( end end - defp handle_incoming_normalised(_, _), do: :error + defp handle_incoming_normalised(_, _), do: {:error, :unsupported} @spec get_obj_helper(String.t(), Keyword.t()) :: {:ok, Object.t()} | nil def get_obj_helper(id, options \\ []) do diff --git a/lib/pleroma/workers/receiver_worker.ex b/lib/pleroma/workers/receiver_worker.ex index a8ea86eae..9980a3546 100644 --- a/lib/pleroma/workers/receiver_worker.ex +++ b/lib/pleroma/workers/receiver_worker.ex @@ -43,6 +43,10 @@ def perform(%Job{args: %{"op" => "incoming_ap_doc", "params" => params}}) do {:error, :ignore} -> {:cancel, :ignore} + {:error, :unsupported} -> + Logger.info("Received unsupported action: #{inspect(params)}") + {:cancel, :unsupported} + # invalid data or e.g. deleting an object we don't know about anyway {:error, {:validate, issue}} -> Logger.info("Received invalid AP document: #{inspect(issue)}")