diff options
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) + }) +} |
