// New is the constructor for Application struct. func New() (*Application, error) { u, err := libunix.CurrentUser() if err != nil { return nil, err } dsn := libenv.EnvWithDefault("RESOURCED_MASTER_DSN", fmt.Sprintf("postgres://%v@localhost:5432/resourced-master?sslmode=disable", u)) db, err := sqlx.Connect("postgres", dsn) if err != nil { return nil, err } // As a user, you must provide your own secret // But make sure you keep using the same one, otherwise sessions will expire. cookieStoreSecret := libenv.EnvWithDefault("RESOURCED_MASTER_COOKIE_SECRET", "T0PS3CR3T") app := &Application{} app.Addr = libenv.EnvWithDefault("RESOURCED_MASTER_ADDR", ":55655") app.dsn = dsn app.db = db app.cookieStore = sessions.NewCookieStore([]byte(cookieStoreSecret)) app.WSTraffickers = wstrafficker.NewWSTraffickers() return app, err }
func main() { app, err := application.New() if err != nil { logrus.Fatal(err) } // Migrate up errs, ok := app.MigrateUp() if !ok { for _, err := range errs { logrus.Fatal(err) } os.Exit(1) } middle, err := app.MiddlewareStruct() if err != nil { logrus.Fatal(err) } certFile := libenv.EnvWithDefault("RESOURCED_MASTER_CERT_FILE", "") keyFile := libenv.EnvWithDefault("RESOURCED_MASTER_KEY_FILE", "") requestTimeoutString := libenv.EnvWithDefault("RESOURCED_MASTER_REQUEST_TIMEOUT", "1s") requestTimeout, err := time.ParseDuration(requestTimeoutString) if err != nil { logrus.Fatal(err) } srv := &graceful.Server{ Timeout: requestTimeout, Server: &http.Server{Addr: app.Addr, Handler: middle}, } logrus.WithFields(logrus.Fields{ "Addr": app.Addr, }).Info("Running HTTP server") if certFile != "" && keyFile != "" { srv.ListenAndServeTLS(certFile, keyFile) } else { srv.ListenAndServe() } }