mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 18:12:20 +01:00 
			
		
		
		
	Do some missing checks (#28423)
This commit is contained in:
		
							parent
							
								
									4e879fed90
								
							
						
					
					
						commit
						717d0f5934
					
				| @ -790,6 +790,24 @@ func verifyAuthWithOptions(options *common.VerifyOptions) func(ctx *context.APIC | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func individualPermsChecker(ctx *context.APIContext) { | ||||
| 	// org permissions have been checked in context.OrgAssignment(), but individual permissions haven't been checked. | ||||
| 	if ctx.ContextUser.IsIndividual() { | ||||
| 		switch { | ||||
| 		case ctx.ContextUser.Visibility == api.VisibleTypePrivate: | ||||
| 			if ctx.Doer == nil || (ctx.ContextUser.ID != ctx.Doer.ID && !ctx.Doer.IsAdmin) { | ||||
| 				ctx.NotFound("Visit Project", nil) | ||||
| 				return | ||||
| 			} | ||||
| 		case ctx.ContextUser.Visibility == api.VisibleTypeLimited: | ||||
| 			if ctx.Doer == nil { | ||||
| 				ctx.NotFound("Visit Project", nil) | ||||
| 				return | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // check for and warn against deprecated authentication options | ||||
| func checkDeprecatedAuthMethods(ctx *context.APIContext) { | ||||
| 	if ctx.FormString("token") != "" || ctx.FormString("access_token") != "" { | ||||
| @ -899,7 +917,7 @@ func Routes() *web.Route { | ||||
| 				}, reqSelfOrAdmin(), reqBasicOrRevProxyAuth()) | ||||
| 
 | ||||
| 				m.Get("/activities/feeds", user.ListUserActivityFeeds) | ||||
| 			}, context_service.UserAssignmentAPI()) | ||||
| 			}, context_service.UserAssignmentAPI(), individualPermsChecker) | ||||
| 		}, tokenRequiresScopes(auth_model.AccessTokenScopeCategoryUser)) | ||||
| 
 | ||||
| 		// Users (requires user scope) | ||||
|  | ||||
| @ -796,6 +796,24 @@ func registerRoutes(m *web.Route) { | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	individualPermsChecker := func(ctx *context.Context) { | ||||
| 		// org permissions have been checked in context.OrgAssignment(), but individual permissions haven't been checked. | ||||
| 		if ctx.ContextUser.IsIndividual() { | ||||
| 			switch { | ||||
| 			case ctx.ContextUser.Visibility == structs.VisibleTypePrivate: | ||||
| 				if ctx.Doer == nil || (ctx.ContextUser.ID != ctx.Doer.ID && !ctx.Doer.IsAdmin) { | ||||
| 					ctx.NotFound("Visit Project", nil) | ||||
| 					return | ||||
| 				} | ||||
| 			case ctx.ContextUser.Visibility == structs.VisibleTypeLimited: | ||||
| 				if ctx.Doer == nil { | ||||
| 					ctx.NotFound("Visit Project", nil) | ||||
| 					return | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// ***** START: Organization ***** | ||||
| 	m.Group("/org", func() { | ||||
| 		m.Group("/{org}", func() { | ||||
| @ -976,11 +994,11 @@ func registerRoutes(m *web.Route) { | ||||
| 					return | ||||
| 				} | ||||
| 			}) | ||||
| 		}) | ||||
| 		}, reqUnitAccess(unit.TypeProjects, perm.AccessModeRead, true), individualPermsChecker) | ||||
| 
 | ||||
| 		m.Group("", func() { | ||||
| 			m.Get("/code", user.CodeSearch) | ||||
| 		}, reqUnitAccess(unit.TypeCode, perm.AccessModeRead, false)) | ||||
| 		}, reqUnitAccess(unit.TypeCode, perm.AccessModeRead, false), individualPermsChecker) | ||||
| 	}, ignSignIn, context_service.UserAssignmentWeb(), context.OrgAssignment()) // for "/{username}/-" (packages, projects, code) | ||||
| 
 | ||||
| 	m.Group("/{username}/{reponame}", func() { | ||||
|  | ||||
							
								
								
									
										23
									
								
								tests/integration/project_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								tests/integration/project_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| // Copyright 2023 The Gitea Authors. All rights reserved. | ||||
| // SPDX-License-Identifier: MIT | ||||
| 
 | ||||
| package integration | ||||
| 
 | ||||
| import ( | ||||
| 	"net/http" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"code.gitea.io/gitea/tests" | ||||
| ) | ||||
| 
 | ||||
| func TestPrivateRepoProject(t *testing.T) { | ||||
| 	defer tests.PrepareTestEnv(t)() | ||||
| 
 | ||||
| 	// not logged in user | ||||
| 	req := NewRequest(t, "GET", "/user31/-/projects") | ||||
| 	MakeRequest(t, req, http.StatusNotFound) | ||||
| 
 | ||||
| 	sess := loginUser(t, "user1") | ||||
| 	req = NewRequest(t, "GET", "/user31/-/projects") | ||||
| 	sess.MakeRequest(t, req, http.StatusOK) | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user