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 1.9 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. user := GetUserByParams(ctx)
  37. if ctx.Written() {
  38. return
  39. }
  40. listUserRepos(ctx, user)
  41. }
  42. // ListMyRepos - list the repositories owned by you.
  43. // see https://github.com/gogits/go-gogs-client/wiki/Repositories#list-your-repositories
  44. func ListMyRepos(ctx *context.APIContext) {
  45. listUserRepos(ctx, ctx.User)
  46. }
  47. // getAccessibleRepos - Get the repositories a user has access to.
  48. func getAccessibleRepos(ctx *context.APIContext) ([]*api.Repository, error) {
  49. accessibleRepos, err := ctx.User.GetRepositoryAccesses()
  50. if err != nil {
  51. return nil, err
  52. }
  53. i := 0
  54. repos := make([]*api.Repository, len(accessibleRepos))
  55. for repo, access := range accessibleRepos {
  56. repos[i] = repo.APIFormat(access)
  57. i++
  58. }
  59. return repos, nil
  60. }