diff options
| author | tjpcc <tjp@ctrl-c.club> | 2023-10-30 17:27:46 -0600 |
|---|---|---|
| committer | tjpcc <tjp@ctrl-c.club> | 2023-10-30 17:27:46 -0600 |
| commit | 9a20e4b1da629a3ce1fc217304acd1a2a394341a (patch) | |
| tree | 94ee6bd2e05a61c2b174771f722d3e3b242aeb85 /spartan.go | |
| parent | e492c9d98309d02d05c00f22caa541414d0853eb (diff) | |
add git support for spartan
fixes #19
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 + }) +} |
