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

org.go 8.3 kB

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>
5 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>
5 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>
5 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>
5 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>
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  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. "code.gitea.io/gitea/routers/response"
  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, maximum page size is 50
  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, maximum page size is 50
  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.IsAdmin)
  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, maximum page size is 50
  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. publicOrgs, _, err := models.SearchUsers(&models.SearchUserOptions{
  108. ListOptions: utils.GetListOptions(ctx),
  109. Type: models.UserTypeOrganization,
  110. OrderBy: models.SearchOrderByAlphabetically,
  111. Visible: vMode,
  112. })
  113. if err != nil {
  114. ctx.Error(http.StatusInternalServerError, "SearchOrganizations", err)
  115. return
  116. }
  117. orgs := make([]*api.Organization, len(publicOrgs))
  118. for i := range publicOrgs {
  119. orgs[i] = convert.ToOrganization(publicOrgs[i])
  120. }
  121. ctx.JSON(http.StatusOK, &orgs)
  122. }
  123. // Create api for create organization
  124. func Create(ctx *context.APIContext, form api.CreateOrgOption) {
  125. // swagger:operation POST /orgs organization orgCreate
  126. // ---
  127. // summary: Create an organization
  128. // consumes:
  129. // - application/json
  130. // produces:
  131. // - application/json
  132. // parameters:
  133. // - name: organization
  134. // in: body
  135. // required: true
  136. // schema: { "$ref": "#/definitions/CreateOrgOption" }
  137. // responses:
  138. // "201":
  139. // "$ref": "#/responses/Organization"
  140. // "403":
  141. // "$ref": "#/responses/forbidden"
  142. // "422":
  143. // "$ref": "#/responses/validationError"
  144. if !ctx.User.CanCreateOrganization() {
  145. ctx.Error(http.StatusForbidden, "Create organization not allowed", nil)
  146. return
  147. }
  148. visibility := api.VisibleTypePublic
  149. if form.Visibility != "" {
  150. visibility = api.VisibilityModes[form.Visibility]
  151. }
  152. org := &models.User{
  153. Name: form.UserName,
  154. FullName: form.FullName,
  155. Description: form.Description,
  156. Website: form.Website,
  157. Location: form.Location,
  158. IsActive: true,
  159. Type: models.UserTypeOrganization,
  160. Visibility: visibility,
  161. RepoAdminChangeTeamAccess: form.RepoAdminChangeTeamAccess,
  162. }
  163. if err := models.CreateOrganization(org, ctx.User); err != nil {
  164. if models.IsErrUserAlreadyExist(err) ||
  165. models.IsErrNameReserved(err) ||
  166. models.IsErrNameCharsNotAllowed(err) ||
  167. models.IsErrNamePatternNotAllowed(err) {
  168. ctx.Error(http.StatusUnprocessableEntity, "", err)
  169. } else {
  170. ctx.Error(http.StatusInternalServerError, "CreateOrganization", err)
  171. }
  172. return
  173. }
  174. ctx.JSON(http.StatusCreated, convert.ToOrganization(org))
  175. }
  176. // Get get an organization
  177. func Get(ctx *context.APIContext) {
  178. // swagger:operation GET /orgs/{org} organization orgGet
  179. // ---
  180. // summary: Get an organization
  181. // produces:
  182. // - application/json
  183. // parameters:
  184. // - name: org
  185. // in: path
  186. // description: name of the organization to get
  187. // type: string
  188. // required: true
  189. // responses:
  190. // "200":
  191. // "$ref": "#/responses/Organization"
  192. if !models.HasOrgVisible(ctx.Org.Organization, ctx.User) {
  193. ctx.NotFound("HasOrgVisible", nil)
  194. return
  195. }
  196. ctx.JSON(http.StatusOK, convert.ToOrganization(ctx.Org.Organization))
  197. }
  198. // Edit change an organization's information
  199. func Edit(ctx *context.APIContext, form api.EditOrgOption) {
  200. // swagger:operation PATCH /orgs/{org} organization orgEdit
  201. // ---
  202. // summary: Edit an organization
  203. // consumes:
  204. // - application/json
  205. // produces:
  206. // - application/json
  207. // parameters:
  208. // - name: org
  209. // in: path
  210. // description: name of the organization to edit
  211. // type: string
  212. // required: true
  213. // - name: body
  214. // in: body
  215. // required: true
  216. // schema:
  217. // "$ref": "#/definitions/EditOrgOption"
  218. // responses:
  219. // "200":
  220. // "$ref": "#/responses/Organization"
  221. org := ctx.Org.Organization
  222. org.FullName = form.FullName
  223. org.Description = form.Description
  224. org.Website = form.Website
  225. org.Location = form.Location
  226. if form.Visibility != "" {
  227. org.Visibility = api.VisibilityModes[form.Visibility]
  228. }
  229. if err := models.UpdateUserCols(org, "full_name", "description", "website", "location", "visibility"); err != nil {
  230. ctx.Error(http.StatusInternalServerError, "EditOrganization", err)
  231. return
  232. }
  233. ctx.JSON(http.StatusOK, convert.ToOrganization(org))
  234. }
  235. //Delete an organization
  236. func Delete(ctx *context.APIContext) {
  237. // swagger:operation DELETE /orgs/{org} organization orgDelete
  238. // ---
  239. // summary: Delete an organization
  240. // produces:
  241. // - application/json
  242. // parameters:
  243. // - name: org
  244. // in: path
  245. // description: organization that is to be deleted
  246. // type: string
  247. // required: true
  248. // responses:
  249. // "204":
  250. // "$ref": "#/responses/empty"
  251. if err := models.DeleteOrganization(ctx.Org.Organization); err != nil {
  252. ctx.Error(http.StatusInternalServerError, "DeleteOrganization", err)
  253. return
  254. }
  255. ctx.Status(http.StatusNoContent)
  256. }
  257. func GetMyOwners(ctx *context.APIContext) {
  258. result := make([]*models.User4Front, 0)
  259. result = append(result, ctx.User.ToFrontFormat())
  260. orgs, err := models.GetOrgsCanCreateRepoByUserID(ctx.User.ID)
  261. if err != nil {
  262. ctx.JSON(http.StatusOK, response.ResponseError(err))
  263. return
  264. }
  265. if !ctx.User.IsAdmin {
  266. orgsAvailable := []*models.User{}
  267. for i := 0; i < len(orgs); i++ {
  268. if orgs[i].CanCreateRepo() {
  269. orgsAvailable = append(orgsAvailable, orgs[i])
  270. }
  271. }
  272. orgs = orgsAvailable
  273. }
  274. for _, o := range orgs {
  275. result = append(result, o.ToFrontFormat())
  276. }
  277. ctx.JSON(http.StatusOK, response.SuccessWithData(result))
  278. }