diff options
Diffstat (limited to 'spartan.go')
| -rw-r--r-- | spartan.go | 26 |
1 files changed, 24 insertions, 2 deletions
@@ -4,14 +4,15 @@ import ( "context" "errors" "fmt" + "strings" sr "tildegit.org/tjp/sliderule" "tildegit.org/tjp/sliderule/contrib/cgi" "tildegit.org/tjp/sliderule/contrib/fs" - "tildegit.org/tjp/sliderule/gemini" "tildegit.org/tjp/sliderule/gemini/gemtext/atomconv" "tildegit.org/tjp/sliderule/logging" "tildegit.org/tjp/sliderule/spartan" + "tildegit.org/tjp/syw" ) func buildSpartanServers(servers []Server, config *Configuration) ([]sr.Server, error) { @@ -83,7 +84,7 @@ func addSpartanRoute(router *sr.Router, route RouteDirective) { return cgi.SpartanCGIDirectory(route.FsPath, route.URLPath, route.Modifiers.ExecCmd) }) case "git": - //TODO + addSpartanGitRoute(router, route) } } @@ -117,3 +118,24 @@ func addSpartanStaticRoute(router *sr.Router, route RouteDirective) { return handler }) } + +func addSpartanGitRoute(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.SpartanRouter(route.FsPath, route.Modifiers.Templates) + + reqclone := cloneRequest(request) + reqclone.Path = strings.TrimPrefix(reqclone.Path, route.URLPath) + + 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 handler + }) +} |
