forked from NYANDEV/forgejo
[GITEA] enable system users search via the API
Refs: https://codeberg.org/forgejo/forgejo/issues/1403
(cherry picked from commit 87bd40411e3af7eefce55e2a05475a8b366caa6f)
Conflicts:
routers/api/v1/user/user.go
https://codeberg.org/forgejo/forgejo/pulls/1469
(cherry picked from commit 74f70ca873fa516e19eeb379dccd0f1fc8fba73b)
(cherry picked from commit 673a75bb43fb2808e49df9cd1dc51c075ed1463c)
(cherry picked from commit fcd4535ac66609d6e76079af4f97300d31554bee)
(cherry picked from commit 56b229f22e55f6e2f6cca8e596cc6d749026eceb)
(cherry picked from commit 45b922ae76ef27c368afdb2fe2003f27f65cb470)
Conflicts:
models/user/user_system.go
https://codeberg.org/forgejo/forgejo/pulls/1665
(cherry picked from commit 9b643dec3e296b0bacbf5eda81083fabf917ecc1)
(cherry picked from commit 503e3f72587cc84c4331f997784818630fd64531)
(cherry picked from commit f027169f22
)
This commit is contained in:
parent
9b7bbae8c4
commit
dd4d17c159
2 changed files with 48 additions and 12 deletions
|
@ -54,19 +54,33 @@ func Search(ctx *context.APIContext) {
|
||||||
|
|
||||||
listOptions := utils.GetListOptions(ctx)
|
listOptions := utils.GetListOptions(ctx)
|
||||||
|
|
||||||
users, maxResults, err := user_model.SearchUsers(ctx, &user_model.SearchUserOptions{
|
uid := ctx.FormInt64("uid")
|
||||||
Actor: ctx.Doer,
|
var users []*user_model.User
|
||||||
Keyword: ctx.FormTrim("q"),
|
var maxResults int64
|
||||||
UID: ctx.FormInt64("uid"),
|
var err error
|
||||||
Type: user_model.UserTypeIndividual,
|
|
||||||
ListOptions: listOptions,
|
switch uid {
|
||||||
})
|
case user_model.GhostUserID:
|
||||||
if err != nil {
|
maxResults = 1
|
||||||
ctx.JSON(http.StatusInternalServerError, map[string]any{
|
users = []*user_model.User{user_model.NewGhostUser()}
|
||||||
"ok": false,
|
case user_model.ActionsUserID:
|
||||||
"error": err.Error(),
|
maxResults = 1
|
||||||
|
users = []*user_model.User{user_model.NewActionsUser()}
|
||||||
|
default:
|
||||||
|
users, maxResults, err = user_model.SearchUsers(ctx, &user_model.SearchUserOptions{
|
||||||
|
Actor: ctx.Doer,
|
||||||
|
Keyword: ctx.FormTrim("q"),
|
||||||
|
UID: uid,
|
||||||
|
Type: user_model.UserTypeIndividual,
|
||||||
|
ListOptions: listOptions,
|
||||||
})
|
})
|
||||||
return
|
if err != nil {
|
||||||
|
ctx.JSON(http.StatusInternalServerError, map[string]any{
|
||||||
|
"ok": false,
|
||||||
|
"error": err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
|
ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
|
||||||
|
|
|
@ -56,6 +56,28 @@ func TestAPIUserSearchNotLoggedIn(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAPIUserSearchSystemUsers(t *testing.T) {
|
||||||
|
defer tests.PrepareTestEnv(t)()
|
||||||
|
for _, systemUser := range []*user_model.User{
|
||||||
|
user_model.NewGhostUser(),
|
||||||
|
user_model.NewActionsUser(),
|
||||||
|
} {
|
||||||
|
t.Run(systemUser.Name, func(t *testing.T) {
|
||||||
|
req := NewRequestf(t, "GET", "/api/v1/users/search?uid=%d", systemUser.ID)
|
||||||
|
resp := MakeRequest(t, req, http.StatusOK)
|
||||||
|
|
||||||
|
var results SearchResults
|
||||||
|
DecodeJSON(t, resp, &results)
|
||||||
|
assert.NotEmpty(t, results.Data)
|
||||||
|
if assert.EqualValues(t, 1, len(results.Data)) {
|
||||||
|
user := results.Data[0]
|
||||||
|
assert.EqualValues(t, user.UserName, systemUser.Name)
|
||||||
|
assert.EqualValues(t, user.ID, systemUser.ID)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestAPIUserSearchAdminLoggedInUserHidden(t *testing.T) {
|
func TestAPIUserSearchAdminLoggedInUserHidden(t *testing.T) {
|
||||||
defer tests.PrepareTestEnv(t)()
|
defer tests.PrepareTestEnv(t)()
|
||||||
adminUsername := "user1"
|
adminUsername := "user1"
|
||||||
|
|
Loading…
Reference in a new issue