MastoAPI: /api/v1/admin/accounts, /api/v1/admin/reports
Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
parent
222306ff27
commit
0e0931a3c2
14 changed files with 1230 additions and 1 deletions
|
|
@ -0,0 +1,258 @@
|
|||
# Pleroma: A lightweight social networking server
|
||||
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
defmodule Pleroma.Web.ApiSpec.MastodonAdmin.AccountOperation do
|
||||
alias OpenApiSpex.Operation
|
||||
alias OpenApiSpex.Schema
|
||||
alias Pleroma.Web.ApiSpec.Schemas.Account
|
||||
alias Pleroma.Web.ApiSpec.Schemas.ApiError
|
||||
alias Pleroma.Web.ApiSpec.Schemas.FlakeID
|
||||
|
||||
import Pleroma.Web.ApiSpec.Helpers
|
||||
|
||||
def open_api_operation(action) do
|
||||
operation = String.to_existing_atom("#{action}_operation")
|
||||
apply(__MODULE__, operation, [])
|
||||
end
|
||||
|
||||
def index_operation do
|
||||
%Operation{
|
||||
tags: ["User administration (Mastodon API)"],
|
||||
summary: "View accounts by criteria",
|
||||
operationId: "MastodonAdmin.AccountController.index",
|
||||
description: "View accounts matching certain criteria for filtering, up to 40 at a time.",
|
||||
security: [%{"oAuth" => ["admin:read:accounts"]}],
|
||||
parameters:
|
||||
[
|
||||
Operation.parameter(:local, :query, :boolean, "Filter for local accounts?"),
|
||||
Operation.parameter(:remote, :query, :boolean, "Filter for remote accounts?"),
|
||||
Operation.parameter(
|
||||
:by_domain,
|
||||
:query,
|
||||
:string,
|
||||
"Filter by the given domain (not implemented yet)"
|
||||
),
|
||||
Operation.parameter(
|
||||
:active,
|
||||
:query,
|
||||
:boolean,
|
||||
"Filter for currently active accounts??"
|
||||
),
|
||||
Operation.parameter(
|
||||
:pending,
|
||||
:query,
|
||||
:boolean,
|
||||
"Filter for currently pending accounts?"
|
||||
),
|
||||
Operation.parameter(
|
||||
:disabled,
|
||||
:query,
|
||||
:boolean,
|
||||
"Filter for currently disabled accounts?"
|
||||
),
|
||||
Operation.parameter(
|
||||
:sensitized,
|
||||
:query,
|
||||
:boolean,
|
||||
"Filter for currently sensitized accounts? (not implemented yet)"
|
||||
),
|
||||
Operation.parameter(
|
||||
:silenced,
|
||||
:query,
|
||||
:boolean,
|
||||
"Filter for currently silenced accounts? (not implemented yet)"
|
||||
),
|
||||
Operation.parameter(
|
||||
:suspended,
|
||||
:query,
|
||||
:boolean,
|
||||
"Filter for currently suspended accounts? (not implemented yet)"
|
||||
),
|
||||
Operation.parameter(:username, :query, :string, "Username to search for"),
|
||||
Operation.parameter(:display_name, :query, :string, "Display name to search for"),
|
||||
Operation.parameter(:email, :query, :string, "Lookup a user with this email"),
|
||||
Operation.parameter(
|
||||
:ip,
|
||||
:query,
|
||||
:string,
|
||||
"Lookup users by this IP address (not implemented yet)"
|
||||
),
|
||||
Operation.parameter(:staff, :query, :boolean, "Filter for staff accounts?")
|
||||
] ++
|
||||
pagination_params(),
|
||||
responses: %{
|
||||
200 =>
|
||||
Operation.response("Account", "application/json", %Schema{
|
||||
title: "ArrayOfAccounts",
|
||||
type: :array,
|
||||
items: account()
|
||||
}),
|
||||
401 => Operation.response("Error", "application/json", ApiError)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def show_operation do
|
||||
%Operation{
|
||||
tags: ["User administration (Mastodon API)"],
|
||||
summary: "View a specific account",
|
||||
operationId: "MastodonAdmin.AccountController.show",
|
||||
description: "View admin-level information about the given account.",
|
||||
security: [%{"oAuth" => ["admin:read:accounts"]}],
|
||||
parameters: [
|
||||
Operation.parameter(:id, :path, :string, "ID of the account")
|
||||
],
|
||||
responses: %{
|
||||
200 => Operation.response("Account", "application/json", account()),
|
||||
401 => Operation.response("Error", "application/json", ApiError),
|
||||
404 => Operation.response("Error", "application/json", ApiError)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def account_action_operation do
|
||||
%Operation{
|
||||
tags: ["User administration (Mastodon API)"],
|
||||
summary: "Perform an action against an account",
|
||||
operationId: "MastodonAdmin.AccountController.account_action",
|
||||
description:
|
||||
"Perform an action against an account and log this action in the moderation history.",
|
||||
security: [%{"oAuth" => ["admin:write:accounts"]}],
|
||||
parameters: [
|
||||
Operation.parameter(:id, :path, :string, "ID of the account")
|
||||
],
|
||||
requestBody:
|
||||
request_body(
|
||||
"Parameters",
|
||||
%Schema{
|
||||
type: :object,
|
||||
properties: %{
|
||||
type: %Schema{
|
||||
type: :string,
|
||||
enum: ["none", "disable", "sensitive", "silence", "suspend"]
|
||||
},
|
||||
report_id: %Schema{
|
||||
type: :string,
|
||||
nullable: true,
|
||||
description: "ID of an associated report that caused this action to be taken"
|
||||
}
|
||||
}
|
||||
},
|
||||
required: true
|
||||
),
|
||||
responses: %{
|
||||
204 => no_content_response(),
|
||||
401 => Operation.response("Error", "application/json", ApiError)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def delete_operation do
|
||||
%Operation{
|
||||
tags: ["User administration (Mastodon API)"],
|
||||
summary: "Delete a specific account",
|
||||
operationId: "MastodonAdmin.AccountController.delete",
|
||||
description: "Delete the given account.",
|
||||
security: [%{"oAuth" => ["admin:write:accounts"]}],
|
||||
parameters: [
|
||||
Operation.parameter(:id, :path, :string, "ID of the account")
|
||||
],
|
||||
responses: %{
|
||||
200 => Operation.response("Account", "application/json", account()),
|
||||
401 => Operation.response("Error", "application/json", ApiError),
|
||||
404 => Operation.response("Error", "application/json", ApiError)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def enable_operation do
|
||||
%Operation{
|
||||
tags: ["User administration (Mastodon API)"],
|
||||
summary: "Re-enable account",
|
||||
operationId: "MastodonAdmin.AccountController.enable",
|
||||
description: "Re-enable a local account whose login is currently disabled.",
|
||||
security: [%{"oAuth" => ["admin:write:accounts"]}],
|
||||
parameters: [
|
||||
Operation.parameter(:id, :path, :string, "ID of the account")
|
||||
],
|
||||
responses: %{
|
||||
200 => Operation.response("Account", "application/json", account()),
|
||||
401 => Operation.response("Error", "application/json", ApiError),
|
||||
404 => Operation.response("Error", "application/json", ApiError)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def approve_operation do
|
||||
%Operation{
|
||||
tags: ["User administration (Mastodon API)"],
|
||||
summary: "Approve pending account",
|
||||
operationId: "MastodonAdmin.AccountController.approve",
|
||||
description: "Approve the given local account if it is currently pending approval.",
|
||||
parameters: [
|
||||
Operation.parameter(:id, :path, :string, "ID of the account")
|
||||
],
|
||||
responses: %{
|
||||
200 => Operation.response("Account", "application/json", account()),
|
||||
401 => Operation.response("Error", "application/json", ApiError),
|
||||
404 => Operation.response("Error", "application/json", ApiError)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def reject_operation do
|
||||
%Operation{
|
||||
tags: ["User administration (Mastodon API)"],
|
||||
summary: "Reject pending account",
|
||||
operationId: "MastodonAdmin.AccountController.reject",
|
||||
description: "Reject the given local account if it is currently pending approval.",
|
||||
parameters: [
|
||||
Operation.parameter(:id, :path, :string, "ID of the account")
|
||||
],
|
||||
responses: %{
|
||||
200 => Operation.response("Account", "application/json", account()),
|
||||
400 => Operation.response("Error", "application/json", ApiError),
|
||||
401 => Operation.response("Error", "application/json", ApiError),
|
||||
404 => Operation.response("Error", "application/json", ApiError)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def account do
|
||||
%Schema{
|
||||
title: "Admin::Account",
|
||||
description: "Admin-level information about a given account.",
|
||||
type: :object,
|
||||
properties: %{
|
||||
id: FlakeID,
|
||||
username: %Schema{type: :string},
|
||||
domain: %Schema{type: :string, nullable: true},
|
||||
created_at: %Schema{type: :string, format: "date-time"},
|
||||
email: %Schema{type: :string, format: "email", nullable: true},
|
||||
ip: %Schema{type: :string, nullable: true},
|
||||
ips: %Schema{
|
||||
type: :array,
|
||||
items: %Schema{
|
||||
type: :object,
|
||||
properties: %{
|
||||
ip: %Schema{type: :string},
|
||||
used_at: %Schema{type: :string, format: "date-time"}
|
||||
}
|
||||
}
|
||||
},
|
||||
locale: %Schema{type: :string, format: "date-time", nullable: true},
|
||||
invite_request: %Schema{type: :string, format: "date-time", nullable: true},
|
||||
role: %Schema{type: :string, nullable: true},
|
||||
confirmed: %Schema{type: :boolean},
|
||||
approved: %Schema{type: :boolean},
|
||||
disabled: %Schema{type: :boolean},
|
||||
silenced: %Schema{type: :boolean, nullable: true},
|
||||
suspended: %Schema{type: :boolean, nullable: true},
|
||||
account: Account,
|
||||
created_by_application_id: %Schema{type: :string, nullable: true},
|
||||
invited_by_account_id: %Schema{type: :string, nullable: true}
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,150 @@
|
|||
# Pleroma: A lightweight social networking server
|
||||
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
defmodule Pleroma.Web.ApiSpec.MastodonAdmin.ReportOperation do
|
||||
alias OpenApiSpex.Operation
|
||||
alias OpenApiSpex.Schema
|
||||
alias Pleroma.Web.ApiSpec.MastodonAdmin.AccountOperation
|
||||
alias Pleroma.Web.ApiSpec.Schemas.ApiError
|
||||
alias Pleroma.Web.ApiSpec.Schemas.FlakeID
|
||||
alias Pleroma.Web.ApiSpec.Schemas.Status
|
||||
|
||||
import Pleroma.Web.ApiSpec.Helpers
|
||||
|
||||
def open_api_operation(action) do
|
||||
operation = String.to_existing_atom("#{action}_operation")
|
||||
apply(__MODULE__, operation, [])
|
||||
end
|
||||
|
||||
def index_operation do
|
||||
%Operation{
|
||||
tags: ["Report management (Mastodon API)"],
|
||||
summary: "View all reports",
|
||||
operationId: "MastodonAdmin.ReportController.index",
|
||||
description:
|
||||
"View all reports. Pagination may be done with HTTP Link header in the response.",
|
||||
security: [%{"oAuth" => ["admin:read:reports"]}],
|
||||
parameters:
|
||||
[
|
||||
Operation.parameter(:resolved, :query, :boolean, "Filter for resolved reports"),
|
||||
Operation.parameter(:account_id, :query, :string, "Filter by author account id"),
|
||||
Operation.parameter(
|
||||
:target_account_id,
|
||||
:query,
|
||||
:string,
|
||||
"Filter by report target account id (not implemented)"
|
||||
)
|
||||
] ++
|
||||
pagination_params(),
|
||||
responses: %{
|
||||
200 =>
|
||||
Operation.response("Reports", "application/json", %Schema{
|
||||
title: "ArrayOfReports",
|
||||
type: :array,
|
||||
items: report()
|
||||
}),
|
||||
401 => Operation.response("Error", "application/json", ApiError)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def show_operation do
|
||||
%Operation{
|
||||
tags: ["Report management (Mastodon API)"],
|
||||
summary: "View a single report",
|
||||
operationId: "MastodonAdmin.ReportController.show",
|
||||
description: "View information about the report with the given ID.",
|
||||
security: [%{"oAuth" => ["admin:read:reports"]}],
|
||||
parameters: [
|
||||
Operation.parameter(:id, :path, :string, "ID of the report")
|
||||
],
|
||||
responses: %{
|
||||
200 => Operation.response("Report", "application/json", report()),
|
||||
401 => Operation.response("Error", "application/json", ApiError),
|
||||
404 => Operation.response("Error", "application/json", ApiError)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def resolve_operation do
|
||||
%Operation{
|
||||
tags: ["Report management (Mastodon API)"],
|
||||
summary: "Mark as resolved",
|
||||
operationId: "MastodonAdmin.ReportController.resolve",
|
||||
description: "Mark a report as resolved with no further action taken.",
|
||||
security: [%{"oAuth" => ["admin:write:reports"]}],
|
||||
parameters: [
|
||||
Operation.parameter(:id, :path, :string, "ID of the report")
|
||||
],
|
||||
responses: %{
|
||||
200 => Operation.response("Report", "application/json", report()),
|
||||
400 => Operation.response("Error", "application/json", ApiError),
|
||||
401 => Operation.response("Error", "application/json", ApiError)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def reopen_operation do
|
||||
%Operation{
|
||||
tags: ["Report management (Mastodon API)"],
|
||||
summary: "Re-open report",
|
||||
operationId: "MastodonAdmin.ReportController.reopen",
|
||||
description: "Reopen a currently closed report.",
|
||||
security: [%{"oAuth" => ["admin:write:reports"]}],
|
||||
parameters: [
|
||||
Operation.parameter(:id, :path, :string, "ID of the report")
|
||||
],
|
||||
responses: %{
|
||||
200 => Operation.response("Report", "application/json", report()),
|
||||
400 => Operation.response("Error", "application/json", ApiError),
|
||||
401 => Operation.response("Error", "application/json", ApiError)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
defp report do
|
||||
%Schema{
|
||||
title: "Admin::Report",
|
||||
type: :object,
|
||||
properties: %{
|
||||
id: FlakeID,
|
||||
action_taken: %Schema{type: :boolean},
|
||||
action_taken_at: %Schema{type: :string, format: "date-time", nullable: true},
|
||||
category: %Schema{type: :string, enum: ["spam", "violation", "other"]},
|
||||
comment: %Schema{type: :string, nullable: true},
|
||||
forwarded: %Schema{type: :boolean, nullable: true},
|
||||
created_at: %Schema{type: :string, format: "date-time"},
|
||||
updated_at: %Schema{type: :string, format: "date-time"},
|
||||
account: AccountOperation.account(),
|
||||
target_account: AccountOperation.account(),
|
||||
assigned_account: %Schema{
|
||||
oneOf: [
|
||||
AccountOperation.account(),
|
||||
%Schema{type: :null}
|
||||
]
|
||||
},
|
||||
action_taken_by_account: %Schema{
|
||||
oneOf: [
|
||||
AccountOperation.account(),
|
||||
%Schema{type: :null}
|
||||
]
|
||||
},
|
||||
statuses: %Schema{
|
||||
type: :array,
|
||||
items: Status
|
||||
},
|
||||
rules: %Schema{
|
||||
type: :array,
|
||||
items: %Schema{
|
||||
type: :object,
|
||||
properties: %{
|
||||
id: %Schema{type: :integer},
|
||||
text: %Schema{type: :string}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue