summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortjpcc <tjp@ctrl-c.club>2023-10-30 17:27:46 -0600
committertjpcc <tjp@ctrl-c.club>2023-10-30 17:27:46 -0600
commit9a20e4b1da629a3ce1fc217304acd1a2a394341a (patch)
tree94ee6bd2e05a61c2b174771f722d3e3b242aeb85
parente492c9d98309d02d05c00f22caa541414d0853eb (diff)
add git support for spartan
fixes #19
-rw-r--r--go.mod4
-rw-r--r--go.sum8
-rw-r--r--spartan.go26
3 files changed, 30 insertions, 8 deletions
diff --git a/go.mod b/go.mod
index b9f8636..6b2b7e2 100644
--- a/go.mod
+++ b/go.mod
@@ -4,8 +4,8 @@ go 1.21.0
require (
github.com/go-kit/log v0.2.1
- tildegit.org/tjp/sliderule v1.4.2-0.20231030194212-634b82d24335
- tildegit.org/tjp/syw v0.9.2
+ tildegit.org/tjp/sliderule v1.5.0
+ tildegit.org/tjp/syw v0.9.3
)
require github.com/go-logfmt/logfmt v0.6.0 // indirect
diff --git a/go.sum b/go.sum
index 56f328c..649a7a2 100644
--- a/go.sum
+++ b/go.sum
@@ -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.2-0.20231030194212-634b82d24335 h1:PUtIcLWqK0QxSt50CzxoVeA68pCOcUa2FgW2STE2GDo=
-tildegit.org/tjp/sliderule v1.4.2-0.20231030194212-634b82d24335/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=
+tildegit.org/tjp/sliderule v1.5.0 h1:HA0ONmg3W7jqCWGqWXsxdqgnzZvScgad7NtRW16wxas=
+tildegit.org/tjp/sliderule v1.5.0/go.mod h1:opdo8E25iS9X9pNismM8U7pCH8XO0PdRIIhdADn8Uik=
+tildegit.org/tjp/syw v0.9.3 h1:ebtJpuWSjwyq1J9OLct1yzo0YqHveLDKJt3rif2Ornk=
+tildegit.org/tjp/syw v0.9.3/go.mod h1:cRpfBXFG3j26KadF0PUJgI8+mjSDnMRcXUga6dC4j2o=
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
+ })
+}