aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/user.ex
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2020-05-11 15:06:23 +0200
committerlain <lain@soykaf.club>2020-05-11 15:06:23 +0200
commit5367a00257c6f862a4a8080e0176f676ce491e4d (patch)
treeb6190e2bd0b02483d43438cb337f5df111ee1392 /lib/pleroma/user.ex
parent84bb116ae3854c17b85a780fe6dae03c0bd8eaa7 (diff)
downloadpleroma-5367a00257c6f862a4a8080e0176f676ce491e4d.tar.gz
Deletion: Handle the case of pruned objects.
Diffstat (limited to 'lib/pleroma/user.ex')
-rw-r--r--lib/pleroma/user.ex19
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 2a6a23fec..a86cc3202 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -1554,10 +1554,23 @@ defmodule Pleroma.User do
|> Stream.run()
end
- defp delete_activity(%{data: %{"type" => "Create", "object" => object}}, user) do
- {:ok, delete_data, _} = Builder.delete(user, object)
+ defp delete_activity(%{data: %{"type" => "Create", "object" => object}} = activity, user) do
+ with {_, %Object{}} <- {:find_object, Object.get_by_ap_id(object)},
+ {:ok, delete_data, _} <- Builder.delete(user, object) do
+ Pipeline.common_pipeline(delete_data, local: user.local)
+ else
+ {:find_object, nil} ->
+ # We have the create activity, but not the object, it was probably pruned.
+ # Insert a tombstone and try again
+ with {:ok, tombstone_data, _} <- Builder.tombstone(user.ap_id, object),
+ {:ok, _tombstone} <- Object.create(tombstone_data) do
+ delete_activity(activity, user)
+ end
- Pipeline.common_pipeline(delete_data, local: user.local)
+ e ->
+ Logger.error("Could not delete #{object} created by #{activity.data["ap_id"]}")
+ Logger.error("Error: #{inspect(e)}")
+ end
end
defp delete_activity(%{data: %{"type" => type}} = activity, user)