diff options
author | Mark Felder <feld@feld.me> | 2024-08-23 13:52:19 -0400 |
---|---|---|
committer | Mark Felder <feld@feld.me> | 2024-08-29 11:59:42 -0400 |
commit | ceffb8a8918b83d482e9c1da64fec22b428a61f3 (patch) | |
tree | 8c8ffe225dcc33caf1048923f8a849192af14875 /lib | |
parent | 1e8b79956e0c706650358e8b98c8e04e4fcf05b9 (diff) | |
download | pleroma-ceffb8a8918b83d482e9c1da64fec22b428a61f3.tar.gz pleroma-ceffb8a8918b83d482e9c1da64fec22b428a61f3.zip |
Drop incoming Delete activities from unknown actors
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/workers/receiver_worker.ex | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/pleroma/workers/receiver_worker.ex b/lib/pleroma/workers/receiver_worker.ex index d4db97b63..ea86a3a12 100644 --- a/lib/pleroma/workers/receiver_worker.ex +++ b/lib/pleroma/workers/receiver_worker.ex @@ -33,7 +33,8 @@ defmodule Pleroma.Workers.ReceiverWorker do query_string: query_string } - with {:ok, %User{} = _actor} <- User.get_or_fetch_by_ap_id(conn_data.params["actor"]), + with {_, false} <- {:unknown_delete, unknown_delete?(params)}, + User.get_or_fetch_by_ap_id(conn_data.params["actor"]), {:ok, _public_key} <- Signature.refetch_public_key(conn_data), {:signature, true} <- {:signature, Signature.validate_signature(conn_data)}, {:ok, res} <- Federator.perform(:incoming_ap_doc, params) do @@ -58,6 +59,7 @@ defmodule Pleroma.Workers.ReceiverWorker do defp process_errors(errors) do case errors do + {:unknown_delete, true} -> {:cancel, "Delete from unknown actor"} {:error, :origin_containment_failed} -> {:cancel, :origin_containment_failed} {:error, :already_present} -> {:cancel, :already_present} {:error, {:validate_object, _} = reason} -> {:cancel, reason} @@ -71,4 +73,16 @@ defmodule Pleroma.Workers.ReceiverWorker do e -> {:error, e} end end + + defp unknown_delete?(%{ + "type" => "Delete", + "actor" => actor + }) do + case User.get_cached_by_ap_id(actor) do + %User{} -> false + _ -> true + end + end + + defp unknown_delete?(_), do: false end |