summaryrefslogtreecommitdiff
path: root/spartan.go
diff options
context:
space:
mode:
Diffstat (limited to 'spartan.go')
-rw-r--r--spartan.go26
1 files changed, 24 insertions, 2 deletions
diff --git a/spartan.go b/spartan.go
index c422908..61a0b66 100644
--- a/spartan.go
+++ b/spartan.go
@@ -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
+ })
+}