Don't only list code-enabled repositories when using repository API (#30817)
We should be listing all repositories by default. Fixes #28483. (cherry picked from commit 9f0ef3621a3b63ccbe93f302a446b67dc54ad725) Conflict: - if ctx.IsSigned && ctx.Doer.IsAdmin || permission.UnitAccessMode(unit_model.TypeCode) >= perm.AccessModeRead { + if ctx.IsSigned && ctx.Doer.IsAdmin || permission.HasAccess() { because of https://codeberg.org/forgejo/forgejo/pulls/2001
This commit is contained in:
		
					parent
					
						
							
								6a4bc0289d
							
						
					
				
			
			
				commit
				
					
						e388822e9d
					
				
			
		
					 2 changed files with 35 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -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.HasAccess() {
 | 
			
		||||
			apiRepos = append(apiRepos, convert.ToRepo(ctx, repos[i], permission))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue