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/*. --- main.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 main.go (limited to 'main.go') 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) + } +} -- cgit v1.2.3