mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Backport #13511 Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
		| @@ -184,14 +184,14 @@ func reqToken() macaron.Handler { | ||||
| 			ctx.RequireCSRF() | ||||
| 			return | ||||
| 		} | ||||
| 		ctx.Context.Error(http.StatusUnauthorized) | ||||
| 		ctx.Error(http.StatusUnauthorized, "reqToken", "token is required") | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func reqBasicAuth() macaron.Handler { | ||||
| 	return func(ctx *context.APIContext) { | ||||
| 		if !ctx.Context.IsBasicAuth { | ||||
| 			ctx.Context.Error(http.StatusUnauthorized) | ||||
| 			ctx.Error(http.StatusUnauthorized, "reqBasicAuth", "basic auth required") | ||||
| 			return | ||||
| 		} | ||||
| 		ctx.CheckForOTP() | ||||
| @@ -200,9 +200,9 @@ func reqBasicAuth() macaron.Handler { | ||||
|  | ||||
| // reqSiteAdmin user should be the site admin | ||||
| func reqSiteAdmin() macaron.Handler { | ||||
| 	return func(ctx *context.Context) { | ||||
| 	return func(ctx *context.APIContext) { | ||||
| 		if !ctx.IsUserSiteAdmin() { | ||||
| 			ctx.Error(http.StatusForbidden) | ||||
| 			ctx.Error(http.StatusForbidden, "reqSiteAdmin", "user should be the site admin") | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| @@ -210,9 +210,9 @@ func reqSiteAdmin() macaron.Handler { | ||||
|  | ||||
| // reqOwner user should be the owner of the repo or site admin. | ||||
| func reqOwner() macaron.Handler { | ||||
| 	return func(ctx *context.Context) { | ||||
| 	return func(ctx *context.APIContext) { | ||||
| 		if !ctx.IsUserRepoOwner() && !ctx.IsUserSiteAdmin() { | ||||
| 			ctx.Error(http.StatusForbidden) | ||||
| 			ctx.Error(http.StatusForbidden, "reqOwner", "user should be the owner of the repo") | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| @@ -220,9 +220,9 @@ func reqOwner() macaron.Handler { | ||||
|  | ||||
| // reqAdmin user should be an owner or a collaborator with admin write of a repository, or site admin | ||||
| func reqAdmin() macaron.Handler { | ||||
| 	return func(ctx *context.Context) { | ||||
| 	return func(ctx *context.APIContext) { | ||||
| 		if !ctx.IsUserRepoAdmin() && !ctx.IsUserSiteAdmin() { | ||||
| 			ctx.Error(http.StatusForbidden) | ||||
| 			ctx.Error(http.StatusForbidden, "reqAdmin", "user should be an owner or a collaborator with admin write of a repository") | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| @@ -230,9 +230,9 @@ func reqAdmin() macaron.Handler { | ||||
|  | ||||
| // reqRepoWriter user should have a permission to write to a repo, or be a site admin | ||||
| func reqRepoWriter(unitTypes ...models.UnitType) macaron.Handler { | ||||
| 	return func(ctx *context.Context) { | ||||
| 	return func(ctx *context.APIContext) { | ||||
| 		if !ctx.IsUserRepoWriter(unitTypes) && !ctx.IsUserRepoAdmin() && !ctx.IsUserSiteAdmin() { | ||||
| 			ctx.Error(http.StatusForbidden) | ||||
| 			ctx.Error(http.StatusForbidden, "reqRepoWriter", "user should have a permission to write to a repo") | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| @@ -240,9 +240,9 @@ func reqRepoWriter(unitTypes ...models.UnitType) macaron.Handler { | ||||
|  | ||||
| // reqRepoReader user should have specific read permission or be a repo admin or a site admin | ||||
| func reqRepoReader(unitType models.UnitType) macaron.Handler { | ||||
| 	return func(ctx *context.Context) { | ||||
| 	return func(ctx *context.APIContext) { | ||||
| 		if !ctx.IsUserRepoReaderSpecific(unitType) && !ctx.IsUserRepoAdmin() && !ctx.IsUserSiteAdmin() { | ||||
| 			ctx.Error(http.StatusForbidden) | ||||
| 			ctx.Error(http.StatusForbidden, "reqRepoReader", "user should have specific read permission or be a repo admin or a site admin") | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| @@ -250,9 +250,9 @@ func reqRepoReader(unitType models.UnitType) macaron.Handler { | ||||
|  | ||||
| // reqAnyRepoReader user should have any permission to read repository or permissions of site admin | ||||
| func reqAnyRepoReader() macaron.Handler { | ||||
| 	return func(ctx *context.Context) { | ||||
| 	return func(ctx *context.APIContext) { | ||||
| 		if !ctx.IsUserRepoReaderAny() && !ctx.IsUserSiteAdmin() { | ||||
| 			ctx.Error(http.StatusForbidden) | ||||
| 			ctx.Error(http.StatusForbidden, "reqAnyRepoReader", "user should have any permission to read repository or permissions of site admin") | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| @@ -495,7 +495,6 @@ func mustNotBeArchived(ctx *context.APIContext) { | ||||
| } | ||||
|  | ||||
| // RegisterRoutes registers all v1 APIs routes to web application. | ||||
| // FIXME: custom form error response | ||||
| func RegisterRoutes(m *macaron.Macaron) { | ||||
| 	bind := binding.Bind | ||||
|  | ||||
| @@ -628,7 +627,7 @@ func RegisterRoutes(m *macaron.Macaron) { | ||||
| 			m.Group("/:username/:reponame", func() { | ||||
| 				m.Combo("").Get(reqAnyRepoReader(), repo.Get). | ||||
| 					Delete(reqToken(), reqOwner(), repo.Delete). | ||||
| 					Patch(reqToken(), reqAdmin(), bind(api.EditRepoOption{}), context.RepoRef(), repo.Edit) | ||||
| 					Patch(reqToken(), reqAdmin(), bind(api.EditRepoOption{}), context.RepoRefForAPI(), repo.Edit) | ||||
| 				m.Post("/transfer", reqOwner(), bind(api.TransferRepoOption{}), repo.Transfer) | ||||
| 				m.Combo("/notifications"). | ||||
| 					Get(reqToken(), notify.ListRepoNotifications). | ||||
| @@ -640,7 +639,7 @@ func RegisterRoutes(m *macaron.Macaron) { | ||||
| 						m.Combo("").Get(repo.GetHook). | ||||
| 							Patch(bind(api.EditHookOption{}), repo.EditHook). | ||||
| 							Delete(repo.DeleteHook) | ||||
| 						m.Post("/tests", context.RepoRef(), repo.TestHook) | ||||
| 						m.Post("/tests", context.RepoRefForAPI(), repo.TestHook) | ||||
| 					}) | ||||
| 					m.Group("/git", func() { | ||||
| 						m.Combo("").Get(repo.ListGitHooks) | ||||
| @@ -657,14 +656,14 @@ func RegisterRoutes(m *macaron.Macaron) { | ||||
| 						Put(reqAdmin(), bind(api.AddCollaboratorOption{}), repo.AddCollaborator). | ||||
| 						Delete(reqAdmin(), repo.DeleteCollaborator) | ||||
| 				}, reqToken()) | ||||
| 				m.Get("/raw/*", context.RepoRefByType(context.RepoRefAny), reqRepoReader(models.UnitTypeCode), repo.GetRawFile) | ||||
| 				m.Get("/raw/*", context.RepoRefForAPI(), reqRepoReader(models.UnitTypeCode), repo.GetRawFile) | ||||
| 				m.Get("/archive/*", reqRepoReader(models.UnitTypeCode), repo.GetArchive) | ||||
| 				m.Combo("/forks").Get(repo.ListForks). | ||||
| 					Post(reqToken(), reqRepoReader(models.UnitTypeCode), bind(api.CreateForkOption{}), repo.CreateFork) | ||||
| 				m.Group("/branches", func() { | ||||
| 					m.Get("", repo.ListBranches) | ||||
| 					m.Get("/*", context.RepoRefByType(context.RepoRefBranch), repo.GetBranch) | ||||
| 					m.Delete("/*", reqRepoWriter(models.UnitTypeCode), context.RepoRefByType(context.RepoRefBranch), repo.DeleteBranch) | ||||
| 					m.Get("/*", repo.GetBranch) | ||||
| 					m.Delete("/*", context.ReferencesGitRepo(false), reqRepoWriter(models.UnitTypeCode), repo.DeleteBranch) | ||||
| 				}, reqRepoReader(models.UnitTypeCode)) | ||||
| 				m.Group("/branch_protections", func() { | ||||
| 					m.Get("", repo.ListBranchProtections) | ||||
| @@ -785,7 +784,7 @@ func RegisterRoutes(m *macaron.Macaron) { | ||||
| 					}) | ||||
| 				}, reqRepoReader(models.UnitTypeReleases)) | ||||
| 				m.Post("/mirror-sync", reqToken(), reqRepoWriter(models.UnitTypeCode), repo.MirrorSync) | ||||
| 				m.Get("/editorconfig/:filename", context.RepoRef(), reqRepoReader(models.UnitTypeCode), repo.GetEditorconfig) | ||||
| 				m.Get("/editorconfig/:filename", context.RepoRefForAPI(), reqRepoReader(models.UnitTypeCode), repo.GetEditorconfig) | ||||
| 				m.Group("/pulls", func() { | ||||
| 					m.Combo("").Get(bind(api.ListPullRequestsOptions{}), repo.ListPullRequests). | ||||
| 						Post(reqToken(), mustNotBeArchived, bind(api.CreatePullRequestOption{}), repo.CreatePullRequest) | ||||
| @@ -827,9 +826,9 @@ func RegisterRoutes(m *macaron.Macaron) { | ||||
| 					}) | ||||
| 					m.Get("/refs", repo.GetGitAllRefs) | ||||
| 					m.Get("/refs/*", repo.GetGitRefs) | ||||
| 					m.Get("/trees/:sha", context.RepoRef(), repo.GetTree) | ||||
| 					m.Get("/blobs/:sha", context.RepoRef(), repo.GetBlob) | ||||
| 					m.Get("/tags/:sha", context.RepoRef(), repo.GetTag) | ||||
| 					m.Get("/trees/:sha", context.RepoRefForAPI(), repo.GetTree) | ||||
| 					m.Get("/blobs/:sha", context.RepoRefForAPI(), repo.GetBlob) | ||||
| 					m.Get("/tags/:sha", context.RepoRefForAPI(), repo.GetTag) | ||||
| 				}, reqRepoReader(models.UnitTypeCode)) | ||||
| 				m.Group("/contents", func() { | ||||
| 					m.Get("", repo.GetContentsList) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user