diff options
-rw-r--r-- | .gitlab-ci.yml | 37 | ||||
-rw-r--r-- | docs/api/admin_api.md | 11 | ||||
-rw-r--r-- | lib/pleroma/web/admin_api/admin_api_controller.ex | 15 | ||||
-rw-r--r-- | lib/pleroma/web/router.ex | 1 | ||||
-rw-r--r-- | priv/repo/migrations/20190325215156_update_status_reply_count.exs | 48 | ||||
-rw-r--r-- | test/web/admin_api/admin_api_controller_test.exs | 35 |
6 files changed, 99 insertions, 48 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d5f2a762a..dbdf59f65 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,6 +20,8 @@ stages: - lint - test - analysis + - docs_build + - docs_deploy before_script: - mix local.hex --force @@ -43,3 +45,38 @@ analysis: stage: analysis script: - mix credo --strict --only=warnings,todo,fixme,consistency,readability + +docs_build: + stage: docs_build + services: + only: + - master@pleroma/pleroma + - develop@pleroma/pleroma + variables: + MIX_ENV: dev + before_script: + - mix local.hex --force + - mix local.rebar --force + - mix deps.get + - mix compile + script: + - mix docs + artifacts: + paths: + - priv/static/doc + +docs_deploy: + stage: docs_deploy + image: alpine:3.9 + services: + only: + - master@pleroma/pleroma + - develop@pleroma/pleroma + before_script: + - apk update && apk add openssh-client rsync + script: + - mkdir -p ~/.ssh + - echo "${SSH_HOST_KEY}" > ~/.ssh/known_hosts + - eval $(ssh-agent -s) + - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - + - rsync -hrvz --delete -e "ssh -p ${SSH_PORT}" priv/static/doc/ "${SSH_USER_HOST_LOCATION}/${CI_COMMIT_REF_NAME}" diff --git a/docs/api/admin_api.md b/docs/api/admin_api.md index 84adca6ff..53b68ffd4 100644 --- a/docs/api/admin_api.md +++ b/docs/api/admin_api.md @@ -149,6 +149,17 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret - `nickname` - `status` BOOLEAN field, false value means deactivation. +## `/api/pleroma/admin/users/:nickname` + +### Retrive the details of a user + +- Method: `GET` +- Params: + - `nickname` +- Response: + - On failure: `Not found` + - On success: JSON of the user + ## `/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 3fa9c6909..b3a09e49e 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -45,6 +45,15 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do |> json(user.nickname) end + def user_show(conn, %{"nickname" => nickname}) do + with %User{} = user <- User.get_by_nickname(nickname) do + conn + |> json(AccountView.render("show.json", %{user: user})) + else + _ -> {:error, :not_found} + end + end + def user_toggle_activation(conn, %{"nickname" => nickname}) do user = User.get_by_nickname(nickname) @@ -231,6 +240,12 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do |> json(token.token) end + def errors(conn, {:error, :not_found}) do + conn + |> put_status(404) + |> json("Not found") + end + def errors(conn, {:param_cast, _}) do conn |> put_status(400) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 32e5f7644..9ccb4e535 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -140,6 +140,7 @@ defmodule Pleroma.Web.Router do pipe_through([:admin_api, :oauth_write]) get("/users", AdminAPIController, :list_users) + get("/users/:nickname", AdminAPIController, :user_show) delete("/user", AdminAPIController, :user_delete) patch("/users/:nickname/toggle_activation", AdminAPIController, :user_toggle_activation) post("/user", AdminAPIController, :user_create) diff --git a/priv/repo/migrations/20190325215156_update_status_reply_count.exs b/priv/repo/migrations/20190325215156_update_status_reply_count.exs deleted file mode 100644 index 50f1fe10b..000000000 --- a/priv/repo/migrations/20190325215156_update_status_reply_count.exs +++ /dev/null @@ -1,48 +0,0 @@ -defmodule Pleroma.Repo.Migrations.UpdateStatusReplyCount do - use Ecto.Migration - - @public "https://www.w3.org/ns/activitystreams#Public" - - def up do - execute(""" - WITH reply_count AS ( - SELECT count(*) AS count, data->>'inReplyTo' AS ap_id - FROM objects - WHERE - data->>'inReplyTo' IS NOT NULL AND - data->>'type' = 'Note' AND ( - data->'cc' ? '#{@public}' OR - data->'to' ? '#{@public}') - GROUP BY data->>'inReplyTo' - ) - UPDATE objects AS o - SET "data" = jsonb_set(o.data, '{repliesCount}', reply_count.count::varchar::jsonb, true) - FROM reply_count - WHERE reply_count.ap_id = o.data->>'id'; - """) - - execute(""" - WITH reply_count AS (SELECT - count(*) as count, - data->'object'->>'inReplyTo' AS ap_id - FROM - activities - WHERE - data->'object'->>'inReplyTo' IS NOT NULL AND - data->'object'->>'type' = 'Note' AND ( - data->'object'->'cc' ? '#{@public}' OR - data->'object'->'to' ? '#{@public}') - GROUP BY - data->'object'->>'inReplyTo' - ) - UPDATE activities AS a - SET "data" = jsonb_set(a.data, '{object, repliesCount}', reply_count.count::varchar::jsonb, true) - FROM reply_count - WHERE reply_count.ap_id = a.data->'object'->>'id'; - """) - end - - def down do - :noop - end -end diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 7da237eca..2f53416a3 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -40,6 +40,41 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do end end + describe "/api/pleroma/admin/users/:nickname" do + test "Show", %{conn: conn} do + admin = insert(:user, info: %{is_admin: true}) + user = insert(:user) + + conn = + conn + |> assign(:user, admin) + |> get("/api/pleroma/admin/users/#{user.nickname}") + + expected = %{ + "deactivated" => false, + "id" => to_string(user.id), + "local" => true, + "nickname" => user.nickname, + "roles" => %{"admin" => false, "moderator" => false}, + "tags" => [] + } + + assert expected == json_response(conn, 200) + end + + test "when the user doesn't exist", %{conn: conn} do + admin = insert(:user, info: %{is_admin: true}) + user = build(:user) + + conn = + conn + |> assign(:user, admin) + |> get("/api/pleroma/admin/users/#{user.nickname}") + + assert "Not found" == json_response(conn, 404) + end + end + describe "PUT /api/pleroma/admin/users/tag" do setup do admin = insert(:user, info: %{is_admin: true}) |