diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index 96e3830a2148a..36d0b02c8ee50 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -458,6 +458,9 @@ func RegisterRoutes(m *macaron.Macaron) { m.Combo("/:username").Get(org.IsMember). Delete(reqOrgOwnership(), org.DeleteMember) }) + m.Group("/repos", func() { + m.Get("", org.ListRepos) + }) m.Group("/public_members", func() { m.Get("", org.ListPublicMembers) m.Combo("/:username").Get(org.IsPublicMember). diff --git a/routers/api/v1/org/repo.go b/routers/api/v1/org/repo.go new file mode 100644 index 0000000000000..704bf7e1aaba9 --- /dev/null +++ b/routers/api/v1/org/repo.go @@ -0,0 +1,46 @@ +package org + +import ( + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/context" + api "code.gitea.io/sdk/gitea" +) + +// ListRepos list all of an organization's repositories. +func ListRepos(ctx *context.APIContext) { + // swagger:route GET /orgs/{org}/repos orgListRepos + // + // Produces: + // - application/json + // + // Responses: + // 200: RepositoryList + // 500: error + + var apiRepos []*api.Repository + if ctx.User != nil { + // Find all repos a user has access to within an org. + org := ctx.Org.Organization + reposEnv, err := org.AccessibleReposEnv(ctx.User.ID) + if err != nil { + ctx.Error(500, "AccessibleReposEnv", err) + return + } + repos, err := reposEnv.Repos(1, org.NumRepos) + if err != nil { + ctx.Error(500, "Repos", err) + return + } + // Convert to API repos. + apiRepos = make([]*api.Repository, len(repos)) + for i, repo := range repos { + accessLevel, err := models.AccessLevel(ctx.User.ID, repo) + if err != nil { + ctx.Error(500, "AccessLevel", err) + return + } + apiRepos[i] = repo.APIFormat(accessLevel) + } + } + ctx.JSON(200, &apiRepos) +}