aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMaxim Filippov <colixer@gmail.com>2019-02-28 19:04:47 +0300
committerMaxim Filippov <colixer@gmail.com>2019-02-28 19:04:47 +0300
commit46f29b9da1cfdcc2ab14616f999f061fa0c87ddc (patch)
tree2c403e26bf374800431cc3c8e51b091539445ca2 /lib
parent70e82a3465ee10004d0ae347934524e779bd778a (diff)
downloadpleroma-46f29b9da1cfdcc2ab14616f999f061fa0c87ddc.tar.gz
Add search users endpoint
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/user.ex8
-rw-r--r--lib/pleroma/web/admin_api/admin_api_controller.ex13
-rw-r--r--lib/pleroma/web/router.ex1
3 files changed, 18 insertions, 4 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 80e4ae296..52df171c5 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -755,18 +755,18 @@ defmodule Pleroma.User do
Repo.all(query)
end
- def search(query, resolve \\ false, for_user \\ nil) do
+ def search(query, resolve \\ false, for_user \\ nil, limit \\ 20) do
# Strip the beginning @ off if there is a query
query = String.trim_leading(query, "@")
if resolve, do: get_or_fetch(query)
- fts_results = do_search(fts_search_subquery(query), for_user)
+ fts_results = do_search(fts_search_subquery(query), for_user, %{limit: limit})
{:ok, trigram_results} =
Repo.transaction(fn ->
Ecto.Adapters.SQL.query(Repo, "select set_limit(0.25)", [])
- do_search(trigram_search_subquery(query), for_user)
+ do_search(trigram_search_subquery(query), for_user, %{limit: limit})
end)
Enum.uniq_by(fts_results ++ trigram_results, & &1.id)
@@ -793,7 +793,7 @@ defmodule Pleroma.User do
Repo.aggregate(query, :count, :id)
end
- defp do_search(subquery, for_user, options \\ []) do
+ defp do_search(subquery, for_user, options) do
q =
from(
s in subquery(subquery),
diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex
index d8e3d57e1..37159cd40 100644
--- a/lib/pleroma/web/admin_api/admin_api_controller.ex
+++ b/lib/pleroma/web/admin_api/admin_api_controller.ex
@@ -78,6 +78,19 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
)
end
+ def search_users(%{assigns: %{user: admin}} = conn, %{"query" => query}) do
+ users = User.search(query, true, admin, @users_page_size)
+
+ conn
+ |> json(
+ AccountView.render("index.json", %{
+ users: users,
+ count: length(users),
+ page_size: @users_page_size
+ })
+ )
+ end
+
def right_add(conn, %{"permission_group" => permission_group, "nickname" => nickname})
when permission_group in ["moderator", "admin"] do
user = User.get_by_nickname(nickname)
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index 3b1fd46a5..6fcb46878 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/search", AdminAPIController, :search_users)
delete("/user", AdminAPIController, :user_delete)
patch("/users/:nickname/toggle_activation", AdminAPIController, :user_toggle_activation)
post("/user", AdminAPIController, :user_create)