From 9a20e4b1da629a3ce1fc217304acd1a2a394341a Mon Sep 17 00:00:00 2001 From: tjpcc Date: Mon, 30 Oct 2023 17:27:46 -0600 Subject: add git support for spartan fixes #19 --- go.mod | 4 ++-- go.sum | 8 ++++---- spartan.go | 26 ++++++++++++++++++++++++-- 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 + }) +} -- cgit v1.2.3