From a5819d945ecd2e5bddb2ed45a1b98167e62300b3 Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Tue, 20 Jul 2021 21:58:07 +0100 Subject: [PATCH] Restore CORS on git smart http protocol 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 --- modules/web/route.go | 20 ++++++++++++++++++++ routers/web/web.go | 22 +++++++++++----------- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/modules/web/route.go b/modules/web/route.go index 319d08f5981c1..3c6513da626ce 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 7a47f479c0da3..9baef52962c9d 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)