Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pleroma
pleroma
Commits
0fe715f3
Commit
0fe715f3
authored
Mar 06, 2019
by
kaniini
Browse files
Merge branch 'chore/merge-search-into-list-users' into 'develop'
Merge search endpoint into /users See merge request
!898
parents
39b766cc
76160122
Pipeline
#8652
passed with stages
in 3 minutes and 17 seconds
Changes
5
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
docs/Admin-API.md
View file @
0fe715f3
...
...
@@ -7,36 +7,11 @@ Authentication is required and the user must be an admin.
### List users
-
Method
`GET`
-
Params:
-
`page`
:
**integer**
page number
-
`page_size`
:
**integer**
number of users per page (default is
`50`
)
-
Response:
```
JSON
{
"page_size": integer,
"count": integer,
"users": [
{
"deactivated": bool,
"id": integer,
"nickname": string
},
...
]
}
```
## `/api/pleroma/admin/users/search?query={query}&local={local}&page={page}&page_size={page_size}`
### Search users by name or nickname
-
Method
`GET`
-
Params:
-
`query`
:
**string**
search term
-
`local`
:
**bool**
whether to return only local users
-
`page`
:
**integer**
page number
-
`page_size`
:
**integer**
number of users per page (default is
`50`
)
-
Query Params:
-
`query`
:
**string**
*optional*
search term
-
`local_only`
:
**bool**
*optional*
whether to return only local users
-
`page`
:
**integer**
*optional*
page number
-
`page_size`
:
**integer**
*optional*
number of users per page (default is
`50`
)
-
Response:
```
JSON
...
...
lib/pleroma/user.ex
View file @
0fe715f3
...
...
@@ -749,13 +749,41 @@ def get_recipients_from_activity(%Activity{recipients: to}) 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 @@ def search_for_admin(term, %{admin: admin, local: local, page: page, page_size:
{
: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
,
"@"
)
...
...
lib/pleroma/web/admin_api/admin_api_controller.ex
View file @
0fe715f3
...
...
@@ -63,28 +63,14 @@ def untag_users(conn, %{"nicknames" => nicknames, "tags" => tags}) 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
(%{
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
}),
...
...
lib/pleroma/web/router.ex
View file @
0fe715f3
...
...
@@ -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
)
...
...
test/web/admin_api/admin_api_controller_test.exs
View file @
0fe715f3
...
...
@@ -374,26 +374,7 @@ test "renders empty array for the second page" 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 @@ test "regular search" 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 @@ test "regular search with page size" 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 @@ test "regular search with page size" 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 @@ test "only local users" 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 @@ test "only local users" 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
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment