From 06ec0efd4f34e9c3b776b94ccc83ddfaf7eb55f6 Mon Sep 17 00:00:00 2001 From: tjpcc Date: Fri, 8 Sep 2023 14:54:55 -0600 Subject: apply GeminiOnly filter middleware and add support for titan uploads --- routes.go | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/routes.go b/routes.go index b367cd9..59e6ff4 100644 --- a/routes.go +++ b/routes.go @@ -1,11 +1,15 @@ package main import ( + "context" "os" + "strings" sr "tildegit.org/tjp/sliderule" "tildegit.org/tjp/sliderule/contrib/cgi" "tildegit.org/tjp/sliderule/contrib/fs" + "tildegit.org/tjp/sliderule/contrib/tlsauth" + "tildegit.org/tjp/sliderule/gemini" ) func geminiRouter(conf config) sr.Handler { @@ -15,17 +19,25 @@ func geminiRouter(conf config) sr.Handler { router.Route( "/*", - sr.FallthroughHandler( + gemini.GeminiOnly(true)(sr.FallthroughHandler( + fs.TitanUpload(tlsauth.Allow, conf.geminiRoot)(postUploadRedirect), fs.GeminiFileHandler(fsys), fs.GeminiDirectoryDefault(fsys, "index.gmi"), fs.GeminiDirectoryListing(fsys, nil), - ), + )), ) router.Route( "/cgi-bin/*", - cgi.GeminiCGIDirectory("/cgi-bin/", "./cgi-bin/"), + gemini.GeminiOnly(false)(cgi.GeminiCGIDirectory("/cgi-bin/", "./cgi-bin/")), ) return router.Handler() } + +var postUploadRedirect = sr.HandlerFunc(func(ctx context.Context, request *sr.Request) *sr.Response { + u := *request.URL + u.Path = strings.SplitN(u.Path, ";", 2)[0] + u.Scheme = "gemini" + return gemini.Redirect(u.String()) +}) -- cgit v1.2.3