diff options
author | Unknwon <u@gogs.io> | 2017-02-18 23:37:16 -0500 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2017-02-18 23:37:16 -0500 |
commit | cd9b29ff3fe50396f3525bf03bce9f9f9556a2f6 (patch) | |
tree | ce9085648b31265aa59841f1cec5bf2474f2d321 /routers/api/v1 | |
parent | 50a7c3c20df2a57a72d76b2e3850e3eada3df80d (diff) |
api: add list user and organization's repositories (#3984)
Diffstat (limited to 'routers/api/v1')
-rw-r--r-- | routers/api/v1/api.go | 4 | ||||
-rw-r--r-- | routers/api/v1/repo/repo.go | 57 |
2 files changed, 48 insertions, 13 deletions
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 63cf97dc..2ab1af3d 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -222,10 +222,12 @@ func RegisterRoutes(m *macaron.Macaron) { Delete(user.DeletePublicKey) }) - m.Combo("/issues", reqToken()).Get(repo.ListUserIssues) + m.Combo("/issues").Get(repo.ListUserIssues) }, reqToken()) // Repositories + m.Get("/users/:username/repos", reqToken(), repo.ListUserRepositories) + m.Get("/orgs/:org/repos", reqToken(), repo.ListOrgRepositories) m.Combo("/user/repos", reqToken()).Get(repo.ListMyRepos). Post(bind(api.CreateRepoOption{}), repo.Create) m.Post("/org/:org/repos", reqToken(), bind(api.CreateRepoOption{}), repo.CreateOrgRepo) diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index 34c162fb..1fd0af3d 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -77,32 +77,53 @@ func Search(ctx *context.APIContext) { }) } -// https://github.com/gogits/go-gogs-client/wiki/Repositories#list-your-repositories -func ListMyRepos(ctx *context.APIContext) { - ownRepos, err := models.GetUserRepositories(&models.UserRepoOptions{ - UserID: ctx.User.ID, - Private: true, - Page: 1, - PageSize: ctx.User.NumRepos, - }) +func listUserRepositories(ctx *context.APIContext, username string) { + user, err := models.GetUserByName(username) if err != nil { - ctx.Error(500, "GetRepositories", err) + ctx.NotFoundOrServerError("GetUserByName", models.IsErrUserNotExist, err) return } - numOwnRepos := len(ownRepos) - accessibleRepos, err := ctx.User.GetRepositoryAccesses() + // Only list public repositories if user requests someone else's repository list, + // or an organization isn't a member of. + var ownRepos []*models.Repository + if user.IsOrganization() { + ownRepos, _, err = user.GetUserRepositories(ctx.User.ID, 1, user.NumRepos) + } else { + ownRepos, err = models.GetUserRepositories(&models.UserRepoOptions{ + UserID: user.ID, + Private: ctx.User.ID == user.ID, + Page: 1, + PageSize: user.NumRepos, + }) + } + if err != nil { + ctx.Error(500, "GetUserRepositories", err) + return + } + + if ctx.User.ID != user.ID { + repos := make([]*api.Repository, len(ownRepos)) + for i := range ownRepos { + repos[i] = ownRepos[i].APIFormat(&api.Permission{true, true, true}) + } + ctx.JSON(200, &repos) + return + } + + accessibleRepos, err := user.GetRepositoryAccesses() if err != nil { ctx.Error(500, "GetRepositoryAccesses", err) return } + numOwnRepos := len(ownRepos) repos := make([]*api.Repository, numOwnRepos+len(accessibleRepos)) for i := range ownRepos { repos[i] = ownRepos[i].APIFormat(&api.Permission{true, true, true}) } - i := numOwnRepos + i := numOwnRepos for repo, access := range accessibleRepos { repos[i] = repo.APIFormat(&api.Permission{ Admin: access >= models.ACCESS_MODE_ADMIN, @@ -115,6 +136,18 @@ func ListMyRepos(ctx *context.APIContext) { ctx.JSON(200, &repos) } +func ListMyRepos(ctx *context.APIContext) { + listUserRepositories(ctx, ctx.User.Name) +} + +func ListUserRepositories(ctx *context.APIContext) { + listUserRepositories(ctx, ctx.Params(":username")) +} + +func ListOrgRepositories(ctx *context.APIContext) { + listUserRepositories(ctx, ctx.Params(":org")) +} + func CreateUserRepo(ctx *context.APIContext, owner *models.User, opt api.CreateRepoOption) { repo, err := models.CreateRepository(owner, models.CreateRepoOptions{ Name: opt.Name, |