aboutsummaryrefslogtreecommitdiff
path: root/routers/api/v1
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2017-02-18 23:37:16 -0500
committerUnknwon <u@gogs.io>2017-02-18 23:37:16 -0500
commitcd9b29ff3fe50396f3525bf03bce9f9f9556a2f6 (patch)
treece9085648b31265aa59841f1cec5bf2474f2d321 /routers/api/v1
parent50a7c3c20df2a57a72d76b2e3850e3eada3df80d (diff)
api: add list user and organization's repositories (#3984)
Diffstat (limited to 'routers/api/v1')
-rw-r--r--routers/api/v1/api.go4
-rw-r--r--routers/api/v1/repo/repo.go57
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,