mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 00:11:04 +00:00 
			
		
		
		
	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 (
 | 
					import (
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"code.gitea.io/gitea/models/perm"
 | 
					 | 
				
			||||||
	access_model "code.gitea.io/gitea/models/perm/access"
 | 
						access_model "code.gitea.io/gitea/models/perm/access"
 | 
				
			||||||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
						repo_model "code.gitea.io/gitea/models/repo"
 | 
				
			||||||
	unit_model "code.gitea.io/gitea/models/unit"
 | 
					 | 
				
			||||||
	user_model "code.gitea.io/gitea/models/user"
 | 
						user_model "code.gitea.io/gitea/models/user"
 | 
				
			||||||
	api "code.gitea.io/gitea/modules/structs"
 | 
						api "code.gitea.io/gitea/modules/structs"
 | 
				
			||||||
	"code.gitea.io/gitea/routers/api/v1/utils"
 | 
						"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)
 | 
								ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
 | 
				
			||||||
			return
 | 
								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))
 | 
								apiRepos = append(apiRepos, convert.ToRepo(ctx, repos[i], permission))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,6 +13,7 @@ import (
 | 
				
			||||||
	"code.gitea.io/gitea/models/db"
 | 
						"code.gitea.io/gitea/models/db"
 | 
				
			||||||
	access_model "code.gitea.io/gitea/models/perm/access"
 | 
						access_model "code.gitea.io/gitea/models/perm/access"
 | 
				
			||||||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
						repo_model "code.gitea.io/gitea/models/repo"
 | 
				
			||||||
 | 
						unit_model "code.gitea.io/gitea/models/unit"
 | 
				
			||||||
	"code.gitea.io/gitea/models/unittest"
 | 
						"code.gitea.io/gitea/models/unittest"
 | 
				
			||||||
	user_model "code.gitea.io/gitea/models/user"
 | 
						user_model "code.gitea.io/gitea/models/user"
 | 
				
			||||||
	"code.gitea.io/gitea/modules/setting"
 | 
						"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) {
 | 
					func TestAPIGetRepoByIDUnauthorized(t *testing.T) {
 | 
				
			||||||
	defer tests.PrepareTestEnv(t)()
 | 
						defer tests.PrepareTestEnv(t)()
 | 
				
			||||||
	user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
 | 
						user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue