@@ -749,13 +749,41 @@ defmodule Pleroma.User do | |||
Repo.all(query) | |||
end | |||
@spec search_for_admin(binary(), %{ | |||
@spec search_for_admin(%{ | |||
local: boolean(), | |||
page: number(), | |||
page_size: number() | |||
}) :: {:ok, [Pleroma.User.t()], number()} | |||
def search_for_admin(%{query: nil, local: local, page: page, page_size: page_size}) do | |||
query = | |||
from(u in User, order_by: u.id) | |||
|> maybe_local_user_query(local) | |||
paginated_query = | |||
query | |||
|> paginate(page, page_size) | |||
count = | |||
query | |||
|> Repo.aggregate(:count, :id) | |||
{:ok, Repo.all(paginated_query), count} | |||
end | |||
@spec search_for_admin(%{ | |||
query: binary(), | |||
admin: Pleroma.User.t(), | |||
local: boolean(), | |||
page: number(), | |||
page_size: number() | |||
}) :: {:ok, [Pleroma.User.t()], number()} | |||
def search_for_admin(term, %{admin: admin, local: local, page: page, page_size: page_size}) do | |||
def search_for_admin(%{ | |||
query: term, | |||
admin: admin, | |||
local: local, | |||
page: page, | |||
page_size: page_size | |||
}) do | |||
term = String.trim_leading(term, "@") | |||
local_paginated_query = | |||
@@ -774,21 +802,6 @@ defmodule Pleroma.User do | |||
{:ok, do_search(search_query, admin), count} | |||
end | |||
@spec all_for_admin(number(), number()) :: {:ok, [Pleroma.User.t()], number()} | |||
def all_for_admin(page, page_size) do | |||
query = from(u in User, order_by: u.id) | |||
paginated_query = | |||
query | |||
|> paginate(page, page_size) | |||
count = | |||
query | |||
|> Repo.aggregate(:count, :id) | |||
{:ok, Repo.all(paginated_query), count} | |||
end | |||
def search(query, resolve \\ false, for_user \\ nil) do | |||
# Strip the beginning @ off if there is a query | |||
query = String.trim_leading(query, "@") | |||
@@ -63,28 +63,29 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do | |||
do: json_response(conn, :no_content, "") | |||
end | |||
def list_users(conn, params) do | |||
{page, page_size} = page_params(params) | |||
with {:ok, users, count} <- User.all_for_admin(page, page_size), | |||
do: | |||
conn | |||
|> json( | |||
AccountView.render("index.json", | |||
users: users, | |||
count: count, | |||
page_size: page_size | |||
) | |||
) | |||
end | |||
def search_users(%{assigns: %{user: admin}} = conn, %{"query" => query} = params) do | |||
# def list_users(conn, params) do | |||
# {page, page_size} = page_params(params) | |||
# with {:ok, users, count} <- User.all_for_admin(page, page_size), | |||
# do: | |||
# conn | |||
# |> json( | |||
# AccountView.render("index.json", | |||
# users: users, | |||
# count: count, | |||
# page_size: page_size | |||
# ) | |||
# ) | |||
# end | |||
def list_users(%{assigns: %{user: admin}} = conn, params) do | |||
{page, page_size} = page_params(params) | |||
with {:ok, users, count} <- | |||
User.search_for_admin(query, %{ | |||
User.search_for_admin(%{ | |||
query: params["query"], | |||
admin: admin, | |||
local: params["local"] == "true", | |||
local: params["local_only"] == "true", | |||
page: page, | |||
page_size: page_size | |||
}), | |||
@@ -140,7 +140,6 @@ defmodule Pleroma.Web.Router do | |||
pipe_through([:admin_api, :oauth_write]) | |||
get("/users", AdminAPIController, :list_users) | |||
get("/users/search", AdminAPIController, :search_users) | |||
delete("/user", AdminAPIController, :user_delete) | |||
patch("/users/:nickname/toggle_activation", AdminAPIController, :user_toggle_activation) | |||
post("/user", AdminAPIController, :user_create) | |||
@@ -374,26 +374,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
"users" => [] | |||
} | |||
end | |||
end | |||
test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation" do | |||
admin = insert(:user, info: %{is_admin: true}) | |||
user = insert(:user) | |||
conn = | |||
build_conn() | |||
|> assign(:user, admin) | |||
|> patch("/api/pleroma/admin/users/#{user.nickname}/toggle_activation") | |||
assert json_response(conn, 200) == | |||
%{ | |||
"deactivated" => !user.info.deactivated, | |||
"id" => user.id, | |||
"nickname" => user.nickname | |||
} | |||
end | |||
describe "GET /api/pleroma/admin/users/search" do | |||
test "regular search" do | |||
admin = insert(:user, info: %{is_admin: true}) | |||
user = insert(:user, nickname: "bob") | |||
@@ -401,7 +382,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
conn = | |||
build_conn() | |||
|> assign(:user, admin) | |||
|> get("/api/pleroma/admin/users/search?query=bo") | |||
|> get("/api/pleroma/admin/users?query=bo") | |||
assert json_response(conn, 200) == %{ | |||
"count" => 1, | |||
@@ -424,7 +405,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
conn = | |||
build_conn() | |||
|> assign(:user, admin) | |||
|> get("/api/pleroma/admin/users/search?query=bo&page_size=1&page=1") | |||
|> get("/api/pleroma/admin/users?query=bo&page_size=1&page=1") | |||
assert json_response(conn, 200) == %{ | |||
"count" => 2, | |||
@@ -441,7 +422,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
conn = | |||
build_conn() | |||
|> assign(:user, admin) | |||
|> get("/api/pleroma/admin/users/search?query=bo&page_size=1&page=2") | |||
|> get("/api/pleroma/admin/users?query=bo&page_size=1&page=2") | |||
assert json_response(conn, 200) == %{ | |||
"count" => 2, | |||
@@ -465,7 +446,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
conn = | |||
build_conn() | |||
|> assign(:user, admin) | |||
|> get("/api/pleroma/admin/users/search?query=bo&local=true") | |||
|> get("/api/pleroma/admin/users?query=bo&local_only=true") | |||
assert json_response(conn, 200) == %{ | |||
"count" => 1, | |||
@@ -479,5 +460,51 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do | |||
] | |||
} | |||
end | |||
test "only local users with no query" do | |||
admin = insert(:user, info: %{is_admin: true}, nickname: "john") | |||
user = insert(:user, nickname: "bob") | |||
insert(:user, nickname: "bobb", local: false) | |||
conn = | |||
build_conn() | |||
|> assign(:user, admin) | |||
|> get("/api/pleroma/admin/users?local_only=true") | |||
assert json_response(conn, 200) == %{ | |||
"count" => 2, | |||
"page_size" => 50, | |||
"users" => [ | |||
%{ | |||
"deactivated" => admin.info.deactivated, | |||
"id" => admin.id, | |||
"nickname" => admin.nickname | |||
}, | |||
%{ | |||
"deactivated" => user.info.deactivated, | |||
"id" => user.id, | |||
"nickname" => user.nickname | |||
} | |||
] | |||
} | |||
end | |||
end | |||
test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation" do | |||
admin = insert(:user, info: %{is_admin: true}) | |||
user = insert(:user) | |||
conn = | |||
build_conn() | |||
|> assign(:user, admin) | |||
|> patch("/api/pleroma/admin/users/#{user.nickname}/toggle_activation") | |||
assert json_response(conn, 200) == | |||
%{ | |||
"deactivated" => !user.info.deactivated, | |||
"id" => user.id, | |||
"nickname" => user.nickname | |||
} | |||
end | |||
end |