diff options
| author | tjpcc <tjp@ctrl-c.club> | 2023-10-09 10:32:25 -0600 |
|---|---|---|
| committer | tjpcc <tjp@ctrl-c.club> | 2023-10-09 10:32:25 -0600 |
| commit | 3d02a271f4957a009c620a8209b41bf248345cce (patch) | |
| tree | ba67122fbf05e5861c217b70a7257a9a11e3d744 /gemini.go | |
| parent | 8e3f1e83c19001a61faf723e99ff385cbb275eeb (diff) | |
fix gemini git routingv1.1.1
Diffstat (limited to 'gemini.go')
| -rw-r--r-- | gemini.go | 32 |
1 files changed, 25 insertions, 7 deletions
@@ -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) + }) +} |
