changes for admin status endpoints
- docs fix, that status endpoints accept `page` parameter - added total to /api/pleroma/admin/instances/:instance/statuses - godmode for /api/pleroma/admin/instances/:instance/statuses
This commit is contained in:
parent
6a71aa535b
commit
66810cf49b
@ -77,6 +77,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
- Mastodon API: `/api/v1/accounts/:id` & `/api/v1/mutes` endpoints accept `with_relationships` parameter and return filled `pleroma.relationship` field.
|
||||
- Mastodon API: Endpoint to remove a conversation (`DELETE /api/v1/conversations/:id`).
|
||||
- Mastodon API: `expires_in` in the scheduled post `params` field on `/api/v1/statuses` and `/api/v1/scheduled_statuses/:id` endpoints.
|
||||
- Admin API: Added `GET /api/v2/pleroma/admin/statuses` endpoint, differs from `/api/pleroma/admin/statuses` only in response format.
|
||||
</details>
|
||||
|
||||
### Fixed
|
||||
@ -98,6 +99,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
- Mastodon API: Fixed own_votes being not returned with poll data.
|
||||
- Mastodon API: Fixed creation of scheduled posts with polls.
|
||||
- Mastodon API: Support for expires_in/expires_at in the Filters.
|
||||
- Admin API: `godmode` parameter in `/api/pleroma/admin/instances/:instance/statuses` endpoint.
|
||||
</details>
|
||||
|
||||
## Unreleased (Patch)
|
||||
|
@ -278,11 +278,12 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret
|
||||
- Params:
|
||||
- `nickname` or `id`
|
||||
- *optional* `page_size`: number of statuses to return (default is `20`)
|
||||
- *optional* `page`: **integer** page number
|
||||
- *optional* `godmode`: `true`/`false` – allows to see private statuses
|
||||
- *optional* `with_reblogs`: `true`/`false` – allows to see reblogs (default is false)
|
||||
- Response:
|
||||
- On failure: `Not found`
|
||||
- On success: JSON, where:
|
||||
- On success: JSON, where:
|
||||
- `total`: total count of the statuses for the user
|
||||
- `activities`: list of the statuses for the user
|
||||
|
||||
@ -302,6 +303,7 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret
|
||||
- Params:
|
||||
- `instance`: instance name
|
||||
- *optional* `page_size`: number of statuses to return (default is `20`)
|
||||
- *optional* `page`: **integer** page number
|
||||
- *optional* `godmode`: `true`/`false` – allows to see private statuses
|
||||
- *optional* `with_reblogs`: `true`/`false` – allows to see reblogs (default is false)
|
||||
- Response:
|
||||
@ -325,6 +327,7 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret
|
||||
|
||||
- Params:
|
||||
- *optional* `page_size`: number of statuses to return (default is `20`)
|
||||
- *optional* `page`: **integer** page number
|
||||
- *optional* `local_only`: excludes remote statuses
|
||||
- *optional* `godmode`: `true`/`false` – allows to see private statuses
|
||||
- *optional* `with_reblogs`: `true`/`false` – allows to see reblogs (default is false)
|
||||
@ -332,6 +335,31 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret
|
||||
- On failure: `Not found`
|
||||
- On success: JSON array of user's latest statuses
|
||||
|
||||
## `GET /api/v2/pleroma/admin/statuses`
|
||||
|
||||
### Retrives all latest statuses with total
|
||||
|
||||
- Params:
|
||||
- *optional* `page_size`: number of statuses to return (default is `20`)
|
||||
- *optional* `page`: **integer** page number
|
||||
- *optional* `local_only`: excludes remote statuses
|
||||
- *optional* `godmode`: `true`/`false` – allows to see private statuses
|
||||
- *optional* `with_reblogs`: `true`/`false` – allows to see reblogs (default is false)
|
||||
- Response:
|
||||
- On failure: `Not found`
|
||||
- On success: JSON, where:
|
||||
- `total`: total count of the statuses
|
||||
- `activities`: list of the statuses
|
||||
|
||||
```json
|
||||
{
|
||||
"total" : 1,
|
||||
"activities": [
|
||||
// activities list
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## `GET /api/v1/pleroma/admin/relay`
|
||||
|
||||
### List Relays
|
||||
|
@ -81,16 +81,18 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
|
||||
|
||||
action_fallback(AdminAPI.FallbackController)
|
||||
|
||||
defp truthy_param?(value), do: value in ["true", true]
|
||||
|
||||
def list_instance_statuses(conn, %{"instance" => instance} = params) do
|
||||
with_reblogs = params["with_reblogs"] == "true" || params["with_reblogs"] == true
|
||||
{page, page_size} = page_params(params)
|
||||
|
||||
result =
|
||||
ActivityPub.fetch_statuses(nil, %{
|
||||
instance: instance,
|
||||
limit: page_size,
|
||||
godmode: truthy_param?(params["godmode"]),
|
||||
offset: (page - 1) * page_size,
|
||||
exclude_reblogs: not with_reblogs,
|
||||
exclude_reblogs: not truthy_param?(params["with_reblogs"]),
|
||||
total: true
|
||||
})
|
||||
|
||||
@ -100,9 +102,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
|
||||
end
|
||||
|
||||
def list_user_statuses(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname} = params) do
|
||||
with_reblogs = params["with_reblogs"] == "true" || params["with_reblogs"] == true
|
||||
godmode = params["godmode"] == "true" || params["godmode"] == true
|
||||
|
||||
with %User{} = user <- User.get_cached_by_nickname_or_id(nickname, for: admin) do
|
||||
{page, page_size} = page_params(params)
|
||||
|
||||
@ -110,8 +109,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
|
||||
ActivityPub.fetch_user_activities(user, nil, %{
|
||||
limit: page_size,
|
||||
offset: (page - 1) * page_size,
|
||||
godmode: godmode,
|
||||
exclude_reblogs: not with_reblogs,
|
||||
godmode: truthy_param?(params["godmode"]),
|
||||
exclude_reblogs: not truthy_param?(params["with_reblogs"]),
|
||||
pagination_type: :offset,
|
||||
total: true
|
||||
})
|
||||
|
@ -15,7 +15,11 @@ defmodule Pleroma.Web.AdminAPI.StatusController do
|
||||
require Logger
|
||||
|
||||
plug(Pleroma.Web.ApiSpec.CastAndValidate)
|
||||
plug(OAuthScopesPlug, %{scopes: ["admin:read:statuses"]} when action in [:index, :show])
|
||||
|
||||
plug(
|
||||
OAuthScopesPlug,
|
||||
%{scopes: ["admin:read:statuses"]} when action in [:index, :index2, :show]
|
||||
)
|
||||
|
||||
plug(
|
||||
OAuthScopesPlug,
|
||||
@ -39,6 +43,20 @@ defmodule Pleroma.Web.AdminAPI.StatusController do
|
||||
render(conn, "index.json", activities: activities, as: :activity)
|
||||
end
|
||||
|
||||
def index2(%{assigns: %{user: _admin}} = conn, params) do
|
||||
result =
|
||||
ActivityPub.fetch_statuses(nil, %{
|
||||
godmode: params.godmode,
|
||||
local_only: params.local_only,
|
||||
limit: params.page_size,
|
||||
offset: (params.page - 1) * params.page_size,
|
||||
exclude_reblogs: not params.with_reblogs,
|
||||
total: true
|
||||
})
|
||||
|
||||
render(conn, "index.json", %{total: result[:total], activities: result[:items], as: :activity})
|
||||
end
|
||||
|
||||
def show(conn, %{id: id}) do
|
||||
with %Activity{} = activity <- Activity.get_by_id(id) do
|
||||
render(conn, "show.json", %{activity: activity})
|
||||
|
@ -22,8 +22,10 @@ defmodule Pleroma.Web.ApiSpec.Admin.StatusOperation do
|
||||
def index_operation do
|
||||
%Operation{
|
||||
tags: ["Status administration"],
|
||||
description:
|
||||
"Use [/api/v2/pleroma/admin/statuses](#operation/AdminAPI.StatusController.index2) to get response with `total` field.",
|
||||
operationId: "AdminAPI.StatusController.index",
|
||||
summary: "Get all statuses",
|
||||
summary: "Get all statuses (without total)",
|
||||
security: [%{"oAuth" => ["admin:read:statuses"]}],
|
||||
parameters: [
|
||||
Operation.parameter(
|
||||
@ -68,6 +70,61 @@ defmodule Pleroma.Web.ApiSpec.Admin.StatusOperation do
|
||||
}
|
||||
end
|
||||
|
||||
def index2_operation do
|
||||
%Operation{
|
||||
tags: ["Status administration"],
|
||||
operationId: "AdminAPI.StatusController.index2",
|
||||
summary: "Get all statuses",
|
||||
security: [%{"oAuth" => ["admin:read:statuses"]}],
|
||||
parameters: [
|
||||
Operation.parameter(
|
||||
:godmode,
|
||||
:query,
|
||||
%Schema{type: :boolean, default: false},
|
||||
"Allows to see private statuses"
|
||||
),
|
||||
Operation.parameter(
|
||||
:local_only,
|
||||
:query,
|
||||
%Schema{type: :boolean, default: false},
|
||||
"Excludes remote statuses"
|
||||
),
|
||||
Operation.parameter(
|
||||
:with_reblogs,
|
||||
:query,
|
||||
%Schema{type: :boolean, default: false},
|
||||
"Allows to see reblogs"
|
||||
),
|
||||
Operation.parameter(
|
||||
:page,
|
||||
:query,
|
||||
%Schema{type: :integer, default: 1},
|
||||
"Page"
|
||||
),
|
||||
Operation.parameter(
|
||||
:page_size,
|
||||
:query,
|
||||
%Schema{type: :integer, default: 50},
|
||||
"Number of statuses to return"
|
||||
)
|
||||
| admin_api_params()
|
||||
],
|
||||
responses: %{
|
||||
200 =>
|
||||
Operation.response("Response", "application/json", %Schema{
|
||||
type: :object,
|
||||
properties: %{
|
||||
total: %Schema{type: :integer},
|
||||
reports: %Schema{
|
||||
type: :array,
|
||||
items: status()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def show_operation do
|
||||
%Operation{
|
||||
tags: ["Status adminitration)"],
|
||||
|
@ -155,6 +155,12 @@ defmodule Pleroma.Web.Router do
|
||||
post("/uploader_callback/:upload_path", UploaderController, :callback)
|
||||
end
|
||||
|
||||
scope "/api/v2/pleroma/admin", Pleroma.Web.AdminAPI do
|
||||
pipe_through(:admin_api)
|
||||
|
||||
get("/statuses", StatusController, :index2)
|
||||
end
|
||||
|
||||
scope "/api/v1/pleroma/admin", Pleroma.Web.AdminAPI do
|
||||
pipe_through(:admin_api)
|
||||
|
||||
|
@ -832,6 +832,26 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
|
||||
|
||||
assert length(activities) == 3
|
||||
end
|
||||
|
||||
test "godmode", %{conn: conn} do
|
||||
user = insert(:user, local: false, ap_id: "https://example.com/users/user")
|
||||
{:ok, a1} = CommonAPI.post(user, %{status: "public"})
|
||||
{:ok, a2} = CommonAPI.post(user, %{status: "private", visibility: "private"})
|
||||
|
||||
%{"total" => 1, "activities" => activities} =
|
||||
conn |> get("/api/pleroma/admin/instances/example.com/statuses") |> json_response(200)
|
||||
|
||||
assert Enum.map(activities, & &1["id"]) == [a1.id]
|
||||
|
||||
%{"total" => 2, "activities" => activities} =
|
||||
conn
|
||||
|> get("/api/pleroma/admin/instances/example.com/statuses?godmode=true")
|
||||
|> json_response(200)
|
||||
|
||||
ids = Enum.map(activities, & &1["id"])
|
||||
assert a1.id in ids
|
||||
assert a2.id in ids
|
||||
end
|
||||
end
|
||||
|
||||
describe "PATCH /confirm_email" do
|
||||
|
@ -194,8 +194,64 @@ defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
|
||||
|
||||
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "private"})
|
||||
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"})
|
||||
|
||||
conn = get(conn, "/api/pleroma/admin/statuses?godmode=true")
|
||||
|
||||
assert json_response_and_validate_schema(conn, 200) |> length() == 3
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET /api/v2/pleroma/admin/statuses" do
|
||||
test "returns all public and unlisted statuses", %{conn: conn, admin: admin} do
|
||||
blocked = insert(:user)
|
||||
user = insert(:user)
|
||||
User.block(admin, blocked)
|
||||
|
||||
{:ok, _} = CommonAPI.post(user, %{status: "@#{admin.nickname}", visibility: "direct"})
|
||||
|
||||
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "unlisted"})
|
||||
{:ok, private} = CommonAPI.post(user, %{status: ".", visibility: "private"})
|
||||
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"})
|
||||
{:ok, _} = CommonAPI.post(blocked, %{status: ".", visibility: "public"})
|
||||
|
||||
%{"total" => 3, "activities" => activities} =
|
||||
conn
|
||||
|> get("/api/v2/pleroma/admin/statuses")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
ids = Enum.map(activities, & &1["id"])
|
||||
refute private.id in ids
|
||||
assert length(activities) == 3
|
||||
end
|
||||
|
||||
test "returns only local statuses with local_only on", %{conn: conn} do
|
||||
user = insert(:user)
|
||||
remote_user = insert(:user, local: false, nickname: "archaeme@archae.me")
|
||||
insert(:note_activity, user: user, local: true)
|
||||
insert(:note_activity, user: remote_user, local: false)
|
||||
|
||||
%{"total" => 1, "activities" => activities} =
|
||||
conn
|
||||
|> get("/api/v2/pleroma/admin/statuses?local_only=true")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
assert length(activities) == 1
|
||||
end
|
||||
|
||||
test "returns private and direct statuses with godmode on", %{conn: conn, admin: admin} do
|
||||
user = insert(:user)
|
||||
|
||||
{:ok, _} = CommonAPI.post(user, %{status: "@#{admin.nickname}", visibility: "direct"})
|
||||
|
||||
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "private"})
|
||||
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"})
|
||||
|
||||
%{"total" => 3, "activities" => activities} =
|
||||
conn
|
||||
|> get("/api/v2/pleroma/admin/statuses?godmode=true")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
assert length(activities) == 3
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user