* New API routes added * Comments added * Build fix * swagger_v1_json.tmpl without new line character * Typo fix * Code review changes * Code review changes * Add copyright * Add copyright * Add copyright * Update per @lafriks feedback * Update org.go * Update user.go * Update user.go * make fmttags/v1.21.12.1
| @@ -1,4 +1,5 @@ | |||||
| // Copyright 2014 The Gogs Authors. All rights reserved. | // Copyright 2014 The Gogs Authors. All rights reserved. | ||||
| // Copyright 2019 The Gitea Authors. All rights reserved. | |||||
| // Use of this source code is governed by a MIT-style | // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | // license that can be found in the LICENSE file. | ||||
| @@ -1358,7 +1359,7 @@ func SearchUsers(opts *SearchUserOptions) (users []*User, _ int64, _ error) { | |||||
| return nil, 0, fmt.Errorf("Count: %v", err) | return nil, 0, fmt.Errorf("Count: %v", err) | ||||
| } | } | ||||
| if opts.PageSize <= 0 || opts.PageSize > setting.UI.ExplorePagingNum { | |||||
| if opts.PageSize == 0 || opts.PageSize > setting.UI.ExplorePagingNum { | |||||
| opts.PageSize = setting.UI.ExplorePagingNum | opts.PageSize = setting.UI.ExplorePagingNum | ||||
| } | } | ||||
| if opts.Page <= 0 { | if opts.Page <= 0 { | ||||
| @@ -1368,11 +1369,13 @@ func SearchUsers(opts *SearchUserOptions) (users []*User, _ int64, _ error) { | |||||
| opts.OrderBy = SearchOrderByAlphabetically | opts.OrderBy = SearchOrderByAlphabetically | ||||
| } | } | ||||
| sess := x.Where(cond) | |||||
| if opts.PageSize > 0 { | |||||
| sess = sess.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize) | |||||
| } | |||||
| users = make([]*User, 0, opts.PageSize) | users = make([]*User, 0, opts.PageSize) | ||||
| return users, count, x.Where(cond). | |||||
| Limit(opts.PageSize, (opts.Page-1)*opts.PageSize). | |||||
| OrderBy(opts.OrderBy.String()). | |||||
| Find(&users) | |||||
| return users, count, sess.OrderBy(opts.OrderBy.String()).Find(&users) | |||||
| } | } | ||||
| // GetStarredRepos returns the repos starred by a particular user | // GetStarredRepos returns the repos starred by a particular user | ||||
| @@ -1,4 +1,5 @@ | |||||
| // Copyright 2015 The Gogs Authors. All rights reserved. | // Copyright 2015 The Gogs Authors. All rights reserved. | ||||
| // Copyright 2019 The Gitea Authors. All rights reserved. | |||||
| // Use of this source code is governed by a MIT-style | // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | // license that can be found in the LICENSE file. | ||||
| @@ -66,3 +67,31 @@ func CreateOrg(ctx *context.APIContext, form api.CreateOrgOption) { | |||||
| ctx.JSON(201, convert.ToOrganization(org)) | ctx.JSON(201, convert.ToOrganization(org)) | ||||
| } | } | ||||
| //GetAllOrgs API for getting information of all the organizations | |||||
| func GetAllOrgs(ctx *context.APIContext) { | |||||
| // swagger:operation GET /admin/orgs admin adminGetAllOrgs | |||||
| // --- | |||||
| // summary: List all organizations | |||||
| // produces: | |||||
| // - application/json | |||||
| // responses: | |||||
| // "200": | |||||
| // "$ref": "#/responses/OrganizationList" | |||||
| // "403": | |||||
| // "$ref": "#/responses/forbidden" | |||||
| users, _, err := models.SearchUsers(&models.SearchUserOptions{ | |||||
| Type: models.UserTypeOrganization, | |||||
| OrderBy: models.SearchOrderByAlphabetically, | |||||
| PageSize: -1, | |||||
| }) | |||||
| if err != nil { | |||||
| ctx.Error(500, "SearchOrganizations", err) | |||||
| return | |||||
| } | |||||
| orgs := make([]*api.Organization, len(users)) | |||||
| for i := range users { | |||||
| orgs[i] = convert.ToOrganization(users[i]) | |||||
| } | |||||
| ctx.JSON(200, &orgs) | |||||
| } | |||||
| @@ -1,4 +1,5 @@ | |||||
| // Copyright 2015 The Gogs Authors. All rights reserved. | // Copyright 2015 The Gogs Authors. All rights reserved. | ||||
| // Copyright 2019 The Gitea Authors. All rights reserved. | |||||
| // Use of this source code is governed by a MIT-style | // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | // license that can be found in the LICENSE file. | ||||
| @@ -291,3 +292,27 @@ func DeleteUserPublicKey(ctx *context.APIContext) { | |||||
| ctx.Status(204) | ctx.Status(204) | ||||
| } | } | ||||
| //GetAllUsers API for getting information of all the users | |||||
| func GetAllUsers(ctx *context.APIContext) { | |||||
| // swagger:operation GET /admin/users admin adminGetAllUsers | |||||
| // --- | |||||
| // summary: List all users | |||||
| // produces: | |||||
| // - application/json | |||||
| // responses: | |||||
| // "200": | |||||
| // "$ref": "#/responses/UserList" | |||||
| // "403": | |||||
| // "$ref": "#/responses/forbidden" | |||||
| users, _, err := models.SearchUsers(&models.SearchUserOptions{ | |||||
| Type: models.UserTypeIndividual, | |||||
| OrderBy: models.SearchOrderByAlphabetically, | |||||
| PageSize: -1, | |||||
| }) | |||||
| if err != nil { | |||||
| ctx.Error(500, "SearchUsers", err) | |||||
| return | |||||
| } | |||||
| ctx.JSON(200, &users) | |||||
| } | |||||
| @@ -671,7 +671,9 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| }) | }) | ||||
| m.Group("/admin", func() { | m.Group("/admin", func() { | ||||
| m.Get("/orgs", admin.GetAllOrgs) | |||||
| m.Group("/users", func() { | m.Group("/users", func() { | ||||
| m.Get("", admin.GetAllUsers) | |||||
| m.Post("", bind(api.CreateUserOption{}), admin.CreateUser) | m.Post("", bind(api.CreateUserOption{}), admin.CreateUser) | ||||
| m.Group("/:username", func() { | m.Group("/:username", func() { | ||||
| m.Combo("").Patch(bind(api.EditUserOption{}), admin.EditUser). | m.Combo("").Patch(bind(api.EditUserOption{}), admin.EditUser). | ||||
| @@ -680,6 +682,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
| m.Post("", bind(api.CreateKeyOption{}), admin.CreatePublicKey) | m.Post("", bind(api.CreateKeyOption{}), admin.CreatePublicKey) | ||||
| m.Delete("/:id", admin.DeleteUserPublicKey) | m.Delete("/:id", admin.DeleteUserPublicKey) | ||||
| }) | }) | ||||
| m.Get("/orgs", org.ListUserOrgs) | |||||
| m.Post("/orgs", bind(api.CreateOrgOption{}), admin.CreateOrg) | m.Post("/orgs", bind(api.CreateOrgOption{}), admin.CreateOrg) | ||||
| m.Post("/repos", bind(api.CreateRepoOption{}), admin.CreateRepo) | m.Post("/repos", bind(api.CreateRepoOption{}), admin.CreateRepo) | ||||
| }) | }) | ||||
| @@ -23,7 +23,45 @@ | |||||
| }, | }, | ||||
| "basePath": "{{AppSubUrl}}/api/v1", | "basePath": "{{AppSubUrl}}/api/v1", | ||||
| "paths": { | "paths": { | ||||
| "/admin/orgs": { | |||||
| "get": { | |||||
| "produces": [ | |||||
| "application/json" | |||||
| ], | |||||
| "tags": [ | |||||
| "admin" | |||||
| ], | |||||
| "summary": "List all organizations", | |||||
| "operationId": "adminGetAllOrgs", | |||||
| "responses": { | |||||
| "200": { | |||||
| "$ref": "#/responses/OrganizationList" | |||||
| }, | |||||
| "403": { | |||||
| "$ref": "#/responses/forbidden" | |||||
| } | |||||
| } | |||||
| } | |||||
| }, | |||||
| "/admin/users": { | "/admin/users": { | ||||
| "get": { | |||||
| "produces": [ | |||||
| "application/json" | |||||
| ], | |||||
| "tags": [ | |||||
| "admin" | |||||
| ], | |||||
| "summary": "List all users", | |||||
| "operationId": "adminGetAllUsers", | |||||
| "responses": { | |||||
| "200": { | |||||
| "$ref": "#/responses/UserList" | |||||
| }, | |||||
| "403": { | |||||
| "$ref": "#/responses/forbidden" | |||||
| } | |||||
| } | |||||
| }, | |||||
| "post": { | "post": { | ||||
| "consumes": [ | "consumes": [ | ||||
| "application/json" | "application/json" | ||||