You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

286 lines
7.7 KiB

API add/generalize pagination (#9452) * paginate results * fixed deadlock * prevented breaking change * updated swagger * go fmt * fixed find topic * go mod tidy * go mod vendor with go1.13.5 * fixed repo find topics * fixed unit test * added Limit method to Engine struct; use engine variable when provided; fixed gitignore * use ItemsPerPage for default pagesize; fix GetWatchers, getOrgUsersByOrgID and GetStargazers; fix GetAllCommits headers; reverted some changed behaviors * set Page value on Home route * improved memory allocations * fixed response headers * removed logfiles * fixed import order * import order * improved swagger * added function to get models.ListOptions from context * removed pagesize diff on unit test * fixed imports * removed unnecessary struct field * fixed go fmt * scoped PR * code improvements * code improvements * go mod tidy * fixed import order * fixed commit statuses session * fixed files headers * fixed headers; added pagination for notifications * go mod tidy * go fmt * removed Private from user search options; added setting.UI.IssuePagingNum as default valeu on repo's issues list * Apply suggestions from code review Co-Authored-By: 6543 <6543@obermui.de> Co-Authored-By: zeripath <art27@cantab.net> * fixed build error * CI.restart() * fixed merge conflicts resolve * fixed conflicts resolve * improved FindTrackedTimesOptions.ToOptions() method * added backwards compatibility on ListReleases request; fixed issue tracked time ToSession * fixed build error; fixed swagger template * fixed swagger template * fixed ListReleases backwards compatibility * added page to user search route Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: zeripath <art27@cantab.net>
4 years ago
API add/generalize pagination (#9452) * paginate results * fixed deadlock * prevented breaking change * updated swagger * go fmt * fixed find topic * go mod tidy * go mod vendor with go1.13.5 * fixed repo find topics * fixed unit test * added Limit method to Engine struct; use engine variable when provided; fixed gitignore * use ItemsPerPage for default pagesize; fix GetWatchers, getOrgUsersByOrgID and GetStargazers; fix GetAllCommits headers; reverted some changed behaviors * set Page value on Home route * improved memory allocations * fixed response headers * removed logfiles * fixed import order * import order * improved swagger * added function to get models.ListOptions from context * removed pagesize diff on unit test * fixed imports * removed unnecessary struct field * fixed go fmt * scoped PR * code improvements * code improvements * go mod tidy * fixed import order * fixed commit statuses session * fixed files headers * fixed headers; added pagination for notifications * go mod tidy * go fmt * removed Private from user search options; added setting.UI.IssuePagingNum as default valeu on repo's issues list * Apply suggestions from code review Co-Authored-By: 6543 <6543@obermui.de> Co-Authored-By: zeripath <art27@cantab.net> * fixed build error * CI.restart() * fixed merge conflicts resolve * fixed conflicts resolve * improved FindTrackedTimesOptions.ToOptions() method * added backwards compatibility on ListReleases request; fixed issue tracked time ToSession * fixed build error; fixed swagger template * fixed swagger template * fixed ListReleases backwards compatibility * added page to user search route Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: zeripath <art27@cantab.net>
4 years ago
API add/generalize pagination (#9452) * paginate results * fixed deadlock * prevented breaking change * updated swagger * go fmt * fixed find topic * go mod tidy * go mod vendor with go1.13.5 * fixed repo find topics * fixed unit test * added Limit method to Engine struct; use engine variable when provided; fixed gitignore * use ItemsPerPage for default pagesize; fix GetWatchers, getOrgUsersByOrgID and GetStargazers; fix GetAllCommits headers; reverted some changed behaviors * set Page value on Home route * improved memory allocations * fixed response headers * removed logfiles * fixed import order * import order * improved swagger * added function to get models.ListOptions from context * removed pagesize diff on unit test * fixed imports * removed unnecessary struct field * fixed go fmt * scoped PR * code improvements * code improvements * go mod tidy * fixed import order * fixed commit statuses session * fixed files headers * fixed headers; added pagination for notifications * go mod tidy * go fmt * removed Private from user search options; added setting.UI.IssuePagingNum as default valeu on repo's issues list * Apply suggestions from code review Co-Authored-By: 6543 <6543@obermui.de> Co-Authored-By: zeripath <art27@cantab.net> * fixed build error * CI.restart() * fixed merge conflicts resolve * fixed conflicts resolve * improved FindTrackedTimesOptions.ToOptions() method * added backwards compatibility on ListReleases request; fixed issue tracked time ToSession * fixed build error; fixed swagger template * fixed swagger template * fixed ListReleases backwards compatibility * added page to user search route Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: zeripath <art27@cantab.net>
4 years ago
API add/generalize pagination (#9452) * paginate results * fixed deadlock * prevented breaking change * updated swagger * go fmt * fixed find topic * go mod tidy * go mod vendor with go1.13.5 * fixed repo find topics * fixed unit test * added Limit method to Engine struct; use engine variable when provided; fixed gitignore * use ItemsPerPage for default pagesize; fix GetWatchers, getOrgUsersByOrgID and GetStargazers; fix GetAllCommits headers; reverted some changed behaviors * set Page value on Home route * improved memory allocations * fixed response headers * removed logfiles * fixed import order * import order * improved swagger * added function to get models.ListOptions from context * removed pagesize diff on unit test * fixed imports * removed unnecessary struct field * fixed go fmt * scoped PR * code improvements * code improvements * go mod tidy * fixed import order * fixed commit statuses session * fixed files headers * fixed headers; added pagination for notifications * go mod tidy * go fmt * removed Private from user search options; added setting.UI.IssuePagingNum as default valeu on repo's issues list * Apply suggestions from code review Co-Authored-By: 6543 <6543@obermui.de> Co-Authored-By: zeripath <art27@cantab.net> * fixed build error * CI.restart() * fixed merge conflicts resolve * fixed conflicts resolve * improved FindTrackedTimesOptions.ToOptions() method * added backwards compatibility on ListReleases request; fixed issue tracked time ToSession * fixed build error; fixed swagger template * fixed swagger template * fixed ListReleases backwards compatibility * added page to user search route Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: zeripath <art27@cantab.net>
4 years ago
API add/generalize pagination (#9452) * paginate results * fixed deadlock * prevented breaking change * updated swagger * go fmt * fixed find topic * go mod tidy * go mod vendor with go1.13.5 * fixed repo find topics * fixed unit test * added Limit method to Engine struct; use engine variable when provided; fixed gitignore * use ItemsPerPage for default pagesize; fix GetWatchers, getOrgUsersByOrgID and GetStargazers; fix GetAllCommits headers; reverted some changed behaviors * set Page value on Home route * improved memory allocations * fixed response headers * removed logfiles * fixed import order * import order * improved swagger * added function to get models.ListOptions from context * removed pagesize diff on unit test * fixed imports * removed unnecessary struct field * fixed go fmt * scoped PR * code improvements * code improvements * go mod tidy * fixed import order * fixed commit statuses session * fixed files headers * fixed headers; added pagination for notifications * go mod tidy * go fmt * removed Private from user search options; added setting.UI.IssuePagingNum as default valeu on repo's issues list * Apply suggestions from code review Co-Authored-By: 6543 <6543@obermui.de> Co-Authored-By: zeripath <art27@cantab.net> * fixed build error * CI.restart() * fixed merge conflicts resolve * fixed conflicts resolve * improved FindTrackedTimesOptions.ToOptions() method * added backwards compatibility on ListReleases request; fixed issue tracked time ToSession * fixed build error; fixed swagger template * fixed swagger template * fixed ListReleases backwards compatibility * added page to user search route Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: zeripath <art27@cantab.net>
4 years ago
API add/generalize pagination (#9452) * paginate results * fixed deadlock * prevented breaking change * updated swagger * go fmt * fixed find topic * go mod tidy * go mod vendor with go1.13.5 * fixed repo find topics * fixed unit test * added Limit method to Engine struct; use engine variable when provided; fixed gitignore * use ItemsPerPage for default pagesize; fix GetWatchers, getOrgUsersByOrgID and GetStargazers; fix GetAllCommits headers; reverted some changed behaviors * set Page value on Home route * improved memory allocations * fixed response headers * removed logfiles * fixed import order * import order * improved swagger * added function to get models.ListOptions from context * removed pagesize diff on unit test * fixed imports * removed unnecessary struct field * fixed go fmt * scoped PR * code improvements * code improvements * go mod tidy * fixed import order * fixed commit statuses session * fixed files headers * fixed headers; added pagination for notifications * go mod tidy * go fmt * removed Private from user search options; added setting.UI.IssuePagingNum as default valeu on repo's issues list * Apply suggestions from code review Co-Authored-By: 6543 <6543@obermui.de> Co-Authored-By: zeripath <art27@cantab.net> * fixed build error * CI.restart() * fixed merge conflicts resolve * fixed conflicts resolve * improved FindTrackedTimesOptions.ToOptions() method * added backwards compatibility on ListReleases request; fixed issue tracked time ToSession * fixed build error; fixed swagger template * fixed swagger template * fixed ListReleases backwards compatibility * added page to user search route Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: zeripath <art27@cantab.net>
4 years ago
API add/generalize pagination (#9452) * paginate results * fixed deadlock * prevented breaking change * updated swagger * go fmt * fixed find topic * go mod tidy * go mod vendor with go1.13.5 * fixed repo find topics * fixed unit test * added Limit method to Engine struct; use engine variable when provided; fixed gitignore * use ItemsPerPage for default pagesize; fix GetWatchers, getOrgUsersByOrgID and GetStargazers; fix GetAllCommits headers; reverted some changed behaviors * set Page value on Home route * improved memory allocations * fixed response headers * removed logfiles * fixed import order * import order * improved swagger * added function to get models.ListOptions from context * removed pagesize diff on unit test * fixed imports * removed unnecessary struct field * fixed go fmt * scoped PR * code improvements * code improvements * go mod tidy * fixed import order * fixed commit statuses session * fixed files headers * fixed headers; added pagination for notifications * go mod tidy * go fmt * removed Private from user search options; added setting.UI.IssuePagingNum as default valeu on repo's issues list * Apply suggestions from code review Co-Authored-By: 6543 <6543@obermui.de> Co-Authored-By: zeripath <art27@cantab.net> * fixed build error * CI.restart() * fixed merge conflicts resolve * fixed conflicts resolve * improved FindTrackedTimesOptions.ToOptions() method * added backwards compatibility on ListReleases request; fixed issue tracked time ToSession * fixed build error; fixed swagger template * fixed swagger template * fixed ListReleases backwards compatibility * added page to user search route Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: zeripath <art27@cantab.net>
4 years ago
  1. // Copyright 2015 The Gogs Authors. All rights reserved.
  2. // Copyright 2018 The Gitea Authors. All rights reserved.
  3. // Use of this source code is governed by a MIT-style
  4. // license that can be found in the LICENSE file.
  5. package org
  6. import (
  7. "fmt"
  8. "net/http"
  9. "code.gitea.io/gitea/models"
  10. "code.gitea.io/gitea/modules/context"
  11. "code.gitea.io/gitea/modules/convert"
  12. api "code.gitea.io/gitea/modules/structs"
  13. "code.gitea.io/gitea/routers/api/v1/user"
  14. "code.gitea.io/gitea/routers/api/v1/utils"
  15. )
  16. func listUserOrgs(ctx *context.APIContext, u *models.User, all bool) {
  17. if err := u.GetOrganizations(&models.SearchOrganizationsOptions{
  18. ListOptions: utils.GetListOptions(ctx),
  19. All: all,
  20. }); err != nil {
  21. ctx.Error(http.StatusInternalServerError, "GetOrganizations", err)
  22. return
  23. }
  24. apiOrgs := make([]*api.Organization, len(u.Orgs))
  25. for i := range u.Orgs {
  26. apiOrgs[i] = convert.ToOrganization(u.Orgs[i])
  27. }
  28. ctx.JSON(http.StatusOK, &apiOrgs)
  29. }
  30. // ListMyOrgs list all my orgs
  31. func ListMyOrgs(ctx *context.APIContext) {
  32. // swagger:operation GET /user/orgs organization orgListCurrentUserOrgs
  33. // ---
  34. // summary: List the current user's organizations
  35. // produces:
  36. // - application/json
  37. // parameters:
  38. // - name: page
  39. // in: query
  40. // description: page number of results to return (1-based)
  41. // type: integer
  42. // - name: limit
  43. // in: query
  44. // description: page size of results
  45. // type: integer
  46. // responses:
  47. // "200":
  48. // "$ref": "#/responses/OrganizationList"
  49. listUserOrgs(ctx, ctx.User, true)
  50. }
  51. // ListUserOrgs list user's orgs
  52. func ListUserOrgs(ctx *context.APIContext) {
  53. // swagger:operation GET /users/{username}/orgs organization orgListUserOrgs
  54. // ---
  55. // summary: List a user's organizations
  56. // produces:
  57. // - application/json
  58. // parameters:
  59. // - name: username
  60. // in: path
  61. // description: username of user
  62. // type: string
  63. // required: true
  64. // - name: page
  65. // in: query
  66. // description: page number of results to return (1-based)
  67. // type: integer
  68. // - name: limit
  69. // in: query
  70. // description: page size of results
  71. // type: integer
  72. // responses:
  73. // "200":
  74. // "$ref": "#/responses/OrganizationList"
  75. u := user.GetUserByParams(ctx)
  76. if ctx.Written() {
  77. return
  78. }
  79. listUserOrgs(ctx, u, ctx.User != nil && (ctx.User.IsAdmin || ctx.User.ID == u.ID))
  80. }
  81. // GetAll return list of all public organizations
  82. func GetAll(ctx *context.APIContext) {
  83. // swagger:operation Get /orgs organization orgGetAll
  84. // ---
  85. // summary: Get list of organizations
  86. // produces:
  87. // - application/json
  88. // parameters:
  89. // - name: page
  90. // in: query
  91. // description: page number of results to return (1-based)
  92. // type: integer
  93. // - name: limit
  94. // in: query
  95. // description: page size of results
  96. // type: integer
  97. // responses:
  98. // "200":
  99. // "$ref": "#/responses/OrganizationList"
  100. vMode := []api.VisibleType{api.VisibleTypePublic}
  101. if ctx.IsSigned {
  102. vMode = append(vMode, api.VisibleTypeLimited)
  103. if ctx.User.IsAdmin {
  104. vMode = append(vMode, api.VisibleTypePrivate)
  105. }
  106. }
  107. listOptions := utils.GetListOptions(ctx)
  108. publicOrgs, maxResults, err := models.SearchUsers(&models.SearchUserOptions{
  109. ListOptions: listOptions,
  110. Type: models.UserTypeOrganization,
  111. OrderBy: models.SearchOrderByAlphabetically,
  112. Visible: vMode,
  113. })
  114. if err != nil {
  115. ctx.Error(http.StatusInternalServerError, "SearchOrganizations", err)
  116. return
  117. }
  118. orgs := make([]*api.Organization, len(publicOrgs))
  119. for i := range publicOrgs {
  120. orgs[i] = convert.ToOrganization(publicOrgs[i])
  121. }
  122. ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
  123. ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults))
  124. ctx.Header().Set("Access-Control-Expose-Headers", "X-Total-Count, Link")
  125. ctx.JSON(http.StatusOK, &orgs)
  126. }
  127. // Create api for create organization
  128. func Create(ctx *context.APIContext, form api.CreateOrgOption) {
  129. // swagger:operation POST /orgs organization orgCreate
  130. // ---
  131. // summary: Create an organization
  132. // consumes:
  133. // - application/json
  134. // produces:
  135. // - application/json
  136. // parameters:
  137. // - name: organization
  138. // in: body
  139. // required: true
  140. // schema: { "$ref": "#/definitions/CreateOrgOption" }
  141. // responses:
  142. // "201":
  143. // "$ref": "#/responses/Organization"
  144. // "403":
  145. // "$ref": "#/responses/forbidden"
  146. // "422":
  147. // "$ref": "#/responses/validationError"
  148. if !ctx.User.CanCreateOrganization() {
  149. ctx.Error(http.StatusForbidden, "Create organization not allowed", nil)
  150. return
  151. }
  152. visibility := api.VisibleTypePublic
  153. if form.Visibility != "" {
  154. visibility = api.VisibilityModes[form.Visibility]
  155. }
  156. org := &models.User{
  157. Name: form.UserName,
  158. FullName: form.FullName,
  159. Description: form.Description,
  160. Website: form.Website,
  161. Location: form.Location,
  162. IsActive: true,
  163. Type: models.UserTypeOrganization,
  164. Visibility: visibility,
  165. RepoAdminChangeTeamAccess: form.RepoAdminChangeTeamAccess,
  166. }
  167. if err := models.CreateOrganization(org, ctx.User); err != nil {
  168. if models.IsErrUserAlreadyExist(err) ||
  169. models.IsErrNameReserved(err) ||
  170. models.IsErrNameCharsNotAllowed(err) ||
  171. models.IsErrNamePatternNotAllowed(err) {
  172. ctx.Error(http.StatusUnprocessableEntity, "", err)
  173. } else {
  174. ctx.Error(http.StatusInternalServerError, "CreateOrganization", err)
  175. }
  176. return
  177. }
  178. ctx.JSON(http.StatusCreated, convert.ToOrganization(org))
  179. }
  180. // Get get an organization
  181. func Get(ctx *context.APIContext) {
  182. // swagger:operation GET /orgs/{org} organization orgGet
  183. // ---
  184. // summary: Get an organization
  185. // produces:
  186. // - application/json
  187. // parameters:
  188. // - name: org
  189. // in: path
  190. // description: name of the organization to get
  191. // type: string
  192. // required: true
  193. // responses:
  194. // "200":
  195. // "$ref": "#/responses/Organization"
  196. if !models.HasOrgVisible(ctx.Org.Organization, ctx.User) {
  197. ctx.NotFound("HasOrgVisible", nil)
  198. return
  199. }
  200. ctx.JSON(http.StatusOK, convert.ToOrganization(ctx.Org.Organization))
  201. }
  202. // Edit change an organization's information
  203. func Edit(ctx *context.APIContext, form api.EditOrgOption) {
  204. // swagger:operation PATCH /orgs/{org} organization orgEdit
  205. // ---
  206. // summary: Edit an organization
  207. // consumes:
  208. // - application/json
  209. // produces:
  210. // - application/json
  211. // parameters:
  212. // - name: org
  213. // in: path
  214. // description: name of the organization to edit
  215. // type: string
  216. // required: true
  217. // - name: body
  218. // in: body
  219. // required: true
  220. // schema:
  221. // "$ref": "#/definitions/EditOrgOption"
  222. // responses:
  223. // "200":
  224. // "$ref": "#/responses/Organization"
  225. org := ctx.Org.Organization
  226. org.FullName = form.FullName
  227. org.Description = form.Description
  228. org.Website = form.Website
  229. org.Location = form.Location
  230. if form.Visibility != "" {
  231. org.Visibility = api.VisibilityModes[form.Visibility]
  232. }
  233. if err := models.UpdateUserCols(org, "full_name", "description", "website", "location", "visibility"); err != nil {
  234. ctx.Error(http.StatusInternalServerError, "EditOrganization", err)
  235. return
  236. }
  237. ctx.JSON(http.StatusOK, convert.ToOrganization(org))
  238. }
  239. //Delete an organization
  240. func Delete(ctx *context.APIContext) {
  241. // swagger:operation DELETE /orgs/{org} organization orgDelete
  242. // ---
  243. // summary: Delete an organization
  244. // produces:
  245. // - application/json
  246. // parameters:
  247. // - name: org
  248. // in: path
  249. // description: organization that is to be deleted
  250. // type: string
  251. // required: true
  252. // responses:
  253. // "204":
  254. // "$ref": "#/responses/empty"
  255. if err := models.DeleteOrganization(ctx.Org.Organization); err != nil {
  256. ctx.Error(http.StatusInternalServerError, "DeleteOrganization", err)
  257. return
  258. }
  259. ctx.Status(http.StatusNoContent)
  260. }