diff --git a/cmd/server/main.go b/cmd/server/main.go index b482bf9..a41407e 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -21,8 +21,18 @@ import ( func main() { _ = godotenv.Load() - listen := listenAddr() + st := openStore() + defer st.Close() + + uploader := spacesUploader() + logSpaces(uploader) + + handler := newHandler(st, uploader) + run(&http.Server{Addr: listenAddr(), Handler: handler}) +} + +func openStore() *store.Store { databaseURL := strings.TrimSpace(os.Getenv("DATABASE_URL")) if databaseURL == "" { log.Fatal("DATABASE_URL is required") @@ -31,16 +41,19 @@ func main() { if err != nil { log.Fatalf("database: %v", err) } - defer st.Close() log.Printf("database: postgres") + return st +} - uploader := spacesUploader() +func logSpaces(uploader blob.Uploader) { if uploader.Enabled() { log.Printf("avatars: digitalocean spaces") - } else { - log.Printf("avatars: uploads disabled (set SPACES_* to enable)") + return } + log.Printf("avatars: uploads disabled (set SPACES_* to enable)") +} +func newHandler(st *store.Store, uploader blob.Uploader) http.Handler { srv, err := web.New(st, st.SessionStore(), plumber.TemplateFS, plumber.StaticFS, web.Config{ AdminUsername: os.Getenv("ADMIN_USERNAME"), SecureCookie: os.Getenv("SECURE_COOKIE") == "1", @@ -49,11 +62,13 @@ func main() { if err != nil { log.Fatalf("server: %v", err) } + return srv.Handler() +} - httpSrv := &http.Server{Addr: listen, Handler: srv.Handler()} +func run(httpSrv *http.Server) { errCh := make(chan error, 1) go func() { - log.Printf("listening on %s", listen) + log.Printf("listening on %s", httpSrv.Addr) errCh <- httpSrv.ListenAndServe() }()