aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKemal Zebari <60799661+kemzeb@users.noreply.github.com>2024-05-03 00:58:31 -0700
committerGitHub <noreply@github.com>2024-05-03 15:58:31 +0800
commit9f0ef3621a3b63ccbe93f302a446b67dc54ad725 (patch)
treefb8ad7a7e72308998e5f8565644cd40c23106dea
parenta50026e2f30897904704895362da0fb12c7e5b26 (diff)
downloadgitea-9f0ef3621a3b63ccbe93f302a446b67dc54ad725.tar.gz
gitea-9f0ef3621a3b63ccbe93f302a446b67dc54ad725.zip
Don't only list code-enabled repositories when using repository API (#30817)
We should be listing all repositories by default. Fixes #28483.
-rw-r--r--routers/api/v1/user/repo.go4
-rw-r--r--tests/integration/api_repo_test.go34
2 files changed, 35 insertions, 3 deletions
diff --git a/routers/api/v1/user/repo.go b/routers/api/v1/user/repo.go
index 81f8e0f3fe..d0264d6b5a 100644
--- a/routers/api/v1/user/repo.go
+++ b/routers/api/v1/user/repo.go
@@ -6,10 +6,8 @@ package user
import (
"net/http"
- "code.gitea.io/gitea/models/perm"
access_model "code.gitea.io/gitea/models/perm/access"
repo_model "code.gitea.io/gitea/models/repo"
- unit_model "code.gitea.io/gitea/models/unit"
user_model "code.gitea.io/gitea/models/user"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/routers/api/v1/utils"
@@ -44,7 +42,7 @@ func listUserRepos(ctx *context.APIContext, u *user_model.User, private bool) {
ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
return
}
- if ctx.IsSigned && ctx.Doer.IsAdmin || permission.UnitAccessMode(unit_model.TypeCode) >= perm.AccessModeRead {
+ if ctx.IsSigned && ctx.Doer.IsAdmin || permission.HasAnyUnitAccess() {
apiRepos = append(apiRepos, convert.ToRepo(ctx, repos[i], permission))
}
}
diff --git a/tests/integration/api_repo_test.go b/tests/integration/api_repo_test.go
index f33827e58b..716da762e5 100644
--- a/tests/integration/api_repo_test.go
+++ b/tests/integration/api_repo_test.go
@@ -13,6 +13,7 @@ import (
"code.gitea.io/gitea/models/db"
access_model "code.gitea.io/gitea/models/perm/access"
repo_model "code.gitea.io/gitea/models/repo"
+ unit_model "code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/setting"
@@ -326,6 +327,39 @@ func TestAPIOrgRepos(t *testing.T) {
}
}
+// See issue #28483. Tests to make sure we consider more than just code unit-enabled repositories.
+func TestAPIOrgReposWithCodeUnitDisabled(t *testing.T) {
+ defer tests.PrepareTestEnv(t)()
+ repo21 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: "repo21"})
+ org3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo21.OwnerID})
+
+ // Disable code repository unit.
+ var units []unit_model.Type
+ units = append(units, unit_model.TypeCode)
+
+ if err := repo_service.UpdateRepositoryUnits(db.DefaultContext, repo21, nil, units); err != nil {
+ assert.Fail(t, "should have been able to delete code repository unit; failed to %v", err)
+ }
+ assert.False(t, repo21.UnitEnabled(db.DefaultContext, unit_model.TypeCode))
+
+ session := loginUser(t, "user2")
+ token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeReadOrganization)
+
+ req := NewRequestf(t, "GET", "/api/v1/orgs/%s/repos", org3.Name).
+ AddTokenAuth(token)
+
+ resp := MakeRequest(t, req, http.StatusOK)
+ var apiRepos []*api.Repository
+ DecodeJSON(t, resp, &apiRepos)
+
+ var repoNames []string
+ for _, r := range apiRepos {
+ repoNames = append(repoNames, r.Name)
+ }
+
+ assert.Contains(t, repoNames, repo21.Name)
+}
+
func TestAPIGetRepoByIDUnauthorized(t *testing.T) {
defer tests.PrepareTestEnv(t)()
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})