Allow administrator to create repository for any organization (#4368)

This commit is contained in:
Lauris BH 2018-07-05 02:51:02 +03:00 committed by Jonas Franz
parent 4eae810d63
commit 69e2ab1611
2 changed files with 32 additions and 7 deletions

View file

@ -262,3 +262,26 @@ func TestAPIRepoMigrate(t *testing.T) {
session.MakeRequest(t, req, testCase.expectedStatus) session.MakeRequest(t, req, testCase.expectedStatus)
} }
} }
func TestAPIOrgRepoCreate(t *testing.T) {
testCases := []struct {
ctxUserID int64
orgName, repoName string
expectedStatus int
}{
{ctxUserID: 1, orgName: "user3", repoName: "repo-admin", expectedStatus: http.StatusCreated},
{ctxUserID: 2, orgName: "user3", repoName: "repo-own", expectedStatus: http.StatusCreated},
{ctxUserID: 2, orgName: "user6", repoName: "repo-bad-org", expectedStatus: http.StatusForbidden},
}
prepareTestEnv(t)
for _, testCase := range testCases {
user := models.AssertExistsAndLoadBean(t, &models.User{ID: testCase.ctxUserID}).(*models.User)
session := loginUser(t, user.Name)
req := NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/org/%s/repos", testCase.orgName), &api.CreateRepoOption{
Name: testCase.repoName,
})
session.MakeRequest(t, req, testCase.expectedStatus)
}
}

View file

@ -257,6 +257,7 @@ func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) {
return return
} }
if !ctx.User.IsAdmin {
isOwner, err := org.IsOwnedBy(ctx.User.ID) isOwner, err := org.IsOwnedBy(ctx.User.ID)
if err != nil { if err != nil {
ctx.ServerError("IsOwnedBy", err) ctx.ServerError("IsOwnedBy", err)
@ -265,6 +266,7 @@ func CreateOrgRepo(ctx *context.APIContext, opt api.CreateRepoOption) {
ctx.Error(403, "", "Given user is not owner of organization.") ctx.Error(403, "", "Given user is not owner of organization.")
return return
} }
}
CreateUserRepo(ctx, org, opt) CreateUserRepo(ctx, org, opt)
} }