diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 87 |
1 files changed, 45 insertions, 42 deletions
@@ -4,11 +4,12 @@ import ( "context" "crypto/tls" "log" - "os" "sync" + sr "tildegit.org/tjp/sliderule" "tildegit.org/tjp/sliderule/finger" "tildegit.org/tjp/sliderule/gemini" + "tildegit.org/tjp/sliderule/gopher" "tildegit.org/tjp/sliderule/logging" ) @@ -19,75 +20,77 @@ func main() { log.Fatal(err) } - dropped, err := dropPrivileges() + ctx, _, info, warn, errlog := serverContext() + + gopherSrv, err := buildGopher(ctx, conf, info, errlog) if err != nil { log.Fatal(err) } - ctx, _, info, warn, errlog := serverContext() + fingerSrv, err := buildFinger(ctx, conf, info, errlog) + if err != nil { + log.Fatal(err) + } + dropped, err := dropPrivileges() + if err != nil { + log.Fatal(err) + } if !dropped { _ = warn.Log("msg", "dropping privileges to 'nobody' failed") } + gemSrv, err := buildGemini(ctx, conf, gemTLS, info, errlog) + if err != nil { + log.Fatal(err) + } + wg := &sync.WaitGroup{} - go startGemini(ctx, conf, wg, gemTLS, info, errlog) - go startFinger(ctx, conf, wg, info, errlog) - wg.Add(2) + + wg.Add(3) + go runServer(gemSrv, wg) + go runServer(gopherSrv, wg) + go runServer(fingerSrv, wg) wg.Wait() } -func startGemini( +func buildGemini( ctx context.Context, conf config, - wg *sync.WaitGroup, gemTLS *tls.Config, infolog logging.Logger, errlog logging.Logger, -) { - defer wg.Done() - +) (sr.Server, error) { handler := logging.LogRequests(infolog)(geminiRouter(conf)) - server, err := gemini.NewServer( - ctx, - conf.hostname, - "tcp", - "", - 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) - } + infolog.Log("msg", "starting gemini server", "gemini_root", conf.geminiRoot) + return gemini.NewServer(ctx, conf.hostname, "tcp", "", handler, errlog, gemTLS) } -func startFinger( +func buildGopher( ctx context.Context, conf config, - wg *sync.WaitGroup, infolog logging.Logger, errlog logging.Logger, -) { - defer wg.Done() +) (sr.Server, error) { + handler := logging.LogRequests(infolog)(gopherRouter(conf)) + infolog.Log("msg", "starting gopher server", "gopher_root", conf.gopherRoot) + return gopher.NewServer(ctx, conf.hostname, "tcp", "", handler, errlog) +} +func buildFinger( + ctx context.Context, + conf config, + infolog logging.Logger, + errlog logging.Logger, +) (sr.Server, error) { handler := logging.LogRequests(infolog)(fingerHandler(conf)) - server, err := finger.NewServer(ctx, conf.hostname, "tcp", "", handler, errlog) - if err != nil { - _ = errlog.Log("msg", "error building server", "error", err) - os.Exit(1) - } + infolog.Log("msg", "starting finger server", "finger_users", len(conf.fingerResponses)) + return finger.NewServer(ctx, conf.hostname, "tcp", "", handler, errlog) +} - if err := server.Serve(); err != nil { - _ = errlog.Log("msg", "error serving finger", "error", err) - os.Exit(1) - } +func runServer(server sr.Server, wg *sync.WaitGroup) error { + defer wg.Done() + return server.Serve() } |
