aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2021-07-21 15:03:02 +0100
committerGitHub <noreply@github.com>2021-07-21 15:03:02 +0100
commit1f5011dff77d4f3eb2f6ab4627b05435441de06a (patch)
tree8d5b02bb90d7e1fd6a9c7456419086f192e6f5b3
parentcf9aeca5081d92b5d21594e41725aaf0f82534c6 (diff)
downloadgitea-1f5011dff77d4f3eb2f6ab4627b05435441de06a.tar.gz
gitea-1f5011dff77d4f3eb2f6ab4627b05435441de06a.zip
Restore CORS on git smart http protocol (#16496) (#16506)
Backport #16496 Unfortunately the chi changes have resulted in the CORS headers for the git smart http protocol going missing. This is mostly because the OPTIONS method is not being handled by httpBase anymore. This PR adds a GetOptions, PostOptions and Options methods to web handler to allow OPTIONS method requests to still reach the httpBase function. Fix #16350 Close #16491 Signed-off-by: Andrew Thornton <art27@cantab.net>
-rw-r--r--modules/web/route.go20
-rw-r--r--routers/web/web.go22
2 files changed, 31 insertions, 11 deletions
diff --git a/modules/web/route.go b/modules/web/route.go
index 319d08f598..3c6513da62 100644
--- a/modules/web/route.go
+++ b/modules/web/route.go
@@ -269,6 +269,26 @@ func (r *Route) Get(pattern string, h ...interface{}) {
r.R.Get(r.getPattern(pattern), Wrap(middlewares...))
}
+// Options delegate options method
+func (r *Route) Options(pattern string, h ...interface{}) {
+ var middlewares = r.getMiddlewares(h)
+ r.R.Options(r.getPattern(pattern), Wrap(middlewares...))
+}
+
+// GetOptions delegate get and options method
+func (r *Route) GetOptions(pattern string, h ...interface{}) {
+ var middlewares = r.getMiddlewares(h)
+ r.R.Get(r.getPattern(pattern), Wrap(middlewares...))
+ r.R.Options(r.getPattern(pattern), Wrap(middlewares...))
+}
+
+// PostOptions delegate post and options method
+func (r *Route) PostOptions(pattern string, h ...interface{}) {
+ var middlewares = r.getMiddlewares(h)
+ r.R.Post(r.getPattern(pattern), Wrap(middlewares...))
+ r.R.Options(r.getPattern(pattern), Wrap(middlewares...))
+}
+
// Head delegate head method
func (r *Route) Head(pattern string, h ...interface{}) {
var middlewares = r.getMiddlewares(h)
diff --git a/routers/web/web.go b/routers/web/web.go
index 7a47f479c0..9baef52962 100644
--- a/routers/web/web.go
+++ b/routers/web/web.go
@@ -1006,17 +1006,17 @@ func RegisterRoutes(m *web.Route) {
}, ignSignInAndCsrf, lfsServerEnabled)
m.Group("", func() {
- m.Post("/git-upload-pack", repo.ServiceUploadPack)
- m.Post("/git-receive-pack", repo.ServiceReceivePack)
- m.Get("/info/refs", repo.GetInfoRefs)
- m.Get("/HEAD", repo.GetTextFile("HEAD"))
- m.Get("/objects/info/alternates", repo.GetTextFile("objects/info/alternates"))
- m.Get("/objects/info/http-alternates", repo.GetTextFile("objects/info/http-alternates"))
- m.Get("/objects/info/packs", repo.GetInfoPacks)
- m.Get("/objects/info/{file:[^/]*}", repo.GetTextFile(""))
- m.Get("/objects/{head:[0-9a-f]{2}}/{hash:[0-9a-f]{38}}", repo.GetLooseObject)
- m.Get("/objects/pack/pack-{file:[0-9a-f]{40}}.pack", repo.GetPackFile)
- m.Get("/objects/pack/pack-{file:[0-9a-f]{40}}.idx", repo.GetIdxFile)
+ m.PostOptions("/git-upload-pack", repo.ServiceUploadPack)
+ m.PostOptions("/git-receive-pack", repo.ServiceReceivePack)
+ m.GetOptions("/info/refs", repo.GetInfoRefs)
+ m.GetOptions("/HEAD", repo.GetTextFile("HEAD"))
+ m.GetOptions("/objects/info/alternates", repo.GetTextFile("objects/info/alternates"))
+ m.GetOptions("/objects/info/http-alternates", repo.GetTextFile("objects/info/http-alternates"))
+ m.GetOptions("/objects/info/packs", repo.GetInfoPacks)
+ m.GetOptions("/objects/info/{file:[^/]*}", repo.GetTextFile(""))
+ m.GetOptions("/objects/{head:[0-9a-f]{2}}/{hash:[0-9a-f]{38}}", repo.GetLooseObject)
+ m.GetOptions("/objects/pack/pack-{file:[0-9a-f]{40}}.pack", repo.GetPackFile)
+ m.GetOptions("/objects/pack/pack-{file:[0-9a-f]{40}}.idx", repo.GetIdxFile)
}, ignSignInAndCsrf)
m.Head("/tasks/trigger", repo.TriggerTask)