@@ -12,6 +12,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do | |||
alias Pleroma.User | |||
alias Pleroma.Web | |||
alias Pleroma.Web.ActivityPub.Visibility | |||
alias Pleroma.Web.AdminAPI.AccountView | |||
alias Pleroma.Web.Endpoint | |||
alias Pleroma.Web.Router.Helpers | |||
@@ -608,34 +609,24 @@ defmodule Pleroma.Web.ActivityPub.Utils do | |||
defp build_flag_object(%{account: account, statuses: statuses} = _) do | |||
[account.ap_id] ++ | |||
Enum.map(statuses || [], fn | |||
%Activity{} = act -> | |||
obj = Object.get_by_ap_id(act.data["object"]) | |||
%{ | |||
"type" => "Note", | |||
"id" => act.data["id"], | |||
"content" => obj.data["content"] | |||
} | |||
act when is_map(act) -> | |||
obj = Object.get_by_ap_id(act["object"]) | |||
%{ | |||
"type" => "Note", | |||
"id" => act["id"], | |||
"content" => obj.data["content"] | |||
} | |||
act | |||
when is_binary(act) -> | |||
activity = Activity.get_by_ap_id_with_object(act) | |||
%{ | |||
"type" => "Note", | |||
"id" => activity.data["id"], | |||
"content" => activity.data["object"]["content"] | |||
} | |||
Enum.map(statuses || [], fn act -> | |||
id = | |||
case act do | |||
%Activity{} = act -> act.data["id"] | |||
act when is_map(act) -> act["id"] | |||
act when is_binary(act) -> act | |||
end | |||
activity = Activity.get_by_ap_id_with_object(id) | |||
actor = User.get_by_ap_id(activity.object.data["actor"]) | |||
%{ | |||
"type" => "Note", | |||
"id" => activity.data["id"], | |||
"content" => activity.object.data["content"], | |||
"published" => activity.object.data["published"], | |||
"actor" => AccountView.render("show.json", %{user: actor}) | |||
} | |||
end) | |||
end | |||
@@ -13,8 +13,8 @@ defmodule Pleroma.Web.AdminAPI.Report do | |||
account = User.get_cached_by_ap_id(account_ap_id) | |||
statuses = | |||
Enum.map(status_ap_ids, fn ap_id -> | |||
Activity.get_by_ap_id_with_object(ap_id) | |||
Enum.map(status_ap_ids, fn act -> | |||
Activity.get_by_ap_id_with_object(act["id"]) | |||
end) | |||
%{report: report, user: user, account: account, statuses: statuses} | |||
@@ -10,6 +10,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do | |||
alias Pleroma.User | |||
alias Pleroma.Web.ActivityPub.ActivityPub | |||
alias Pleroma.Web.ActivityPub.Utils | |||
alias Pleroma.Web.AdminAPI.AccountView | |||
alias Pleroma.Web.CommonAPI | |||
import Pleroma.Factory | |||
@@ -1265,6 +1266,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do | |||
target_ap_id = target_account.ap_id | |||
activity_ap_id = activity.data["id"] | |||
activity_with_object = Activity.get_by_ap_id_with_object(activity_ap_id) | |||
assert {:ok, activity} = | |||
ActivityPub.flag(%{ | |||
actor: reporter, | |||
@@ -1274,13 +1277,21 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do | |||
content: content | |||
}) | |||
note_obj = %{ | |||
"type" => "Note", | |||
"id" => activity_ap_id, | |||
"content" => content, | |||
"published" => activity_with_object.object.data["published"], | |||
"actor" => AccountView.render("show.json", %{user: target_account}) | |||
} | |||
assert %Activity{ | |||
actor: ^reporter_ap_id, | |||
data: %{ | |||
"type" => "Flag", | |||
"content" => ^content, | |||
"context" => ^context, | |||
"object" => [^target_ap_id, ^activity_ap_id] | |||
"object" => [^target_ap_id, ^note_obj] | |||
} | |||
} = activity | |||
end | |||
@@ -12,6 +12,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do | |||
alias Pleroma.User | |||
alias Pleroma.Web.ActivityPub.ActivityPub | |||
alias Pleroma.Web.ActivityPub.Transmogrifier | |||
alias Pleroma.Web.AdminAPI.AccountView | |||
alias Pleroma.Web.CommonAPI | |||
alias Pleroma.Web.OStatus | |||
alias Pleroma.Web.Websub.WebsubClientSubscription | |||
@@ -1093,10 +1094,18 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do | |||
{:ok, activity} = CommonAPI.post(user, %{"status" => "test post"}) | |||
object = Object.normalize(activity) | |||
note_obj = %{ | |||
"type" => "Note", | |||
"id" => activity.data["id"], | |||
"content" => "test post", | |||
"published" => object.data["published"], | |||
"actor" => AccountView.render("show.json", %{user: user}) | |||
} | |||
message = %{ | |||
"@context" => "https://www.w3.org/ns/activitystreams", | |||
"cc" => [user.ap_id], | |||
"object" => [user.ap_id, object.data["id"]], | |||
"object" => [user.ap_id, activity], | |||
"type" => "Flag", | |||
"content" => "blocked AND reported!!!", | |||
"actor" => other_user.ap_id | |||
@@ -1104,7 +1113,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do | |||
assert {:ok, activity} = Transmogrifier.handle_incoming(message) | |||
assert activity.data["object"] == [user.ap_id, object.data["id"]] | |||
assert activity.data["object"] == [user.ap_id, note_obj] | |||
assert activity.data["content"] == "blocked AND reported!!!" | |||
assert activity.data["actor"] == other_user.ap_id | |||
assert activity.data["cc"] == [user.ap_id] | |||
@@ -10,6 +10,7 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do | |||
alias Pleroma.User | |||
alias Pleroma.Web.ActivityPub.ActivityPub | |||
alias Pleroma.Web.ActivityPub.Utils | |||
alias Pleroma.Web.AdminAPI.AccountView | |||
alias Pleroma.Web.CommonAPI | |||
import Pleroma.Factory | |||
@@ -581,11 +582,19 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do | |||
%{} | |||
) | |||
note_obj = %{ | |||
"type" => "Note", | |||
"id" => activity_ap_id, | |||
"content" => content, | |||
"published" => activity.object.data["published"], | |||
"actor" => AccountView.render("show.json", %{user: target_account}) | |||
} | |||
assert %{ | |||
"type" => "Flag", | |||
"content" => ^content, | |||
"context" => ^context, | |||
"object" => [^target_ap_id, ^activity_ap_id], | |||
"object" => [^target_ap_id, ^note_obj], | |||
"state" => "open" | |||
} = res | |||
end | |||
@@ -10,6 +10,7 @@ defmodule Pleroma.Web.CommonAPITest do | |||
alias Pleroma.User | |||
alias Pleroma.Web.ActivityPub.ActivityPub | |||
alias Pleroma.Web.ActivityPub.Visibility | |||
alias Pleroma.Web.AdminAPI.AccountView | |||
alias Pleroma.Web.CommonAPI | |||
import Pleroma.Factory | |||
@@ -385,6 +386,14 @@ defmodule Pleroma.Web.CommonAPITest do | |||
"status_ids" => [activity.id] | |||
} | |||
note_obj = %{ | |||
"type" => "Note", | |||
"id" => activity_ap_id, | |||
"content" => "foobar", | |||
"published" => activity.object.data["published"], | |||
"actor" => AccountView.render("show.json", %{user: target_user}) | |||
} | |||
assert {:ok, flag_activity} = CommonAPI.report(reporter, report_data) | |||
assert %Activity{ | |||
@@ -392,7 +401,7 @@ defmodule Pleroma.Web.CommonAPITest do | |||
data: %{ | |||
"type" => "Flag", | |||
"content" => ^comment, | |||
"object" => [^target_ap_id, ^activity_ap_id], | |||
"object" => [^target_ap_id, ^note_obj], | |||
"state" => "open" | |||
} | |||
} = flag_activity | |||