Skip to content

Commit a5819d9

Browse files
committed
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 go-gitea#16350 Close go-gitea#16491 Signed-off-by: Andrew Thornton <art27@cantab.net>
1 parent 97381aa commit a5819d9

File tree

2 files changed

+31
-11
lines changed

2 files changed

+31
-11
lines changed

Diff for: 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)

Diff for: 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)