From 6f9cc617fcc42477dec5ccab83d06f0a96544403 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 15 Mar 2023 19:53:01 +0800 Subject: [PATCH] Add login name and source id for admin user searching API (#23376) As title. --------- Co-authored-by: techknowlogick --- models/user/search.go | 9 +++++++++ routers/api/v1/admin/user.go | 21 ++++++++++++++++----- routers/api/v1/api.go | 2 +- templates/swagger/v1_json.tmpl | 17 +++++++++++++++-- 4 files changed, 41 insertions(+), 8 deletions(-) diff --git a/models/user/search.go b/models/user/search.go index 622e47ccff..bf35fcd9eb 100644 --- a/models/user/search.go +++ b/models/user/search.go @@ -22,6 +22,8 @@ type SearchUserOptions struct { Keyword string Type UserType UID int64 + LoginName string // this option should be used only for admin user + SourceID int64 // this option should be used only for admin user OrderBy db.SearchOrderBy Visible []structs.VisibleType Actor *User // The user doing the search @@ -62,6 +64,13 @@ func (opts *SearchUserOptions) toSearchQueryBase() *xorm.Session { cond = cond.And(builder.Eq{"id": opts.UID}) } + if opts.SourceID > 0 { + cond = cond.And(builder.Eq{"login_source": opts.SourceID}) + } + if opts.LoginName != "" { + cond = cond.And(builder.Eq{"login_name": opts.LoginName}) + } + if !opts.IsActive.IsNone() { cond = cond.And(builder.Eq{"is_active": opts.IsActive.IsTrue()}) } diff --git a/routers/api/v1/admin/user.go b/routers/api/v1/admin/user.go index 369d13943a..8649a982b0 100644 --- a/routers/api/v1/admin/user.go +++ b/routers/api/v1/admin/user.go @@ -417,14 +417,23 @@ func DeleteUserPublicKey(ctx *context.APIContext) { ctx.Status(http.StatusNoContent) } -// GetAllUsers API for getting information of all the users -func GetAllUsers(ctx *context.APIContext) { - // swagger:operation GET /admin/users admin adminGetAllUsers +// SearchUsers API for getting information of the users according the filter conditions +func SearchUsers(ctx *context.APIContext) { + // swagger:operation GET /admin/users admin adminSearchUsers // --- - // summary: List all users + // summary: Search users according filter conditions // produces: // - application/json // parameters: + // - name: source_id + // in: query + // description: ID of the user's login source to search for + // type: integer + // format: int64 + // - name: login_name + // in: query + // description: user's login name to search for + // type: string // - name: page // in: query // description: page number of results to return (1-based) @@ -444,11 +453,13 @@ func GetAllUsers(ctx *context.APIContext) { users, maxResults, err := user_model.SearchUsers(&user_model.SearchUserOptions{ Actor: ctx.Doer, Type: user_model.UserTypeIndividual, + LoginName: ctx.FormTrim("login_name"), + SourceID: ctx.FormInt64("source_id"), OrderBy: db.SearchOrderByAlphabetically, ListOptions: listOptions, }) if err != nil { - ctx.Error(http.StatusInternalServerError, "GetAllUsers", err) + ctx.Error(http.StatusInternalServerError, "SearchUsers", err) return } diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 5c32164fa7..c3a875e737 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -1245,7 +1245,7 @@ func Routes(ctx gocontext.Context) *web.Route { }) m.Get("/orgs", admin.GetAllOrgs) m.Group("/users", func() { - m.Get("", admin.GetAllUsers) + m.Get("", admin.SearchUsers) m.Post("", bind(api.CreateUserOption{}), admin.CreateUser) m.Group("/{username}", func() { m.Combo("").Patch(bind(api.EditUserOption{}), admin.EditUser). diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index 9c89b21fca..9e35724315 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -488,9 +488,22 @@ "tags": [ "admin" ], - "summary": "List all users", - "operationId": "adminGetAllUsers", + "summary": "Search users according filter conditions", + "operationId": "adminSearchUsers", "parameters": [ + { + "type": "integer", + "format": "int64", + "description": "ID of the user's login source to search for", + "name": "source_id", + "in": "query" + }, + { + "type": "string", + "description": "user's login name to search for", + "name": "login_name", + "in": "query" + }, { "type": "integer", "description": "page number of results to return (1-based)",