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.

team.go 18 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
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
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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695
  1. // Copyright 2016 The Gogs Authors. All rights reserved.
  2. // Copyright 2019 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. "strings"
  10. "code.gitea.io/gitea/models"
  11. "code.gitea.io/gitea/modules/context"
  12. "code.gitea.io/gitea/modules/convert"
  13. "code.gitea.io/gitea/modules/log"
  14. api "code.gitea.io/gitea/modules/structs"
  15. "code.gitea.io/gitea/routers/api/v1/user"
  16. "code.gitea.io/gitea/routers/api/v1/utils"
  17. )
  18. // ListTeams list all the teams of an organization
  19. func ListTeams(ctx *context.APIContext) {
  20. // swagger:operation GET /orgs/{org}/teams organization orgListTeams
  21. // ---
  22. // summary: List an organization's teams
  23. // produces:
  24. // - application/json
  25. // parameters:
  26. // - name: org
  27. // in: path
  28. // description: name of the organization
  29. // type: string
  30. // required: true
  31. // - name: page
  32. // in: query
  33. // description: page number of results to return (1-based)
  34. // type: integer
  35. // - name: limit
  36. // in: query
  37. // description: page size of results
  38. // type: integer
  39. // responses:
  40. // "200":
  41. // "$ref": "#/responses/TeamList"
  42. org := ctx.Org.Organization
  43. if err := org.GetTeams(&models.SearchTeamOptions{
  44. ListOptions: utils.GetListOptions(ctx),
  45. }); err != nil {
  46. ctx.Error(http.StatusInternalServerError, "GetTeams", err)
  47. return
  48. }
  49. apiTeams := make([]*api.Team, len(org.Teams))
  50. for i := range org.Teams {
  51. if err := org.Teams[i].GetUnits(); err != nil {
  52. ctx.Error(http.StatusInternalServerError, "GetUnits", err)
  53. return
  54. }
  55. apiTeams[i] = convert.ToTeam(org.Teams[i])
  56. }
  57. ctx.JSON(http.StatusOK, apiTeams)
  58. }
  59. // ListUserTeams list all the teams a user belongs to
  60. func ListUserTeams(ctx *context.APIContext) {
  61. // swagger:operation GET /user/teams user userListTeams
  62. // ---
  63. // summary: List all the teams a user belongs to
  64. // produces:
  65. // - application/json
  66. // parameters:
  67. // - name: page
  68. // in: query
  69. // description: page number of results to return (1-based)
  70. // type: integer
  71. // - name: limit
  72. // in: query
  73. // description: page size of results
  74. // type: integer
  75. // responses:
  76. // "200":
  77. // "$ref": "#/responses/TeamList"
  78. teams, err := models.GetUserTeams(ctx.User.ID, utils.GetListOptions(ctx))
  79. if err != nil {
  80. ctx.Error(http.StatusInternalServerError, "GetUserTeams", err)
  81. return
  82. }
  83. cache := make(map[int64]*api.Organization)
  84. apiTeams := make([]*api.Team, len(teams))
  85. for i := range teams {
  86. apiOrg, ok := cache[teams[i].OrgID]
  87. if !ok {
  88. org, err := models.GetUserByID(teams[i].OrgID)
  89. if err != nil {
  90. ctx.Error(http.StatusInternalServerError, "GetUserByID", err)
  91. return
  92. }
  93. apiOrg = convert.ToOrganization(org)
  94. cache[teams[i].OrgID] = apiOrg
  95. }
  96. apiTeams[i] = convert.ToTeam(teams[i])
  97. apiTeams[i].Organization = apiOrg
  98. }
  99. ctx.JSON(http.StatusOK, apiTeams)
  100. }
  101. // GetTeam api for get a team
  102. func GetTeam(ctx *context.APIContext) {
  103. // swagger:operation GET /teams/{id} organization orgGetTeam
  104. // ---
  105. // summary: Get a team
  106. // produces:
  107. // - application/json
  108. // parameters:
  109. // - name: id
  110. // in: path
  111. // description: id of the team to get
  112. // type: integer
  113. // format: int64
  114. // required: true
  115. // responses:
  116. // "200":
  117. // "$ref": "#/responses/Team"
  118. ctx.JSON(http.StatusOK, convert.ToTeam(ctx.Org.Team))
  119. }
  120. // CreateTeam api for create a team
  121. func CreateTeam(ctx *context.APIContext, form api.CreateTeamOption) {
  122. // swagger:operation POST /orgs/{org}/teams organization orgCreateTeam
  123. // ---
  124. // summary: Create a team
  125. // consumes:
  126. // - application/json
  127. // produces:
  128. // - application/json
  129. // parameters:
  130. // - name: org
  131. // in: path
  132. // description: name of the organization
  133. // type: string
  134. // required: true
  135. // - name: body
  136. // in: body
  137. // schema:
  138. // "$ref": "#/definitions/CreateTeamOption"
  139. // responses:
  140. // "201":
  141. // "$ref": "#/responses/Team"
  142. // "422":
  143. // "$ref": "#/responses/validationError"
  144. team := &models.Team{
  145. OrgID: ctx.Org.Organization.ID,
  146. Name: form.Name,
  147. Description: form.Description,
  148. IncludesAllRepositories: form.IncludesAllRepositories,
  149. CanCreateOrgRepo: form.CanCreateOrgRepo,
  150. Authorize: models.ParseAccessMode(form.Permission),
  151. }
  152. unitTypes := models.FindUnitTypes(form.Units...)
  153. if team.Authorize < models.AccessModeOwner {
  154. var units = make([]*models.TeamUnit, 0, len(form.Units))
  155. for _, tp := range unitTypes {
  156. units = append(units, &models.TeamUnit{
  157. OrgID: ctx.Org.Organization.ID,
  158. Type: tp,
  159. })
  160. }
  161. team.Units = units
  162. }
  163. if err := models.NewTeam(team); err != nil {
  164. if models.IsErrTeamAlreadyExist(err) {
  165. ctx.Error(http.StatusUnprocessableEntity, "", err)
  166. } else {
  167. ctx.Error(http.StatusInternalServerError, "NewTeam", err)
  168. }
  169. return
  170. }
  171. ctx.JSON(http.StatusCreated, convert.ToTeam(team))
  172. }
  173. // EditTeam api for edit a team
  174. func EditTeam(ctx *context.APIContext, form api.EditTeamOption) {
  175. // swagger:operation PATCH /teams/{id} organization orgEditTeam
  176. // ---
  177. // summary: Edit a team
  178. // consumes:
  179. // - application/json
  180. // produces:
  181. // - application/json
  182. // parameters:
  183. // - name: id
  184. // in: path
  185. // description: id of the team to edit
  186. // type: integer
  187. // required: true
  188. // - name: body
  189. // in: body
  190. // schema:
  191. // "$ref": "#/definitions/EditTeamOption"
  192. // responses:
  193. // "200":
  194. // "$ref": "#/responses/Team"
  195. team := ctx.Org.Team
  196. if err := team.GetUnits(); err != nil {
  197. ctx.InternalServerError(err)
  198. return
  199. }
  200. if form.CanCreateOrgRepo != nil {
  201. team.CanCreateOrgRepo = *form.CanCreateOrgRepo
  202. }
  203. if len(form.Name) > 0 {
  204. team.Name = form.Name
  205. }
  206. if form.Description != nil {
  207. team.Description = *form.Description
  208. }
  209. isAuthChanged := false
  210. isIncludeAllChanged := false
  211. if !team.IsOwnerTeam() && len(form.Permission) != 0 {
  212. // Validate permission level.
  213. auth := models.ParseAccessMode(form.Permission)
  214. if team.Authorize != auth {
  215. isAuthChanged = true
  216. team.Authorize = auth
  217. }
  218. if form.IncludesAllRepositories != nil {
  219. isIncludeAllChanged = true
  220. team.IncludesAllRepositories = *form.IncludesAllRepositories
  221. }
  222. }
  223. if team.Authorize < models.AccessModeOwner {
  224. if len(form.Units) > 0 {
  225. var units = make([]*models.TeamUnit, 0, len(form.Units))
  226. unitTypes := models.FindUnitTypes(form.Units...)
  227. for _, tp := range unitTypes {
  228. units = append(units, &models.TeamUnit{
  229. OrgID: ctx.Org.Team.OrgID,
  230. Type: tp,
  231. })
  232. }
  233. team.Units = units
  234. }
  235. }
  236. if err := models.UpdateTeam(team, isAuthChanged, isIncludeAllChanged); err != nil {
  237. ctx.Error(http.StatusInternalServerError, "EditTeam", err)
  238. return
  239. }
  240. ctx.JSON(http.StatusOK, convert.ToTeam(team))
  241. }
  242. // DeleteTeam api for delete a team
  243. func DeleteTeam(ctx *context.APIContext) {
  244. // swagger:operation DELETE /teams/{id} organization orgDeleteTeam
  245. // ---
  246. // summary: Delete a team
  247. // parameters:
  248. // - name: id
  249. // in: path
  250. // description: id of the team to delete
  251. // type: integer
  252. // format: int64
  253. // required: true
  254. // responses:
  255. // "204":
  256. // description: team deleted
  257. if err := models.DeleteTeam(ctx.Org.Team); err != nil {
  258. ctx.Error(http.StatusInternalServerError, "DeleteTeam", err)
  259. return
  260. }
  261. ctx.Status(http.StatusNoContent)
  262. }
  263. // GetTeamMembers api for get a team's members
  264. func GetTeamMembers(ctx *context.APIContext) {
  265. // swagger:operation GET /teams/{id}/members organization orgListTeamMembers
  266. // ---
  267. // summary: List a team's members
  268. // produces:
  269. // - application/json
  270. // parameters:
  271. // - name: id
  272. // in: path
  273. // description: id of the team
  274. // type: integer
  275. // format: int64
  276. // required: true
  277. // - name: page
  278. // in: query
  279. // description: page number of results to return (1-based)
  280. // type: integer
  281. // - name: limit
  282. // in: query
  283. // description: page size of results
  284. // type: integer
  285. // responses:
  286. // "200":
  287. // "$ref": "#/responses/UserList"
  288. isMember, err := models.IsOrganizationMember(ctx.Org.Team.OrgID, ctx.User.ID)
  289. if err != nil {
  290. ctx.Error(http.StatusInternalServerError, "IsOrganizationMember", err)
  291. return
  292. } else if !isMember && !ctx.User.IsAdmin {
  293. ctx.NotFound()
  294. return
  295. }
  296. team := ctx.Org.Team
  297. if err := team.GetMembers(&models.SearchMembersOptions{
  298. ListOptions: utils.GetListOptions(ctx),
  299. }); err != nil {
  300. ctx.Error(http.StatusInternalServerError, "GetTeamMembers", err)
  301. return
  302. }
  303. members := make([]*api.User, len(team.Members))
  304. for i, member := range team.Members {
  305. members[i] = convert.ToUser(member, ctx.IsSigned, ctx.User.IsAdmin)
  306. }
  307. ctx.JSON(http.StatusOK, members)
  308. }
  309. // GetTeamMember api for get a particular member of team
  310. func GetTeamMember(ctx *context.APIContext) {
  311. // swagger:operation GET /teams/{id}/members/{username} organization orgListTeamMember
  312. // ---
  313. // summary: List a particular member of team
  314. // produces:
  315. // - application/json
  316. // parameters:
  317. // - name: id
  318. // in: path
  319. // description: id of the team
  320. // type: integer
  321. // format: int64
  322. // required: true
  323. // - name: username
  324. // in: path
  325. // description: username of the member to list
  326. // type: string
  327. // required: true
  328. // responses:
  329. // "200":
  330. // "$ref": "#/responses/User"
  331. // "404":
  332. // "$ref": "#/responses/notFound"
  333. u := user.GetUserByParams(ctx)
  334. if ctx.Written() {
  335. return
  336. }
  337. teamID := ctx.ParamsInt64("teamid")
  338. isTeamMember, err := models.IsUserInTeams(u.ID, []int64{teamID})
  339. if err != nil {
  340. ctx.Error(http.StatusInternalServerError, "IsUserInTeams", err)
  341. return
  342. } else if !isTeamMember {
  343. ctx.NotFound()
  344. return
  345. }
  346. ctx.JSON(http.StatusOK, convert.ToUser(u, ctx.IsSigned, ctx.User.IsAdmin))
  347. }
  348. // AddTeamMember api for add a member to a team
  349. func AddTeamMember(ctx *context.APIContext) {
  350. // swagger:operation PUT /teams/{id}/members/{username} organization orgAddTeamMember
  351. // ---
  352. // summary: Add a team member
  353. // produces:
  354. // - application/json
  355. // parameters:
  356. // - name: id
  357. // in: path
  358. // description: id of the team
  359. // type: integer
  360. // format: int64
  361. // required: true
  362. // - name: username
  363. // in: path
  364. // description: username of the user to add
  365. // type: string
  366. // required: true
  367. // responses:
  368. // "204":
  369. // "$ref": "#/responses/empty"
  370. // "404":
  371. // "$ref": "#/responses/notFound"
  372. u := user.GetUserByParams(ctx)
  373. if ctx.Written() {
  374. return
  375. }
  376. if err := ctx.Org.Team.AddMember(u.ID); err != nil {
  377. ctx.Error(http.StatusInternalServerError, "AddMember", err)
  378. return
  379. }
  380. ctx.Status(http.StatusNoContent)
  381. }
  382. // RemoveTeamMember api for remove one member from a team
  383. func RemoveTeamMember(ctx *context.APIContext) {
  384. // swagger:operation DELETE /teams/{id}/members/{username} organization orgRemoveTeamMember
  385. // ---
  386. // summary: Remove a team member
  387. // produces:
  388. // - application/json
  389. // parameters:
  390. // - name: id
  391. // in: path
  392. // description: id of the team
  393. // type: integer
  394. // format: int64
  395. // required: true
  396. // - name: username
  397. // in: path
  398. // description: username of the user to remove
  399. // type: string
  400. // required: true
  401. // responses:
  402. // "204":
  403. // "$ref": "#/responses/empty"
  404. // "404":
  405. // "$ref": "#/responses/notFound"
  406. u := user.GetUserByParams(ctx)
  407. if ctx.Written() {
  408. return
  409. }
  410. if err := ctx.Org.Team.RemoveMember(u.ID); err != nil {
  411. ctx.Error(http.StatusInternalServerError, "RemoveMember", err)
  412. return
  413. }
  414. ctx.Status(http.StatusNoContent)
  415. }
  416. // GetTeamRepos api for get a team's repos
  417. func GetTeamRepos(ctx *context.APIContext) {
  418. // swagger:operation GET /teams/{id}/repos organization orgListTeamRepos
  419. // ---
  420. // summary: List a team's repos
  421. // produces:
  422. // - application/json
  423. // parameters:
  424. // - name: id
  425. // in: path
  426. // description: id of the team
  427. // type: integer
  428. // format: int64
  429. // required: true
  430. // - name: page
  431. // in: query
  432. // description: page number of results to return (1-based)
  433. // type: integer
  434. // - name: limit
  435. // in: query
  436. // description: page size of results
  437. // type: integer
  438. // responses:
  439. // "200":
  440. // "$ref": "#/responses/RepositoryList"
  441. team := ctx.Org.Team
  442. if err := team.GetRepositories(&models.SearchTeamOptions{
  443. ListOptions: utils.GetListOptions(ctx),
  444. }); err != nil {
  445. ctx.Error(http.StatusInternalServerError, "GetTeamRepos", err)
  446. }
  447. repos := make([]*api.Repository, len(team.Repos))
  448. for i, repo := range team.Repos {
  449. access, err := models.AccessLevel(ctx.User, repo)
  450. if err != nil {
  451. ctx.Error(http.StatusInternalServerError, "GetTeamRepos", err)
  452. return
  453. }
  454. repos[i] = repo.APIFormat(access)
  455. }
  456. ctx.JSON(http.StatusOK, repos)
  457. }
  458. // getRepositoryByParams get repository by a team's organization ID and repo name
  459. func getRepositoryByParams(ctx *context.APIContext) *models.Repository {
  460. repo, err := models.GetRepositoryByName(ctx.Org.Team.OrgID, ctx.Params(":reponame"))
  461. if err != nil {
  462. if models.IsErrRepoNotExist(err) {
  463. ctx.NotFound()
  464. } else {
  465. ctx.Error(http.StatusInternalServerError, "GetRepositoryByName", err)
  466. }
  467. return nil
  468. }
  469. return repo
  470. }
  471. // AddTeamRepository api for adding a repository to a team
  472. func AddTeamRepository(ctx *context.APIContext) {
  473. // swagger:operation PUT /teams/{id}/repos/{org}/{repo} organization orgAddTeamRepository
  474. // ---
  475. // summary: Add a repository to a team
  476. // produces:
  477. // - application/json
  478. // parameters:
  479. // - name: id
  480. // in: path
  481. // description: id of the team
  482. // type: integer
  483. // format: int64
  484. // required: true
  485. // - name: org
  486. // in: path
  487. // description: organization that owns the repo to add
  488. // type: string
  489. // required: true
  490. // - name: repo
  491. // in: path
  492. // description: name of the repo to add
  493. // type: string
  494. // required: true
  495. // responses:
  496. // "204":
  497. // "$ref": "#/responses/empty"
  498. // "403":
  499. // "$ref": "#/responses/forbidden"
  500. repo := getRepositoryByParams(ctx)
  501. if ctx.Written() {
  502. return
  503. }
  504. if access, err := models.AccessLevel(ctx.User, repo); err != nil {
  505. ctx.Error(http.StatusInternalServerError, "AccessLevel", err)
  506. return
  507. } else if access < models.AccessModeAdmin {
  508. ctx.Error(http.StatusForbidden, "", "Must have admin-level access to the repository")
  509. return
  510. }
  511. if err := ctx.Org.Team.AddRepository(repo); err != nil {
  512. ctx.Error(http.StatusInternalServerError, "AddRepository", err)
  513. return
  514. }
  515. ctx.Status(http.StatusNoContent)
  516. }
  517. // RemoveTeamRepository api for removing a repository from a team
  518. func RemoveTeamRepository(ctx *context.APIContext) {
  519. // swagger:operation DELETE /teams/{id}/repos/{org}/{repo} organization orgRemoveTeamRepository
  520. // ---
  521. // summary: Remove a repository from a team
  522. // description: This does not delete the repository, it only removes the
  523. // repository from the team.
  524. // produces:
  525. // - application/json
  526. // parameters:
  527. // - name: id
  528. // in: path
  529. // description: id of the team
  530. // type: integer
  531. // format: int64
  532. // required: true
  533. // - name: org
  534. // in: path
  535. // description: organization that owns the repo to remove
  536. // type: string
  537. // required: true
  538. // - name: repo
  539. // in: path
  540. // description: name of the repo to remove
  541. // type: string
  542. // required: true
  543. // responses:
  544. // "204":
  545. // "$ref": "#/responses/empty"
  546. // "403":
  547. // "$ref": "#/responses/forbidden"
  548. repo := getRepositoryByParams(ctx)
  549. if ctx.Written() {
  550. return
  551. }
  552. if access, err := models.AccessLevel(ctx.User, repo); err != nil {
  553. ctx.Error(http.StatusInternalServerError, "AccessLevel", err)
  554. return
  555. } else if access < models.AccessModeAdmin {
  556. ctx.Error(http.StatusForbidden, "", "Must have admin-level access to the repository")
  557. return
  558. }
  559. if err := ctx.Org.Team.RemoveRepository(repo.ID); err != nil {
  560. ctx.Error(http.StatusInternalServerError, "RemoveRepository", err)
  561. return
  562. }
  563. ctx.Status(http.StatusNoContent)
  564. }
  565. // SearchTeam api for searching teams
  566. func SearchTeam(ctx *context.APIContext) {
  567. // swagger:operation GET /orgs/{org}/teams/search organization teamSearch
  568. // ---
  569. // summary: Search for teams within an organization
  570. // produces:
  571. // - application/json
  572. // parameters:
  573. // - name: org
  574. // in: path
  575. // description: name of the organization
  576. // type: string
  577. // required: true
  578. // - name: q
  579. // in: query
  580. // description: keywords to search
  581. // type: string
  582. // - name: include_desc
  583. // in: query
  584. // description: include search within team description (defaults to true)
  585. // type: boolean
  586. // - name: page
  587. // in: query
  588. // description: page number of results to return (1-based)
  589. // type: integer
  590. // - name: limit
  591. // in: query
  592. // description: page size of results
  593. // type: integer
  594. // responses:
  595. // "200":
  596. // description: "SearchResults of a successful search"
  597. // schema:
  598. // type: object
  599. // properties:
  600. // ok:
  601. // type: boolean
  602. // data:
  603. // type: array
  604. // items:
  605. // "$ref": "#/definitions/Team"
  606. listOptions := utils.GetListOptions(ctx)
  607. opts := &models.SearchTeamOptions{
  608. UserID: ctx.User.ID,
  609. Keyword: strings.TrimSpace(ctx.Query("q")),
  610. OrgID: ctx.Org.Organization.ID,
  611. IncludeDesc: (ctx.Query("include_desc") == "" || ctx.QueryBool("include_desc")),
  612. ListOptions: listOptions,
  613. }
  614. teams, maxResults, err := models.SearchTeam(opts)
  615. if err != nil {
  616. log.Error("SearchTeam failed: %v", err)
  617. ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
  618. "ok": false,
  619. "error": "SearchTeam internal failure",
  620. })
  621. return
  622. }
  623. apiTeams := make([]*api.Team, len(teams))
  624. for i := range teams {
  625. if err := teams[i].GetUnits(); err != nil {
  626. log.Error("Team GetUnits failed: %v", err)
  627. ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
  628. "ok": false,
  629. "error": "SearchTeam failed to get units",
  630. })
  631. return
  632. }
  633. apiTeams[i] = convert.ToTeam(teams[i])
  634. }
  635. ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
  636. ctx.Header().Set("X-Total-Count", fmt.Sprintf("%d", maxResults))
  637. ctx.Header().Set("Access-Control-Expose-Headers", "X-Total-Count, Link")
  638. ctx.JSON(http.StatusOK, map[string]interface{}{
  639. "ok": true,
  640. "data": apiTeams,
  641. })
  642. }