diff options
Diffstat (limited to 'routes.go')
| -rw-r--r-- | routes.go | 46 |
1 files changed, 44 insertions, 2 deletions
@@ -21,12 +21,14 @@ import ( func geminiRouter(conf config) sr.Handler { fsys := os.DirFS(conf.geminiRoot) + privileged := tlsAuth(conf.privilegedUsers) + router := &sr.Router{} router.Route( "/*", gemini.GeminiOnly(true)(sr.FallthroughHandler( - fs.TitanUpload(tlsAuth(conf.uploaderFingerprints), conf.geminiRoot)(postUploadRedirect), + fs.TitanUpload(privileged, conf.geminiRoot)(postUploadRedirect), fs.GeminiFileHandler(fsys), fs.GeminiDirectoryDefault(fsys, "index.gmi"), fs.GeminiDirectoryListing(fsys, nil), @@ -35,7 +37,47 @@ func geminiRouter(conf config) sr.Handler { router.Route( "/cgi-bin/*", - gemini.GeminiOnly(false)(cgi.GeminiCGIDirectory("/cgi-bin/", "./cgi-bin/")), + gemini.GeminiOnly(false)(cgi.GeminiCGIDirectory( + "/cgi-bin/", + strings.Join([]string{".", strings.Trim(conf.geminiRoot, "/"), "cgi-bin"}, "/"), + )), + ) + + router.Route( + "/cgi-bin/private/*", + gemini.GeminiOnly(false)(tlsauth.GeminiAuth(privileged)( + cgi.GeminiCGIDirectory("/cgi-bin/private/", strings.Join([]string{ + ".", + strings.Trim(conf.geminiRoot, "/"), + "cgi-bin", + "private", + }, "/")), + )), + ) + + return router.Handler() +} + +func gopherRouter(conf config) sr.Handler { + fsys := os.DirFS(conf.gopherRoot) + + router := &sr.Router{} + + router.Route( + "/*", + sr.FallthroughHandler( + fs.GopherFileHandler(fsys), + fs.GopherDirectoryDefault(fsys, "index.gophermap"), + fs.GopherDirectoryListing(fsys, nil), + ), + ) + + router.Route( + "/cgi-bin/*", + cgi.GopherCGIDirectory( + "/cgi-bin/", + strings.Join([]string{".", strings.Trim(conf.gopherRoot, "/"), "cgi-bin"}, "/"), + ), ) return router.Handler() |
