Do not strip reported statuses when configured not to

This commit is contained in:
tusooa 2022-11-09 22:36:42 -05:00
parent 481f50bcfd
commit 6f047cc308
No known key found for this signature in database
GPG key ID: 7B467EDE43A08224
5 changed files with 74 additions and 15 deletions

View file

@ -228,6 +228,7 @@ config :pleroma, :instance,
max_pinned_statuses: 1, max_pinned_statuses: 1,
attachment_links: false, attachment_links: false,
max_report_comment_size: 1000, max_report_comment_size: 1000,
report_strip_status: true,
safe_dm_mentions: false, safe_dm_mentions: false,
healthcheck: false, healthcheck: false,
remote_post_retention_days: 90, remote_post_retention_days: 90,

View file

@ -815,6 +815,12 @@ config :pleroma, :config_description, [
1_000 1_000
] ]
}, },
%{
key: :report_strip_status,
label: "Report strip status",
type: :boolean,
description: "Strip status when closing or resolving a report."
},
%{ %{
key: :safe_dm_mentions, key: :safe_dm_mentions,
label: "Safe DM mentions", label: "Safe DM mentions",

View file

@ -748,22 +748,21 @@ defmodule Pleroma.Web.ActivityPub.Utils do
ActivityPub.fetch_activities([], params, :offset) ActivityPub.fetch_activities([], params, :offset)
end end
def update_report_state(%Activity{} = activity, state) defp maybe_strip_report_status(data, state) do
when state in @strip_status_report_states do with true <- Config.get([:instance, :report_strip_status]),
{:ok, stripped_activity} = strip_report_status_data(activity) true <- state in @strip_status_report_states,
{:ok, stripped_activity} = strip_report_status_data(%Activity{data: data}) do
new_data = data |> Map.put("object", stripped_activity.data["object"])
activity.data else
|> Map.put("state", state) _ -> data
|> Map.put("object", stripped_activity.data["object"]) end
activity
|> Changeset.change(data: new_data)
|> Repo.update()
end end
def update_report_state(%Activity{} = activity, state) when state in @supported_report_states do def update_report_state(%Activity{} = activity, state) when state in @supported_report_states do
new_data = Map.put(activity.data, "state", state) new_data =
activity.data
|> Map.put("state", state)
|> maybe_strip_report_status(state)
activity activity
|> Changeset.change(data: new_data) |> Changeset.change(data: new_data)

View file

@ -4,6 +4,7 @@
defmodule Pleroma.Web.AdminAPI.Report do defmodule Pleroma.Web.AdminAPI.Report do
alias Pleroma.Activity alias Pleroma.Activity
alias Pleroma.Object
alias Pleroma.User alias Pleroma.User
def extract_report_info( def extract_report_info(
@ -16,10 +17,38 @@ defmodule Pleroma.Web.AdminAPI.Report do
status_ap_ids status_ap_ids
|> Enum.reject(&is_nil(&1)) |> Enum.reject(&is_nil(&1))
|> Enum.map(fn |> Enum.map(fn
act when is_map(act) -> Activity.get_by_ap_id_with_object(act["id"]) act when is_map(act) ->
act when is_binary(act) -> Activity.get_by_ap_id_with_object(act) Activity.get_by_ap_id_with_object(act["id"]) || make_fake_activity(act, user)
act when is_binary(act) ->
Activity.get_by_ap_id_with_object(act)
end) end)
%{report: report, user: user, account: account, statuses: statuses} %{report: report, user: user, account: account, statuses: statuses}
end end
defp make_fake_activity(act, user) do
%Activity{
id: "pleroma:fake",
data: %{
"actor" => user.ap_id,
"type" => "Create",
"to" => [],
"cc" => [],
"object" => act["id"],
"published" => act["published"]
},
recipients: [user.ap_id],
object: %Object{
data: %{
"actor" => user.ap_id,
"type" => "Note",
"content" => act["content"],
"published" => act["published"],
"to" => [],
"cc" => []
}
}
}
end
end end

View file

@ -1154,6 +1154,30 @@ defmodule Pleroma.Web.CommonAPITest do
assert activity_id == activity.data["id"] assert activity_id == activity.data["id"]
end end
test "updates report state, don't strip when report_strip_status is false" do
clear_config([:instance, :report_strip_status], false)
[reporter, target_user] = insert_pair(:user)
activity = insert(:note_activity, user: target_user)
{:ok, %Activity{id: report_id, data: report_data}} =
CommonAPI.report(reporter, %{
account_id: target_user.id,
comment: "I feel offended",
status_ids: [activity.id]
})
{:ok, report} = CommonAPI.update_report_state(report_id, "resolved")
assert report.data["state"] == "resolved"
[reported_user, reported_activity] = report.data["object"]
assert reported_user == target_user.ap_id
assert is_map(reported_activity)
assert reported_activity["content"] == report_data["object"] |> Enum.at(1) |> Map.get("content")
end
test "does not update report state when state is unsupported" do test "does not update report state when state is unsupported" do
[reporter, target_user] = insert_pair(:user) [reporter, target_user] = insert_pair(:user)
activity = insert(:note_activity, user: target_user) activity = insert(:note_activity, user: target_user)