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.

repo.go 2.2 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package user
  2. import (
  3. "code.gitea.io/gitea/models"
  4. "code.gitea.io/gitea/modules/context"
  5. api "code.gitea.io/sdk/gitea"
  6. )
  7. // listUserRepos - List the repositories owned by the given user.
  8. func listUserRepos(ctx *context.APIContext, u *models.User) {
  9. userID := u.ID
  10. showPrivateRepos := ctx.IsSigned && (ctx.User.ID == userID || ctx.User.IsAdmin)
  11. ownRepos, err := models.GetUserRepositories(userID, showPrivateRepos, 1, u.NumRepos, "")
  12. if err != nil {
  13. ctx.Error(500, "GetUserRepositories", err)
  14. return
  15. }
  16. var accessibleRepos []*api.Repository
  17. if ctx.User != nil {
  18. accessibleRepos, err = getAccessibleRepos(ctx)
  19. if err != nil {
  20. ctx.Error(500, "GetAccessibleRepos", err)
  21. }
  22. }
  23. apiRepos := make([]*api.Repository, len(ownRepos)+len(accessibleRepos))
  24. // Set owned repositories.
  25. for i := range ownRepos {
  26. apiRepos[i] = ownRepos[i].APIFormat(models.AccessModeOwner)
  27. }
  28. // Set repositories user has access to.
  29. for i := 0; i < len(accessibleRepos); i++ {
  30. apiRepos[i+len(ownRepos)] = accessibleRepos[i]
  31. }
  32. ctx.JSON(200, &apiRepos)
  33. }
  34. // ListUserRepos - list the repos owned and accessible by the given user.
  35. func ListUserRepos(ctx *context.APIContext) {
  36. // swagger:route GET /users/{username}/repos userListRepos
  37. //
  38. // Produces:
  39. // - application/json
  40. //
  41. // Responses:
  42. // 200: RepositoryList
  43. // 500: error
  44. user := GetUserByParams(ctx)
  45. if ctx.Written() {
  46. return
  47. }
  48. listUserRepos(ctx, user)
  49. }
  50. // ListMyRepos - list the repositories owned by you.
  51. func ListMyRepos(ctx *context.APIContext) {
  52. // swagger:route GET /user/repos userCurrentListRepos
  53. //
  54. // Produces:
  55. // - application/json
  56. //
  57. // Responses:
  58. // 200: RepositoryList
  59. // 500: error
  60. listUserRepos(ctx, ctx.User)
  61. }
  62. // getAccessibleRepos - Get the repositories a user has access to.
  63. func getAccessibleRepos(ctx *context.APIContext) ([]*api.Repository, error) {
  64. accessibleRepos, err := ctx.User.GetRepositoryAccesses()
  65. if err != nil {
  66. return nil, err
  67. }
  68. i := 0
  69. repos := make([]*api.Repository, len(accessibleRepos))
  70. for repo, access := range accessibleRepos {
  71. repos[i] = repo.APIFormat(access)
  72. i++
  73. }
  74. return repos, nil
  75. }