Skip to content

Commit 28f6f7b

Browse files
zeripathlunny
andauthored
Restore CORS on git smart http protocol (#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> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
1 parent 49bd9a1 commit 28f6f7b

File tree

2 files changed

+31
-11
lines changed

2 files changed

+31
-11
lines changed

modules/web/route.go

+20
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,26 @@ func (r *Route) Get(pattern string, h ...interface{}) {
269269
r.R.Get(r.getPattern(pattern), Wrap(middlewares...))
270270
}
271271

272+
// Options delegate options method
273+
func (r *Route) Options(pattern string, h ...interface{}) {
274+
var middlewares = r.getMiddlewares(h)
275+
r.R.Options(r.getPattern(pattern), Wrap(middlewares...))
276+
}
277+
278+
// GetOptions delegate get and options method
279+
func (r *Route) GetOptions(pattern string, h ...interface{}) {
280+
var middlewares = r.getMiddlewares(h)
281+
r.R.Get(r.getPattern(pattern), Wrap(middlewares...))
282+
r.R.Options(r.getPattern(pattern), Wrap(middlewares...))
283+
}
284+
285+
// PostOptions delegate post and options method
286+
func (r *Route) PostOptions(pattern string, h ...interface{}) {
287+
var middlewares = r.getMiddlewares(h)
288+
r.R.Post(r.getPattern(pattern), Wrap(middlewares...))
289+
r.R.Options(r.getPattern(pattern), Wrap(middlewares...))
290+
}
291+
272292
// Head delegate head method
273293
func (r *Route) Head(pattern string, h ...interface{}) {
274294
var middlewares = r.getMiddlewares(h)

routers/web/web.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -1006,17 +1006,17 @@ func RegisterRoutes(m *web.Route) {
10061006
}, ignSignInAndCsrf, lfsServerEnabled)
10071007

10081008
m.Group("", func() {
1009-
m.Post("/git-upload-pack", repo.ServiceUploadPack)
1010-
m.Post("/git-receive-pack", repo.ServiceReceivePack)
1011-
m.Get("/info/refs", repo.GetInfoRefs)
1012-
m.Get("/HEAD", repo.GetTextFile("HEAD"))
1013-
m.Get("/objects/info/alternates", repo.GetTextFile("objects/info/alternates"))
1014-
m.Get("/objects/info/http-alternates", repo.GetTextFile("objects/info/http-alternates"))
1015-
m.Get("/objects/info/packs", repo.GetInfoPacks)
1016-
m.Get("/objects/info/{file:[^/]*}", repo.GetTextFile(""))
1017-
m.Get("/objects/{head:[0-9a-f]{2}}/{hash:[0-9a-f]{38}}", repo.GetLooseObject)
1018-
m.Get("/objects/pack/pack-{file:[0-9a-f]{40}}.pack", repo.GetPackFile)
1019-
m.Get("/objects/pack/pack-{file:[0-9a-f]{40}}.idx", repo.GetIdxFile)
1009+
m.PostOptions("/git-upload-pack", repo.ServiceUploadPack)
1010+
m.PostOptions("/git-receive-pack", repo.ServiceReceivePack)
1011+
m.GetOptions("/info/refs", repo.GetInfoRefs)
1012+
m.GetOptions("/HEAD", repo.GetTextFile("HEAD"))
1013+
m.GetOptions("/objects/info/alternates", repo.GetTextFile("objects/info/alternates"))
1014+
m.GetOptions("/objects/info/http-alternates", repo.GetTextFile("objects/info/http-alternates"))
1015+
m.GetOptions("/objects/info/packs", repo.GetInfoPacks)
1016+
m.GetOptions("/objects/info/{file:[^/]*}", repo.GetTextFile(""))
1017+
m.GetOptions("/objects/{head:[0-9a-f]{2}}/{hash:[0-9a-f]{38}}", repo.GetLooseObject)
1018+
m.GetOptions("/objects/pack/pack-{file:[0-9a-f]{40}}.pack", repo.GetPackFile)
1019+
m.GetOptions("/objects/pack/pack-{file:[0-9a-f]{40}}.idx", repo.GetIdxFile)
10201020
}, ignSignInAndCsrf)
10211021

10221022
m.Head("/tasks/trigger", repo.TriggerTask)

0 commit comments

Comments
 (0)