Browse Source

AdminAPI: Add `PATCH /api/pleroma/admin/users/approve` endpoint

chore/update-floki-find-usage
Alex Gleason 4 years ago
parent
commit
20d24741af
No known key found for this signature in database GPG Key ID: 7211D1F99744FBB7
7 changed files with 104 additions and 0 deletions
  1. +18
    -0
      docs/API/admin_api.md
  2. +11
    -0
      lib/pleroma/moderation_log.ex
  3. +13
    -0
      lib/pleroma/user.ex
  4. +16
    -0
      lib/pleroma/web/admin_api/controllers/admin_api_controller.ex
  5. +1
    -0
      lib/pleroma/web/router.ex
  6. +25
    -0
      test/user_test.exs
  7. +20
    -0
      test/web/admin_api/controllers/admin_api_controller_test.exs

+ 18
- 0
docs/API/admin_api.md View File

@@ -246,6 +246,24 @@ Note: Available `:permission_group` is currently moderator and admin. 404 is ret
}
```

## `PATCH /api/pleroma/admin/users/approve`

### Approve user

- Params:
- `nicknames`: nicknames array
- Response:

```json
{
users: [
{
// user object
}
]
}
```

## `GET /api/pleroma/admin/users/:nickname_or_id`

### Retrive the details of a user


+ 11
- 0
lib/pleroma/moderation_log.ex View File

@@ -413,6 +413,17 @@ defmodule Pleroma.ModerationLog do
def get_log_entry_message(%ModerationLog{
data: %{
"actor" => %{"nickname" => actor_nickname},
"action" => "approve",
"subject" => users
}
}) do
"@#{actor_nickname} approved users: #{users_to_nicknames_string(users)}"
end

@spec get_log_entry_message(ModerationLog) :: String.t()
def get_log_entry_message(%ModerationLog{
data: %{
"actor" => %{"nickname" => actor_nickname},
"nicknames" => nicknames,
"tags" => tags,
"action" => "tag"


+ 13
- 0
lib/pleroma/user.ex View File

@@ -1471,6 +1471,19 @@ defmodule Pleroma.User do
end
end

def approve(users) when is_list(users) do
Repo.transaction(fn ->
Enum.map(users, fn user ->
with {:ok, user} <- approve(user), do: user
end)
end)
end

def approve(%User{} = user) do
change(user, approval_pending: false)
|> update_and_set_cache()
end

def update_notification_settings(%User{} = user, settings) do
user
|> cast(%{notification_settings: settings}, [])


+ 16
- 0
lib/pleroma/web/admin_api/controllers/admin_api_controller.ex View File

@@ -44,6 +44,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
:user_toggle_activation,
:user_activate,
:user_deactivate,
:user_approve,
:tag_users,
:untag_users,
:right_add,
@@ -303,6 +304,21 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
|> render("index.json", %{users: Keyword.values(updated_users)})
end

def user_approve(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do
users = Enum.map(nicknames, &User.get_cached_by_nickname/1)
{:ok, updated_users} = User.approve(users)

ModerationLog.insert_log(%{
actor: admin,
subject: users,
action: "approve"
})

conn
|> put_view(AccountView)
|> render("index.json", %{users: updated_users})
end

def tag_users(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames, "tags" => tags}) do
with {:ok, _} <- User.tag(nicknames, tags) do
ModerationLog.insert_log(%{


+ 1
- 0
lib/pleroma/web/router.ex View File

@@ -138,6 +138,7 @@ defmodule Pleroma.Web.Router do
patch("/users/:nickname/toggle_activation", AdminAPIController, :user_toggle_activation)
patch("/users/activate", AdminAPIController, :user_activate)
patch("/users/deactivate", AdminAPIController, :user_deactivate)
patch("/users/approve", AdminAPIController, :user_approve)
put("/users/tag", AdminAPIController, :tag_users)
delete("/users/tag", AdminAPIController, :untag_users)



+ 25
- 0
test/user_test.exs View File

@@ -1202,6 +1202,31 @@ defmodule Pleroma.UserTest do
end
end

describe "approve" do
test "approves a user" do
user = insert(:user, approval_pending: true)
assert true == user.approval_pending
{:ok, user} = User.approve(user)
assert false == user.approval_pending
end

test "approves a list of users" do
unapproved_users = [
insert(:user, approval_pending: true),
insert(:user, approval_pending: true),
insert(:user, approval_pending: true)
]

{:ok, users} = User.approve(unapproved_users)

assert Enum.count(users) == 3

Enum.each(users, fn user ->
assert false == user.approval_pending
end)
end
end

describe "delete" do
setup do
{:ok, user} = insert(:user) |> User.set_cache()


+ 20
- 0
test/web/admin_api/controllers/admin_api_controller_test.exs View File

@@ -1257,6 +1257,26 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
"@#{admin.nickname} deactivated users: @#{user_one.nickname}, @#{user_two.nickname}"
end

test "PATCH /api/pleroma/admin/users/approve", %{admin: admin, conn: conn} do
user_one = insert(:user, approval_pending: true)
user_two = insert(:user, approval_pending: true)

conn =
patch(
conn,
"/api/pleroma/admin/users/approve",
%{nicknames: [user_one.nickname, user_two.nickname]}
)

response = json_response(conn, 200)
assert Enum.map(response["users"], & &1["approval_pending"]) == [false, false]

log_entry = Repo.one(ModerationLog)

assert ModerationLog.get_log_entry_message(log_entry) ==
"@#{admin.nickname} approved users: @#{user_one.nickname}, @#{user_two.nickname}"
end

test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation", %{admin: admin, conn: conn} do
user = insert(:user)



Loading…
Cancel
Save