@@ -412,19 +412,21 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do | |||||
def delete(%Object{data: %{"id" => id, "actor" => actor}} = object, options \\ []) do | def delete(%Object{data: %{"id" => id, "actor" => actor}} = object, options \\ []) do | ||||
local = Keyword.get(options, :local, true) | local = Keyword.get(options, :local, true) | ||||
activity_id = Keyword.get(options, :activity_id, nil) | activity_id = Keyword.get(options, :activity_id, nil) | ||||
actor = Keyword.get(options, :actor, actor) | |||||
user = User.get_cached_by_ap_id(actor) | user = User.get_cached_by_ap_id(actor) | ||||
to = (object.data["to"] || []) ++ (object.data["cc"] || []) | to = (object.data["to"] || []) ++ (object.data["cc"] || []) | ||||
with {:ok, object, activity} <- 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 | |||||
} | |||||
|> maybe_put("id", activity_id), | |||||
data <- | |||||
%{ | |||||
"type" => "Delete", | |||||
"actor" => actor, | |||||
"object" => id, | |||||
"to" => to, | |||||
"deleted_activity_id" => activity && activity.id | |||||
} | |||||
|> maybe_put("id", activity_id), | |||||
{:ok, activity} <- insert(data, local, false), | {:ok, activity} <- insert(data, local, false), | ||||
stream_out_participations(object, user), | stream_out_participations(object, user), | ||||
_ <- decrease_replies_count_if_reply(object), | _ <- decrease_replies_count_if_reply(object), | ||||
@@ -646,7 +646,8 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do | |||||
{:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(actor), | {:ok, %User{} = actor} <- User.get_or_fetch_by_ap_id(actor), | ||||
{:ok, object} <- get_obj_helper(object_id), | {:ok, object} <- get_obj_helper(object_id), | ||||
:ok <- Containment.contain_origin(actor.ap_id, object.data), | :ok <- Containment.contain_origin(actor.ap_id, object.data), | ||||
{:ok, activity} <- ActivityPub.delete(object, local: false, activity_id: id) do | |||||
{:ok, activity} <- | |||||
ActivityPub.delete(object, local: false, activity_id: id, actor: actor.ap_id) do | |||||
{:ok, activity} | {:ok, activity} | ||||
else | else | ||||
nil -> | nil -> | ||||
@@ -682,6 +682,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do | |||||
test "it works for incoming deletes" do | test "it works for incoming deletes" do | ||||
activity = insert(:note_activity) | activity = insert(:note_activity) | ||||
deleting_user = insert(:user) | |||||
data = | data = | ||||
File.read!("test/fixtures/mastodon-delete.json") | File.read!("test/fixtures/mastodon-delete.json") | ||||
@@ -694,12 +695,14 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do | |||||
data = | data = | ||||
data | data | ||||
|> Map.put("object", object) | |> Map.put("object", object) | ||||
|> Map.put("actor", activity.data["actor"]) | |||||
|> Map.put("actor", deleting_user.ap_id) | |||||
{:ok, %Activity{local: false, data: %{"id" => id}}} = Transmogrifier.handle_incoming(data) | |||||
{:ok, %Activity{actor: actor, local: false, data: %{"id" => id}}} = | |||||
Transmogrifier.handle_incoming(data) | |||||
assert id == data["id"] | assert id == data["id"] | ||||
refute Activity.get_by_id(activity.id) | refute Activity.get_by_id(activity.id) | ||||
assert actor == deleting_user.ap_id | |||||
end | end | ||||
test "it fails for incoming deletes with spoofed origin" do | test "it fails for incoming deletes with spoofed origin" do | ||||