// NewApplication is the constructor for Application struct. // // If testing is true, connects to the "test" database. func NewApplication(testing bool) (*Application, error) { u, err := libunix.CurrentUser() if err != nil { return nil, err } dbname := "forty-thieves" if testing { dbname += "-test" } dsn := libenv.EnvWithDefault( "DSN", fmt.Sprintf("postgres://%v@localhost:5432/%s?sslmode=disable", u, dbname)) db, err := sqlx.Connect("postgres", dsn) if err != nil { return nil, err } cookieStoreSecret := libenv.EnvWithDefault("COOKIE_SECRET", "ittwiP92o0oi6P4i") app := &Application{} app.dsn = dsn app.db = db app.cookieStore = sessions.NewCookieStore([]byte(cookieStoreSecret)) return app, err }
func main() { app, err := NewApplication(false) if err != nil { logrus.Fatal(err.Error()) } logWriter := logrus.New().Writer() defer logWriter.Close() middle, err := app.middlewareStruct(logWriter) 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()) } }