summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml37
-rw-r--r--docs/api/admin_api.md11
-rw-r--r--lib/pleroma/web/admin_api/admin_api_controller.ex15
-rw-r--r--lib/pleroma/web/router.ex1
-rw-r--r--priv/repo/migrations/20190325215156_update_status_reply_count.exs48
-rw-r--r--test/web/admin_api/admin_api_controller_test.exs35
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})