From 49f00e066595e276811f1a407a27acac1790fe38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojt=C4=9Bch=20K=C3=A1n=C4=9B?= Date: Sun, 25 Apr 2021 14:33:23 +0200 Subject: [PATCH] Accept basic configuration through environment variables --- cmd/web/main.go | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/cmd/web/main.go b/cmd/web/main.go index 0c691cc..4a89a45 100644 --- a/cmd/web/main.go +++ b/cmd/web/main.go @@ -5,6 +5,7 @@ import ( "html/template" "log" "net/http" + "net/url" "os" "time" "vkane.cz/tinyquiz/pkg/model" @@ -31,6 +32,40 @@ func setDefaultTemplateData(td *templateData) { } func main() { + var addr string + if env, ok := os.LookupEnv("TINYQUIZ_LISTEN"); ok { + addr = env + } else { + addr = "[::1]:8080" + } + + var pgConnectionUri url.URL + pgConnectionUri.Scheme = "postgresql" + pgConnectionUri.Path = "/" + pgQuery := pgConnectionUri.Query() + if env, ok := os.LookupEnv("TINYQUIZ_PG_HOST"); ok { + pgQuery.Set("host", env) + } else { + pgQuery.Set("host", "127.0.0.1") + } + if env, ok := os.LookupEnv("TINYQUIZ_PG_DBNAME"); ok { + pgQuery.Set("dbname", env) + } else { + pgQuery.Set("dbname", "tinyquiz") + } + if env, ok := os.LookupEnv("TINYQUIZ_PG_USER"); ok { + pgQuery.Set("user", env) + } + if env, ok := os.LookupEnv("TINYQUIZ_PG_PASSWORD"); ok { + pgQuery.Set("password", env) + } + if _, ok := os.LookupEnv("TINYQUIZ_PG_ENABLESSL"); ok { + pgQuery.Set("sslmode", "verify-full") + } else { + pgQuery.Set("sslmode", "disable") + } + pgConnectionUri.RawQuery = pgQuery.Encode() + infoLog := log.New(os.Stdout, "INFO\t", log.Ldate|log.Ltime) errorLog := log.New(os.Stderr, "ERROR\t", log.Ldate|log.Ltime|log.Lshortfile) @@ -46,7 +81,7 @@ func main() { errorLog.Fatal(err) } - if c, err := ent.Open("postgres", "host='127.0.0.1' sslmode=disable dbname=tinyquiz"); err == nil { + if c, err := ent.Open("postgres", pgConnectionUri.String()); err == nil { if err := c.Schema.Create(context.Background(), migrate.WithDropIndex(true), migrate.WithDropColumn(true)); err != nil { errorLog.Fatal(err) } @@ -77,11 +112,11 @@ func main() { mux.ServeFiles("/static/*filepath", http.Dir("./ui/static/")) var srv = &http.Server{ - Addr: "127.0.0.1:8080", + Addr: addr, ErrorLog: errorLog, Handler: mux, } - log.Println("Starting server on :8080") + log.Printf("Starting server on %s\n", addr) err := srv.ListenAndServe() log.Fatal(err) }