summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMark Felder <feld@feld.me>2024-08-23 13:52:19 -0400
committerMark Felder <feld@feld.me>2024-08-29 11:59:42 -0400
commitceffb8a8918b83d482e9c1da64fec22b428a61f3 (patch)
tree8c8ffe225dcc33caf1048923f8a849192af14875 /lib
parent1e8b79956e0c706650358e8b98c8e04e4fcf05b9 (diff)
downloadpleroma-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.ex16
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