feat: vendor gitea 1.16.2
This commit is contained in:
@@ -32,6 +32,7 @@ import (
|
||||
"code.gitea.io/gitea/routers/api/packages/rpm"
|
||||
"code.gitea.io/gitea/routers/api/packages/rubygems"
|
||||
"code.gitea.io/gitea/routers/api/packages/swift"
|
||||
"code.gitea.io/gitea/routers/api/packages/terraform"
|
||||
"code.gitea.io/gitea/routers/api/packages/vagrant"
|
||||
"code.gitea.io/gitea/services/auth"
|
||||
"code.gitea.io/gitea/services/context"
|
||||
@@ -88,21 +89,26 @@ func reqPackageAccess(accessMode perm.AccessMode) func(ctx *context.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
func verifyAuth(r *web.Router, authMethods []auth.Method) {
|
||||
type verifyAuthOptions struct {
|
||||
afterAuthCallback func(ctx *context.Context, err error)
|
||||
}
|
||||
|
||||
func verifyAuth(r *web.Router, authMethods []auth.Method, opts verifyAuthOptions) {
|
||||
if setting.Service.EnableReverseProxyAuth {
|
||||
authMethods = append(authMethods, &auth.ReverseProxy{})
|
||||
}
|
||||
authGroup := auth.NewGroup(authMethods...)
|
||||
|
||||
r.Use(func(ctx *context.Context) {
|
||||
r.AfterRouting(func(ctx *context.Context) {
|
||||
var err error
|
||||
ctx.Doer, err = authGroup.Verify(ctx.Req, ctx.Resp, ctx, ctx.Session)
|
||||
if err != nil {
|
||||
ctx.IsSigned = ctx.Doer != nil
|
||||
if opts.afterAuthCallback != nil {
|
||||
opts.afterAuthCallback(ctx, err)
|
||||
} else if err != nil {
|
||||
log.Error("Failed to verify user: %v", err)
|
||||
ctx.HTTPError(http.StatusUnauthorized, "Failed to authenticate user")
|
||||
return
|
||||
}
|
||||
ctx.IsSigned = ctx.Doer != nil
|
||||
})
|
||||
}
|
||||
|
||||
@@ -111,15 +117,15 @@ func verifyAuth(r *web.Router, authMethods []auth.Method) {
|
||||
func CommonRoutes() *web.Router {
|
||||
r := web.NewRouter()
|
||||
|
||||
r.Use(context.PackageContexter())
|
||||
r.AfterRouting(context.PackageContexter())
|
||||
|
||||
verifyAuth(r, []auth.Method{
|
||||
&auth.OAuth2{},
|
||||
&auth.Basic{},
|
||||
&nuget.Auth{},
|
||||
&conan.Auth{},
|
||||
&Auth{},
|
||||
&chef.Auth{},
|
||||
})
|
||||
}, verifyAuthOptions{})
|
||||
|
||||
r.Group("/{username}", func() {
|
||||
r.Group("/alpine", func() {
|
||||
@@ -467,9 +473,10 @@ func CommonRoutes() *web.Router {
|
||||
g.MatchPath("HEAD", "/<group:*>/repodata/<filename>", rpm.CheckRepositoryFileExistence)
|
||||
g.MatchPath("GET", "/<group:*>/repodata/<filename>", rpm.GetRepositoryFile)
|
||||
g.MatchPath("PUT", "/<group:*>/upload", reqPackageAccess(perm.AccessModeWrite), rpm.UploadPackageFile)
|
||||
g.MatchPath("POST", "/<group:*>/package/<name>/<version>/errata", reqPackageAccess(perm.AccessModeWrite), rpm.UploadErrata)
|
||||
// this URL pattern is only used internally in the RPM index, it is generated by us, the filename part is not really used (can be anything)
|
||||
g.MatchPath("HEAD,GET", "/<group:*>/package/<name>/<version>/<architecture>", rpm.DownloadPackageFile)
|
||||
g.MatchPath("HEAD,GET", "/<group:*>/package/<name>/<version>/<architecture>/<filename>", rpm.DownloadPackageFile)
|
||||
g.MatchPath("HEAD,GET", "/<group:*>/package/<name>/<version>/<architecture>", rpm.DownloadPackageFile)
|
||||
g.MatchPath("DELETE", "/<group:*>/package/<name>/<version>/<architecture>", reqPackageAccess(perm.AccessModeWrite), rpm.DeletePackageFile)
|
||||
}, reqPackageAccess(perm.AccessModeRead))
|
||||
|
||||
@@ -509,6 +516,21 @@ func CommonRoutes() *web.Router {
|
||||
r.Get("/identifiers", swift.CheckAcceptMediaType(swift.AcceptJSON), swift.LookupPackageIdentifiers)
|
||||
}, reqPackageAccess(perm.AccessModeRead))
|
||||
})
|
||||
// See https://docs.gitlab.com/ci/jobs/fine_grained_permissions/#terraform-state-endpoints
|
||||
// For endpoint and permission reference
|
||||
r.Group("/terraform/state/{name}", func() {
|
||||
r.Get("", terraform.GetTerraformState)
|
||||
r.Get("/versions/{serial}", terraform.GetTerraformStateBySerial)
|
||||
r.Group("", func() {
|
||||
r.Post("", terraform.UploadState)
|
||||
r.Delete("", terraform.DeleteState)
|
||||
r.Delete("/versions/{serial}", terraform.DeleteStateBySerial)
|
||||
}, reqPackageAccess(perm.AccessModeWrite))
|
||||
r.Group("/lock", func() {
|
||||
r.Post("", terraform.LockState)
|
||||
r.Delete("", terraform.UnlockState)
|
||||
}, reqPackageAccess(perm.AccessModeWrite))
|
||||
}, reqPackageAccess(perm.AccessModeRead))
|
||||
r.Group("/vagrant", func() {
|
||||
r.Group("/authenticate", func() {
|
||||
r.Get("", vagrant.CheckAuthenticate)
|
||||
@@ -533,11 +555,19 @@ func CommonRoutes() *web.Router {
|
||||
func ContainerRoutes() *web.Router {
|
||||
r := web.NewRouter()
|
||||
|
||||
r.Use(context.PackageContexter())
|
||||
r.AfterRouting(context.PackageContexter())
|
||||
|
||||
verifyAuth(r, []auth.Method{
|
||||
&auth.Basic{},
|
||||
&container.Auth{},
|
||||
// container auth requires token, so container.Authenticate issues a Ghost user token for anonymous access
|
||||
&Auth{AllowGhostUser: true},
|
||||
}, verifyAuthOptions{
|
||||
afterAuthCallback: func(ctx *context.Context, err error) {
|
||||
if err != nil {
|
||||
log.Error("Failed to verify container user: %v", err)
|
||||
container.APIUnauthorizedError(ctx)
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
// TODO: Content Discovery / References (not implemented yet)
|
||||
|
||||
Reference in New Issue
Block a user