aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--integrations/api_repo_test.go21
-rw-r--r--public/swagger.v1.json18
-rw-r--r--routers/api/v1/api.go1
-rw-r--r--routers/api/v1/user/repo.go18
4 files changed, 57 insertions, 1 deletions
diff --git a/integrations/api_repo_test.go b/integrations/api_repo_test.go
index 8073f773ac..e89a6359ae 100644
--- a/integrations/api_repo_test.go
+++ b/integrations/api_repo_test.go
@@ -63,3 +63,24 @@ func TestAPIViewRepo(t *testing.T) {
assert.EqualValues(t, 1, repo.ID)
assert.EqualValues(t, "repo1", repo.Name)
}
+
+func TestAPIOrgRepos(t *testing.T) {
+ prepareTestEnv(t)
+ user := models.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User)
+ // User3 is an Org. Check their repos.
+ sourceOrg := models.AssertExistsAndLoadBean(t, &models.User{ID: 3}).(*models.User)
+ // Login as User2.
+ session := loginUser(t, user.Name)
+
+ req := NewRequestf(t, "GET", "/api/v1/orgs/%s/repos", sourceOrg.Name)
+ resp := session.MakeRequest(t, req, http.StatusOK)
+
+ var apiRepos []*api.Repository
+ DecodeJSON(t, resp, &apiRepos)
+ expectedLen := models.GetCount(t, models.Repository{OwnerID: sourceOrg.ID},
+ models.Cond("is_private = ?", false))
+ assert.Len(t, apiRepos, expectedLen)
+ for _, repo := range apiRepos {
+ assert.False(t, repo.Private)
+ }
+}
diff --git a/public/swagger.v1.json b/public/swagger.v1.json
index 68f8227933..3ce534d44f 100644
--- a/public/swagger.v1.json
+++ b/public/swagger.v1.json
@@ -187,6 +187,22 @@
}
}
},
+ "/orgs/{org}/repos": {
+ "get": {
+ "produces": [
+ "application/json"
+ ],
+ "operationId": "orgListRepos",
+ "responses": {
+ "200": {
+ "$ref": "#/responses/RepositoryList"
+ },
+ "500": {
+ "$ref": "#/responses/error"
+ }
+ }
+ }
+ },
"/repos/search": {
"get": {
"produces": [
@@ -1357,4 +1373,4 @@
}
}
}
-} \ No newline at end of file
+}
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index 8dda892955..bac5af7be6 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -458,6 +458,7 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Get("/user/orgs", reqToken(), org.ListMyOrgs)
m.Get("/users/:username/orgs", org.ListUserOrgs)
m.Group("/orgs/:orgname", func() {
+ m.Get("/repos", user.ListOrgRepos)
m.Combo("").Get(org.Get).
Patch(reqToken(), reqOrgOwnership(), bind(api.EditOrgOption{}), org.Edit)
m.Group("/members", func() {
diff --git a/routers/api/v1/user/repo.go b/routers/api/v1/user/repo.go
index c929da5e37..b4a4653faa 100644
--- a/routers/api/v1/user/repo.go
+++ b/routers/api/v1/user/repo.go
@@ -1,3 +1,7 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
package user
import (
@@ -80,3 +84,17 @@ func ListMyRepos(ctx *context.APIContext) {
}
ctx.JSON(200, &apiRepos)
}
+
+// ListOrgRepos - list the repositories of an organization.
+func ListOrgRepos(ctx *context.APIContext) {
+ // swagger:route GET /orgs/{org}/repos orgListRepos
+ //
+ // Produces:
+ // - application/json
+ //
+ // Responses:
+ // 200: RepositoryList
+ // 500: error
+
+ listUserRepos(ctx, ctx.Org.Organization)
+}