summaryrefslogtreecommitdiff
path: root/routes.go
diff options
context:
space:
mode:
Diffstat (limited to 'routes.go')
-rw-r--r--routes.go18
1 files 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())
+})