aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pleroma/activity.ex12
-rw-r--r--lib/pleroma/object.ex4
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex16
-rw-r--r--lib/pleroma/web/activity_pub/transmogrifier.ex4
-rw-r--r--lib/pleroma/web/streamer.ex8
-rw-r--r--test/web/streamer_test.exs10
6 files changed, 40 insertions, 14 deletions
diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex
index 66854dc2d..18d5b70de 100644
--- a/lib/pleroma/activity.ex
+++ b/lib/pleroma/activity.ex
@@ -107,6 +107,18 @@ defmodule Pleroma.Activity do
def get_in_reply_to_activity(_), do: nil
+ def delete_by_ap_id(id) when is_binary(id) do
+ by_object_ap_id(id)
+ |> Repo.delete_all(returning: true)
+ |> elem(1)
+ |> Enum.find(fn
+ %{data: %{"type" => "Create", "object" => %{"id" => ap_id}}} -> ap_id == id
+ _ -> nil
+ end)
+ end
+
+ def delete_by_ap_id(_), do: nil
+
for {ap_type, type} <- @mastodon_notification_types do
def mastodon_notification_type(%Activity{data: %{"type" => unquote(ap_type)}}),
do: unquote(type)
diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex
index 5f1fc801b..7510a09bb 100644
--- a/lib/pleroma/object.ex
+++ b/lib/pleroma/object.ex
@@ -86,9 +86,9 @@ defmodule Pleroma.Object do
def delete(%Object{data: %{"id" => id}} = object) do
with {:ok, _obj} = swap_object_with_tombstone(object),
- Repo.delete_all(Activity.by_object_ap_id(id)),
+ deleted_activity = Activity.delete_by_ap_id(id),
{:ok, true} <- Cachex.del(:object_cache, "object:#{id}") do
- {:ok, object}
+ {:ok, object, deleted_activity}
end
end
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index adb42b9ab..2f11f8984 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -311,14 +311,14 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
user = User.get_cached_by_ap_id(actor)
to = object.data["to"] || [] ++ object.data["cc"] || []
- data = %{
- "type" => "Delete",
- "actor" => actor,
- "object" => id,
- "to" => to
- }
-
- with {:ok, _} <- Object.delete(object),
+ with {:ok, object, activity} <- Object.delete(object),
+ data <- %{
+ "type" => "Delete",
+ "actor" => actor,
+ "object" => id,
+ "to" => to,
+ "deleted_activity_id" => activity && activity.id
+ },
{:ok, activity} <- insert(data, local),
# Changing note count prior to enqueuing federation task in order to avoid race conditions on updating user.info
{:ok, _actor} <- decrease_note_count_if_public(user, object),
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex
index 88007aa16..27d223a3e 100644
--- a/lib/pleroma/web/activity_pub/transmogrifier.ex
+++ b/lib/pleroma/web/activity_pub/transmogrifier.ex
@@ -736,6 +736,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
def prepare_outgoing(%{"type" => _type} = data) do
data =
data
+ |> strip_internal_fields
|> maybe_fix_object_url
|> Map.merge(Utils.make_json_ld_header())
@@ -870,7 +871,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
"announcements",
"announcement_count",
"emoji",
- "context_id"
+ "context_id",
+ "deleted_activity_id"
])
end
diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex
index 27e8020f4..ad888c361 100644
--- a/lib/pleroma/web/streamer.ex
+++ b/lib/pleroma/web/streamer.ex
@@ -211,15 +211,19 @@ defmodule Pleroma.Web.Streamer do
end)
end
- def push_to_socket(topics, topic, %Activity{id: id, data: %{"type" => "Delete"}}) do
+ def push_to_socket(topics, topic, %Activity{
+ data: %{"type" => "Delete", "deleted_activity_id" => deleted_activity_id}
+ }) do
Enum.each(topics[topic] || [], fn socket ->
send(
socket.transport_pid,
- {:text, %{event: "delete", payload: to_string(id)} |> Jason.encode!()}
+ {:text, %{event: "delete", payload: to_string(deleted_activity_id)} |> Jason.encode!()}
)
end)
end
+ def push_to_socket(_topics, _topic, %Activity{data: %{"type" => "Delete"}}), do: :noop
+
def push_to_socket(topics, topic, item) do
Enum.each(topics[topic] || [], fn socket ->
# Get the current user so we have up-to-date blocks etc.
diff --git a/test/web/streamer_test.exs b/test/web/streamer_test.exs
index 16d7b9c24..a0969e1d7 100644
--- a/test/web/streamer_test.exs
+++ b/test/web/streamer_test.exs
@@ -39,7 +39,15 @@ defmodule Pleroma.Web.StreamerTest do
task =
Task.async(fn ->
- assert_receive {:text, _}, 4_000
+ expected_event =
+ %{
+ "event" => "delete",
+ "payload" => activity.id
+ }
+ |> Jason.encode!()
+
+ assert_receive {:text, received_event}, 4_000
+ assert received_event == expected_event
end)
fake_socket = %{