From 3d02a271f4957a009c620a8209b41bf248345cce Mon Sep 17 00:00:00 2001 From: tjpcc Date: Mon, 9 Oct 2023 10:32:25 -0600 Subject: fix gemini git routing --- gemini.go | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) (limited to 'gemini.go') diff --git a/gemini.go b/gemini.go index fd5dec5..051cafa 100644 --- a/gemini.go +++ b/gemini.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "strings" sr "tildegit.org/tjp/sliderule" "tildegit.org/tjp/sliderule/contrib/cgi" @@ -96,13 +97,7 @@ func addGeminiRoute(router *sr.Router, route RouteDirective) { return GeminiAuthMiddleware(route.Auth)(handler) }) case "git": - buildAndAddRoute(router, route, func(route RouteDirective) sr.Handler { - var handler sr.Handler = syw.GeminiRouter(route.FsPath, nil) - if route.Modifiers.AutoAtom { - handler = atomconv.Auto(handler) - } - return GeminiAuthMiddleware(route.Auth)(handler) - }) + addGeminiGitRoute(router, route) } } @@ -149,3 +144,26 @@ func addGeminiStaticRoute(router *sr.Router, route RouteDirective) { return handler }) } + +func addGeminiGitRoute(router *sr.Router, route RouteDirective) { + buildAndAddRoute(router, route, func(route RouteDirective) sr.Handler { + handler := sr.HandlerFunc(func(ctx context.Context, request *sr.Request) *sr.Response { + subrouter := syw.GeminiRouter(route.FsPath, nil) + + reqclone := cloneRequest(request) + reqclone.Path = strings.TrimPrefix(reqclone.Path, route.URLPath) + + fmt.Printf("original %s, relative %s\n", request.Path, reqclone.Path) + + handler, params := subrouter.Match(reqclone) + if handler == nil { + return nil + } + return handler.Handle(context.WithValue(ctx, sr.RouteParamsKey, params), request) + }) + if route.Modifiers.AutoAtom { + handler = atomconv.Auto(handler) + } + return GeminiAuthMiddleware(route.Auth)(handler) + }) +} -- cgit v1.2.3