// NewApplication is the constructor for Application struct. func NewApplication() (*Application, error) { u, err := libunix.CurrentUser() if err != nil { return nil, err } dsn := libenv.EnvWithDefault("DATABASE_URL", fmt.Sprintf("postgres://%v@localhost:5432/go-bootstrap?sslmode=disable", u)) db, err := sqlx.Connect("postgres", dsn) if err != nil { return nil, err } cookieStoreSecret := libenv.EnvWithDefault("COOKIE_SECRET", "kvLePSAQkjetRLh3") app := &Application{} app.dsn = dsn app.db = db app.cookieStore = sessions.NewCookieStore([]byte(cookieStoreSecret)) return app, err }
func main() { app, err := NewApplication() if err != nil { logrus.Fatal(err.Error()) } middle, err := app.middlewareStruct() if err != nil { logrus.Fatal(err.Error()) } serverAddress := libenv.EnvWithDefault("HTTP_ADDR", ":8888") certFile := libenv.EnvWithDefault("HTTP_CERT_FILE", "") keyFile := libenv.EnvWithDefault("HTTP_KEY_FILE", "") drainIntervalString := libenv.EnvWithDefault("HTTP_DRAIN_INTERVAL", "1s") drainInterval, err := time.ParseDuration(drainIntervalString) if err != nil { logrus.Fatal(err.Error()) } srv := &graceful.Server{ Timeout: drainInterval, Server: &http.Server{Addr: serverAddress, Handler: middle}, } logrus.Infoln("Running HTTP server on " + serverAddress) if certFile != "" && keyFile != "" { err = srv.ListenAndServeTLS(certFile, keyFile) } else { err = srv.ListenAndServe() } if err != nil { logrus.Fatal(err.Error()) } }