aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Filippov <colixer@gmail.com>2019-07-14 00:37:19 +0300
committerMaxim Filippov <colixer@gmail.com>2019-07-14 00:37:26 +0300
commita9459ff98f0af590931ef279c2bc7efb0cceac5a (patch)
treea580e9207f5117640c4707ae554a8207c4583be5
parentdb75288b71e7531f8e5033f56fc0b9a7d1d8efb3 (diff)
downloadpleroma-a9459ff98f0af590931ef279c2bc7efb0cceac5a.tar.gz
Admin API: Endpoint for fetching latest user's statuses
-rw-r--r--CHANGELOG.md1
-rw-r--r--docs/api/admin_api.md12
-rw-r--r--lib/pleroma/web/admin_api/admin_api_controller.ex16
-rw-r--r--lib/pleroma/web/router.ex1
-rw-r--r--test/support/factory.ex5
-rw-r--r--test/web/admin_api/admin_api_controller_test.exs33
6 files changed, 67 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 942733ab6..86cbaeff7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -30,6 +30,7 @@ Configuration: `federation_incoming_replies_max_depth` option
- Added synchronization of following/followers counters for external users
- Configuration: `enabled` option for `Pleroma.Emails.Mailer`, defaulting to `false`.
- Mastodon API: Add support for categories for custom emojis by reusing the group feature. <https://github.com/tootsuite/mastodon/pull/11196>
+- Admin API: Endpoint for fetching latest user's statuses
### Changed
- Configuration: Filter.AnonymizeFilename added ability to retain file extension with custom text
diff --git a/docs/api/admin_api.md b/docs/api/admin_api.md
index c429da822..3880af218 100644
--- a/docs/api/admin_api.md
+++ b/docs/api/admin_api.md
@@ -187,6 +187,18 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret
- On failure: `Not found`
- On success: JSON of the user
+## `/api/pleroma/admin/users/:nickname_or_id/statuses`
+
+### Retrive user's latest statuses
+
+- Method: `GET`
+- Params:
+ - `nickname` or `id`
+ - *optional* `page_size`: number of statuses to return (default is `20`)
+- Response:
+ - On failure: `Not found`
+ - On success: JSON array of user's latest statuses
+
## `/api/pleroma/admin/relay`
### Follow a Relay
diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex
index 4a0bf4823..64ad7e8e2 100644
--- a/lib/pleroma/web/admin_api/admin_api_controller.ex
+++ b/lib/pleroma/web/admin_api/admin_api_controller.ex
@@ -82,6 +82,22 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
end
end
+ def list_user_statuses(conn, %{"nickname" => nickname} = params) do
+ with %User{} = user <- User.get_cached_by_nickname_or_id(nickname) do
+ {_, page_size} = page_params(params)
+
+ activities =
+ ActivityPub.fetch_user_activities(user, nil, %{
+ "limit" => page_size
+ })
+
+ conn
+ |> json(StatusView.render("index.json", %{activities: activities, as: :activity}))
+ else
+ _ -> {:error, :not_found}
+ end
+ end
+
def user_toggle_activation(conn, %{"nickname" => nickname}) do
user = User.get_cached_by_nickname(nickname)
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index d53fa8a35..9315302c8 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -197,6 +197,7 @@ defmodule Pleroma.Web.Router do
get("/users", AdminAPIController, :list_users)
get("/users/:nickname", AdminAPIController, :user_show)
+ get("/users/:nickname/statuses", AdminAPIController, :list_user_statuses)
get("/reports", AdminAPIController, :list_reports)
get("/reports/:id", AdminAPIController, :report_show)
diff --git a/test/support/factory.ex b/test/support/factory.ex
index 531eb81e4..807b34545 100644
--- a/test/support/factory.ex
+++ b/test/support/factory.ex
@@ -118,7 +118,10 @@ defmodule Pleroma.Factory do
def note_activity_factory(attrs \\ %{}) do
user = attrs[:user] || insert(:user)
note = attrs[:note] || insert(:note, user: user)
+ published = attrs[:published] || DateTime.utc_now() |> DateTime.to_iso8601()
attrs = Map.drop(attrs, [:user, :note])
+ require IEx
+ IEx.pry()
data = %{
"id" => Pleroma.Web.ActivityPub.Utils.generate_activity_id(),
@@ -126,7 +129,7 @@ defmodule Pleroma.Factory do
"actor" => note.data["actor"],
"to" => note.data["to"],
"object" => note.data["id"],
- "published" => DateTime.utc_now() |> DateTime.to_iso8601(),
+ "published" => published,
"context" => note.data["context"]
}
diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs
index 1b71cbff3..9d4b3d74b 100644
--- a/test/web/admin_api/admin_api_controller_test.exs
+++ b/test/web/admin_api/admin_api_controller_test.exs
@@ -1863,6 +1863,39 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
}
end
end
+
+ describe "GET /api/pleroma/admin/users/:nickname/statuses" do
+ setup do
+ admin = insert(:user, info: %{is_admin: true})
+ user = insert(:user)
+
+ date1 = (DateTime.to_unix(DateTime.utc_now()) + 2000) |> DateTime.from_unix!()
+ date2 = (DateTime.to_unix(DateTime.utc_now()) + 1000) |> DateTime.from_unix!()
+ date3 = (DateTime.to_unix(DateTime.utc_now()) + 3000) |> DateTime.from_unix!()
+
+ insert(:note_activity, user: user, published: date1)
+ insert(:note_activity, user: user, published: date2)
+ insert(:note_activity, user: user, published: date3)
+
+ conn =
+ build_conn()
+ |> assign(:user, admin)
+
+ {:ok, conn: conn, user: user}
+ end
+
+ test "renders user's statuses", %{conn: conn, user: user} do
+ conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}/statuses")
+
+ assert json_response(conn, 200) |> length() == 3
+ end
+
+ test "renders user's statuses with a limit", %{conn: conn, user: user} do
+ conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}/statuses?page_size=2")
+
+ assert json_response(conn, 200) |> length() == 2
+ end
+ end
end
# Needed for testing