diff options
| -rw-r--r-- | gemini.go | 32 | ||||
| -rw-r--r-- | go.mod | 4 | ||||
| -rw-r--r-- | go.sum | 8 |
3 files changed, 31 insertions, 13 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) + }) +} @@ -4,8 +4,8 @@ go 1.21.0 require ( github.com/go-kit/log v0.2.1 - tildegit.org/tjp/sliderule v1.4.0 - tildegit.org/tjp/syw v0.9.1 + tildegit.org/tjp/sliderule v1.4.1 + tildegit.org/tjp/syw v0.9.2 ) require github.com/go-logfmt/logfmt v0.6.0 // indirect @@ -10,7 +10,7 @@ github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKs github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -tildegit.org/tjp/sliderule v1.4.0 h1:upukklvJ2Jh781zb9AUjoLJtwFS1JeEMLaa+Dn9MwMk= -tildegit.org/tjp/sliderule v1.4.0/go.mod h1:opdo8E25iS9X9pNismM8U7pCH8XO0PdRIIhdADn8Uik= -tildegit.org/tjp/syw v0.9.1 h1:yciiupIOXP3HCql1MJ7u4fB8b4/WP8xA1nccwwRjmMM= -tildegit.org/tjp/syw v0.9.1/go.mod h1:Rb1MeYlKK8dcZivujzRvdo9DQhoQf6R4UToQP5KB6WI= +tildegit.org/tjp/sliderule v1.4.1 h1:L1evSiVqhiHSVgWBCFgDXhT30OZdWUHRq8CahCDkd+I= +tildegit.org/tjp/sliderule v1.4.1/go.mod h1:opdo8E25iS9X9pNismM8U7pCH8XO0PdRIIhdADn8Uik= +tildegit.org/tjp/syw v0.9.2 h1:bwLRXJqC5RHes2dfntgePHYnh6iIQC9FZpFBTReemQ0= +tildegit.org/tjp/syw v0.9.2/go.mod h1:Oo05KA7QibiXxoPh5jzpKUq/RG4U3nz7qs6QVitZw8I= |
