From 1f519d05bfdf27814bcb9d4e81ed00b0c1068dd6 Mon Sep 17 00:00:00 2001 From: tjpcc Date: Fri, 8 Sep 2023 14:54:53 -0600 Subject: Initial commit. A gemini server which drops privileges to the 'nobody' user, hosts files including directory listings (index.gmi or a default listing), and runs CGIs out of /cgi-bin/*. --- routes.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 routes.go (limited to 'routes.go') diff --git a/routes.go b/routes.go new file mode 100644 index 0000000..b367cd9 --- /dev/null +++ b/routes.go @@ -0,0 +1,31 @@ +package main + +import ( + "os" + + sr "tildegit.org/tjp/sliderule" + "tildegit.org/tjp/sliderule/contrib/cgi" + "tildegit.org/tjp/sliderule/contrib/fs" +) + +func geminiRouter(conf config) sr.Handler { + fsys := os.DirFS(conf.geminiRoot) + + router := &sr.Router{} + + router.Route( + "/*", + sr.FallthroughHandler( + fs.GeminiFileHandler(fsys), + fs.GeminiDirectoryDefault(fsys, "index.gmi"), + fs.GeminiDirectoryListing(fsys, nil), + ), + ) + + router.Route( + "/cgi-bin/*", + cgi.GeminiCGIDirectory("/cgi-bin/", "./cgi-bin/"), + ) + + return router.Handler() +} -- cgit v1.2.3