fix(mastodon-api): harden admin moderation actions
This commit is contained in:
parent
a5aad47cff
commit
458a15bf9f
10 changed files with 344 additions and 31 deletions
|
|
@ -183,6 +183,20 @@ defmodule Pleroma.Web.MastodonAPI.Admin.AccountControllerTest do
|
|||
assert %{is_active: false} = user
|
||||
end
|
||||
|
||||
test "does not disable a remote account", %{conn: conn} do
|
||||
%{id: id} = user = insert(:user, local: false)
|
||||
|
||||
assert %{"error" => "Only local accounts can be disabled"} =
|
||||
conn
|
||||
|> put_req_header("content-type", "application/json")
|
||||
|> post("/api/v1/admin/accounts/#{id}/action", %{
|
||||
"type" => "disable"
|
||||
})
|
||||
|> json_response_and_validate_schema(400)
|
||||
|
||||
assert %{is_active: true} = Repo.reload!(user)
|
||||
end
|
||||
|
||||
test "perform action with assigned report", %{conn: conn} do
|
||||
[reporter, target_user] = insert_pair(:user)
|
||||
|
||||
|
|
@ -191,11 +205,9 @@ defmodule Pleroma.Web.MastodonAPI.Admin.AccountControllerTest do
|
|||
account_id: target_user.id
|
||||
})
|
||||
|
||||
%{id: id} = insert(:user)
|
||||
|
||||
conn
|
||||
|> put_req_header("content-type", "application/json")
|
||||
|> post("/api/v1/admin/accounts/#{id}/action", %{
|
||||
|> post("/api/v1/admin/accounts/#{target_user.id}/action", %{
|
||||
"type" => "none",
|
||||
"report_id" => report_id
|
||||
})
|
||||
|
|
@ -205,6 +217,56 @@ defmodule Pleroma.Web.MastodonAPI.Admin.AccountControllerTest do
|
|||
|
||||
assert %{data: %{"state" => "resolved"}} = report
|
||||
end
|
||||
|
||||
test "requires the report management privilege", %{conn: conn} do
|
||||
clear_config([:instance, :admin_privileges], [:users_manage_activation_state])
|
||||
|
||||
%{id: id} = insert(:user)
|
||||
|
||||
assert %{"error" => _} =
|
||||
conn
|
||||
|> put_req_header("content-type", "application/json")
|
||||
|> post("/api/v1/admin/accounts/#{id}/action", %{"type" => "none"})
|
||||
|> json_response(403)
|
||||
end
|
||||
|
||||
test "does not resolve a report for another account", %{conn: conn} do
|
||||
[reporter, target_user, other_user] = insert_list(3, :user)
|
||||
|
||||
{:ok, report} =
|
||||
CommonAPI.report(reporter, %{
|
||||
account_id: target_user.id
|
||||
})
|
||||
|
||||
assert %{"error" => _} =
|
||||
conn
|
||||
|> put_req_header("content-type", "application/json")
|
||||
|> post("/api/v1/admin/accounts/#{other_user.id}/action", %{
|
||||
"type" => "none",
|
||||
"report_id" => report.id
|
||||
})
|
||||
|> json_response_and_validate_schema(400)
|
||||
|
||||
assert %{data: %{"state" => "open"}} = Repo.reload!(report)
|
||||
end
|
||||
|
||||
test "requires an action type", %{conn: conn} do
|
||||
%{id: id} = insert(:user)
|
||||
|
||||
conn
|
||||
|> put_req_header("content-type", "application/json")
|
||||
|> post("/api/v1/admin/accounts/#{id}/action", %{})
|
||||
|> json_response_and_validate_schema(400)
|
||||
end
|
||||
|
||||
test "rejects unsupported action types", %{conn: conn} do
|
||||
%{id: id} = insert(:user)
|
||||
|
||||
conn
|
||||
|> put_req_header("content-type", "application/json")
|
||||
|> post("/api/v1/admin/accounts/#{id}/action", %{"type" => "sensitive"})
|
||||
|> json_response_and_validate_schema(400)
|
||||
end
|
||||
end
|
||||
|
||||
describe "POST /api/v1/admin/accounts/:id/enable" do
|
||||
|
|
|
|||
|
|
@ -8,6 +8,9 @@ defmodule Pleroma.Web.MastodonAPI.Admin.ReportControllerTest do
|
|||
|
||||
import Pleroma.Factory
|
||||
|
||||
alias Pleroma.Activity
|
||||
alias Pleroma.Repo
|
||||
alias Pleroma.Rule
|
||||
alias Pleroma.Web.CommonAPI
|
||||
|
||||
setup_all do
|
||||
|
|
@ -58,6 +61,11 @@ defmodule Pleroma.Web.MastodonAPI.Admin.ReportControllerTest do
|
|||
|> get("/api/v1/admin/reports")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
assert [%{"id" => ^report_id1}] =
|
||||
conn
|
||||
|> get("/api/v1/admin/reports?resolved=false")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
assert [%{"id" => ^report_id2}, %{"id" => ^report_id1}] =
|
||||
conn
|
||||
|> get("/api/v1/admin/reports?resolved=true&unresolved=true")
|
||||
|
|
@ -68,6 +76,25 @@ defmodule Pleroma.Web.MastodonAPI.Admin.ReportControllerTest do
|
|||
|> get("/api/v1/admin/reports?resolved=true")
|
||||
|> json_response_and_validate_schema(200)
|
||||
end
|
||||
|
||||
test "get reports by target account", %{conn: conn} do
|
||||
[reporter, target_user, other_target] = insert_list(3, :user)
|
||||
|
||||
{:ok, %{id: report_id}} =
|
||||
CommonAPI.report(reporter, %{
|
||||
account_id: target_user.id
|
||||
})
|
||||
|
||||
{:ok, _report} =
|
||||
CommonAPI.report(reporter, %{
|
||||
account_id: other_target.id
|
||||
})
|
||||
|
||||
assert [%{"id" => ^report_id}] =
|
||||
conn
|
||||
|> get("/api/v1/admin/reports?target_account_id=#{target_user.id}")
|
||||
|> json_response_and_validate_schema(200)
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET /api/v1/admin/reports/:id" do
|
||||
|
|
@ -86,6 +113,34 @@ defmodule Pleroma.Web.MastodonAPI.Admin.ReportControllerTest do
|
|||
|> get("/api/v1/admin/reports/#{report_id}")
|
||||
|> json_response_and_validate_schema(200)
|
||||
end
|
||||
|
||||
test "returns report rules", %{conn: conn} do
|
||||
[reporter, target_user] = insert_pair(:user)
|
||||
rule = Rule.create(%{text: "Be excellent to each other"})
|
||||
|
||||
{:ok, %{id: report_id}} =
|
||||
CommonAPI.report(reporter, %{
|
||||
account_id: target_user.id,
|
||||
rule_ids: [rule.id]
|
||||
})
|
||||
|
||||
assert %{
|
||||
"rules" => [
|
||||
%{"id" => rule_id, "text" => "Be excellent to each other"}
|
||||
]
|
||||
} =
|
||||
conn
|
||||
|> get("/api/v1/admin/reports/#{report_id}")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
assert rule_id == to_string(rule.id)
|
||||
end
|
||||
|
||||
test "returns 404 for a missing report", %{conn: conn} do
|
||||
conn
|
||||
|> get("/api/v1/admin/reports/0")
|
||||
|> json_response_and_validate_schema(404)
|
||||
end
|
||||
end
|
||||
|
||||
describe "POST /api/v1/admin/reports/:id/resolve" do
|
||||
|
|
@ -104,6 +159,16 @@ defmodule Pleroma.Web.MastodonAPI.Admin.ReportControllerTest do
|
|||
|> post("/api/v1/admin/reports/#{report_id}/resolve")
|
||||
|> json_response_and_validate_schema(200)
|
||||
end
|
||||
|
||||
test "does not mutate a non-report activity", %{conn: conn} do
|
||||
activity = insert(:note_activity)
|
||||
|
||||
conn
|
||||
|> post("/api/v1/admin/reports/#{activity.id}/resolve")
|
||||
|> json_response_and_validate_schema(404)
|
||||
|
||||
refute Repo.reload!(activity).data["state"]
|
||||
end
|
||||
end
|
||||
|
||||
describe "POST /api/v1/admin/reports/:id/reopen" do
|
||||
|
|
@ -124,5 +189,51 @@ defmodule Pleroma.Web.MastodonAPI.Admin.ReportControllerTest do
|
|||
|> post("/api/v1/admin/reports/#{report_id}/reopen")
|
||||
|> json_response_and_validate_schema(200)
|
||||
end
|
||||
|
||||
test "does not mutate a non-report activity", %{conn: conn} do
|
||||
activity = insert(:note_activity)
|
||||
|
||||
conn
|
||||
|> post("/api/v1/admin/reports/#{activity.id}/reopen")
|
||||
|> json_response_and_validate_schema(404)
|
||||
|
||||
refute Repo.reload!(activity).data["state"]
|
||||
end
|
||||
end
|
||||
|
||||
describe "POST /api/v1/admin/reports/:id/assign_to_self" do
|
||||
test "assign and unassign a report", %{admin: admin, conn: conn} do
|
||||
[reporter, target_user] = insert_pair(:user)
|
||||
|
||||
{:ok, report} =
|
||||
CommonAPI.report(reporter, %{
|
||||
account_id: target_user.id
|
||||
})
|
||||
|
||||
assert %{"assigned_account" => %{"id" => admin_id}} =
|
||||
conn
|
||||
|> post("/api/v1/admin/reports/#{report.id}/assign_to_self")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
assert admin_id == admin.id
|
||||
assert Repo.reload!(report).data["assigned_account"] == admin.id
|
||||
|
||||
assert %{"assigned_account" => nil} =
|
||||
conn
|
||||
|> post("/api/v1/admin/reports/#{report.id}/unassign")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
refute Repo.reload!(report).data["assigned_account"]
|
||||
end
|
||||
|
||||
test "does not assign a non-report activity", %{conn: conn} do
|
||||
%Activity{id: id} = activity = insert(:note_activity)
|
||||
|
||||
conn
|
||||
|> post("/api/v1/admin/reports/#{id}/assign_to_self")
|
||||
|> json_response_and_validate_schema(404)
|
||||
|
||||
refute Repo.reload!(activity).data["assigned_account"]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue