summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authortjpcc <tjp@ctrl-c.club>2023-09-08 14:54:53 -0600
committertjpcc <tjp@ctrl-c.club>2023-09-08 14:54:53 -0600
commit1f519d05bfdf27814bcb9d4e81ed00b0c1068dd6 (patch)
treed9c42ad62827d5494661968b59e723602816134e /main.go
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/*.
Diffstat (limited to 'main.go')
-rw-r--r--main.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..12c5618
--- /dev/null
+++ b/main.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+ "log"
+ "os"
+
+ "tildegit.org/tjp/sliderule/gemini"
+ "tildegit.org/tjp/sliderule/logging"
+)
+
+func main() {
+ conf := configure()
+ gemTLS, err := gemini.FileTLS(conf.tlsCertFile, conf.tlsKeyFile)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ dropped, err := dropPrivileges()
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ ctx, _, info, warn, errlog := serverContext()
+
+ if !dropped {
+ warn.Log("msg", "dropping privileges to 'nobody' failed")
+ }
+
+ handler := logging.LogRequests(info)(geminiRouter(conf))
+ server, err := gemini.NewServer(
+ ctx,
+ conf.hostname,
+ "tcp",
+ "127.0.0.1:1965",
+ handler,
+ errlog,
+ gemTLS,
+ )
+ if err != nil {
+ errlog.Log("msg", "error building server", "error", err)
+ os.Exit(1)
+ }
+
+ if err := server.Serve(); err != nil {
+ errlog.Log("msg", "error serving gemini", "error", err)
+ os.Exit(1)
+ }
+}