Explorar el Código

Admin API: list all statuses from a given instance

feature/user-whitelist
Maxim Filippov hace 4 años
padre
commit
30af5da330
Se han modificado 5 ficheros con 81 adiciones y 0 borrados
  1. +1
    -0
      CHANGELOG.md
  2. +26
    -0
      lib/pleroma/web/activity_pub/activity_pub.ex
  3. +15
    -0
      lib/pleroma/web/admin_api/admin_api_controller.ex
  4. +2
    -0
      lib/pleroma/web/router.ex
  5. +37
    -0
      test/web/admin_api/admin_api_controller_test.exs

+ 1
- 0
CHANGELOG.md Ver fichero

@@ -60,6 +60,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Mastodon API: Add `/api/v1/markers` for managing timeline read markers
- Mastodon API: Add the `recipients` parameter to `GET /api/v1/conversations`
- Configuration: `feed` option for user atom feed.
- Admin API: Add `/api/pleroma/admin/instances/:instance/statuses` - lists all statuses from a given instance
</details>

### Fixed


+ 26
- 0
lib/pleroma/web/activity_pub/activity_pub.ex Ver fichero

@@ -708,6 +708,17 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|> Enum.reverse()
end

def fetch_instance_activities(params) do
params =
params
|> Map.put("type", ["Create", "Announce"])
|> Map.put("instance", params["instance"])
|> Map.put("whole_db", true)

fetch_activities([Pleroma.Constants.as_public()], params, :offset)
|> Enum.reverse()
end

defp user_activities_recipients(%{"godmode" => true}) do
[]
end
@@ -935,6 +946,20 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do

defp restrict_muted_reblogs(query, _), do: query

defp restrict_instance(query, %{"instance" => instance}) do
users =
from(
u in User,
select: u.ap_id,
where: fragment("? LIKE ?", u.nickname, ^"%@#{instance}")
)
|> Repo.all()

from(activity in query, where: activity.actor in ^users)
end

defp restrict_instance(query, _), do: query

defp exclude_poll_votes(query, %{"include_poll_votes" => true}), do: query

defp exclude_poll_votes(query, _) do
@@ -1015,6 +1040,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|> restrict_reblogs(opts)
|> restrict_pinned(opts)
|> restrict_muted_reblogs(opts)
|> restrict_instance(opts)
|> Activity.restrict_deactivated_users()
|> exclude_poll_votes(opts)
|> exclude_visibility(opts)


+ 15
- 0
lib/pleroma/web/admin_api/admin_api_controller.ex Ver fichero

@@ -226,6 +226,21 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
end
end

def list_instance_statuses(conn, %{"instance" => instance} = params) do
{page, page_size} = page_params(params)

activities =
ActivityPub.fetch_instance_activities(%{
"instance" => instance,
"limit" => page_size,
"offset" => (page - 1) * page_size
})

conn
|> put_view(StatusView)
|> render("index.json", %{activities: activities, as: :activity})
end

def list_user_statuses(conn, %{"nickname" => nickname} = params) do
godmode = params["godmode"] == "true" || params["godmode"] == true



+ 2
- 0
lib/pleroma/web/router.ex Ver fichero

@@ -177,6 +177,8 @@ defmodule Pleroma.Web.Router do
get("/users/:nickname", AdminAPIController, :user_show)
get("/users/:nickname/statuses", AdminAPIController, :list_user_statuses)

get("/instances/:instance/statuses", AdminAPIController, :list_instance_statuses)

get("/reports", AdminAPIController, :list_reports)
get("/reports/:id", AdminAPIController, :report_show)
put("/reports/:id", AdminAPIController, :report_update_state)


+ 37
- 0
test/web/admin_api/admin_api_controller_test.exs Ver fichero

@@ -2640,6 +2640,43 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
"@#{admin.nickname} unfollowed relay: http://mastodon.example.org/users/admin"
end
end

describe "instances" do
test "GET /instances/:instance/statuses" do
admin = insert(:user, is_admin: true)
user = insert(:user, local: false, nickname: "archaeme@archae.me")
user2 = insert(:user, local: false, nickname: "test@test.com")
insert_pair(:note_activity, user: user)
insert(:note_activity, user: user2)

conn =
build_conn()
|> assign(:user, admin)
|> get("/api/pleroma/admin/instances/archae.me/statuses")

response = json_response(conn, 200)

assert length(response) == 2

conn =
build_conn()
|> assign(:user, admin)
|> get("/api/pleroma/admin/instances/test.com/statuses")

response = json_response(conn, 200)

assert length(response) == 1

conn =
build_conn()
|> assign(:user, admin)
|> get("/api/pleroma/admin/instances/nonexistent.com/statuses")

response = json_response(conn, 200)

assert length(response) == 0
end
end
end

# Needed for testing


Cargando…
Cancelar
Guardar