summaryrefslogtreecommitdiff
path: root/gemini.go
diff options
context:
space:
mode:
authortjpcc <tjp@ctrl-c.club>2023-10-09 10:32:25 -0600
committertjpcc <tjp@ctrl-c.club>2023-10-09 10:32:25 -0600
commit3d02a271f4957a009c620a8209b41bf248345cce (patch)
treeba67122fbf05e5861c217b70a7257a9a11e3d744 /gemini.go
parent8e3f1e83c19001a61faf723e99ff385cbb275eeb (diff)
fix gemini git routingv1.1.1
Diffstat (limited to 'gemini.go')
-rw-r--r--gemini.go32
1 files changed, 25 insertions, 7 deletions
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)
+ })
+}