From a644e95044c08b9aac6b57236d23913430b9a6b2 Mon Sep 17 00:00:00 2001 From: hacki Date: Thu, 5 Oct 2023 23:18:02 +0200 Subject: [PATCH] :goal_net: handled unhandled errors + moved default config from code to .env file --- .env | 7 +++++++ config.go | 42 +++++++++++++++++++++++------------------- go.mod | 6 +++++- main.go | 11 +++++++++-- 4 files changed, 44 insertions(+), 22 deletions(-) diff --git a/.env b/.env index e69de29..0e99fe4 100644 --- a/.env +++ b/.env @@ -0,0 +1,7 @@ +PLAKKEN_INTERFACE=0.0.0.0 +PLAKKEN_PORT=3000 +PLAKKEN_REDIS_ADDR=localhost:6379 +PLAKKEN_REDIS_USER= +PLAKKEN_REDIS_PASSWORD= +PLAKKEN_REDIS_DB=0 +PLAKKEN_REDIS_URL_LEN=5 diff --git a/config.go b/config.go index 3126aeb..d9c0ab4 100644 --- a/config.go +++ b/config.go @@ -1,6 +1,8 @@ package main import ( + "github.com/joho/godotenv" + "log" "os" "strconv" ) @@ -15,38 +17,40 @@ type config struct { urlLength int } -func setConfig() config { - host := os.Getenv("PLAKKEN_HOST") +func getConfig() config { + err := godotenv.Load() + if err != nil { + log.Fatalf("Error loading .env file: %v", err) + } port := os.Getenv("PLAKKEN_PORT") - if port == "" { - port = "3000" - } redisAddr := os.Getenv("PLAKKEN_REDIS_ADDR") - if redisAddr == "" { - redisAddr = "localhost:6379" + db := os.Getenv("PLAKKEN_REDIS_DB") + uLen := os.Getenv("PLAKKEN_REDIS_URL_LEN") + + if port == "" || redisAddr == "" { + log.Fatal("Missing or invalid PLAKKEN_PORT or PLAKKEN_REDIS_ADDR") } - redisUser := os.Getenv("PLAKKEN_REDIS_USER") - redisPassword := os.Getenv("PLAKKEN_REDIS_PASSWORD") - redisDB, err := strconv.Atoi(os.Getenv("PLAKKEN_REDIS_DB")) + redisDB, err := strconv.Atoi(db) if err != nil { - redisDB = 0 + log.Fatal("Invalid PLAKKEN_REDIS_DB") } - urlLength, err := strconv.Atoi("PLAKKEN_URL_LENGTH") + urlLen, err := strconv.Atoi(uLen) if err != nil { - urlLength = 3 + log.Fatal("Invalid PLAKKEN_REDIS_URL_LEN") } - s := config{ - host: host, + + conf := config{ + host: os.Getenv("PLAKKEN_INTERFACE"), port: port, redisAddr: redisAddr, - redisUser: redisUser, - redisPassword: redisPassword, + redisUser: os.Getenv("PLAKKEN_REDIS_USER"), + redisPassword: os.Getenv("PLAKKEN_REDIS_PASSWORD"), redisDB: redisDB, - urlLength: urlLength, + urlLength: urlLen, } - return s + return conf } diff --git a/go.mod b/go.mod index 4996e79..8331b11 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,12 @@ module plakken go 1.21 +require ( + github.com/joho/godotenv v1.5.1 + github.com/redis/go-redis/v9 v9.2.1 +) + require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/redis/go-redis/v9 v9.2.1 // indirect ) diff --git a/main.go b/main.go index d169ef9..f3370c7 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "fmt" "io" + "log" "net/http" "strings" ) @@ -42,12 +43,18 @@ func handleRequest(w http.ResponseWriter, r *http.Request) { } func main() { - currentConfig = setConfig() + currentConfig = getConfig() listen := currentConfig.host + ":" + currentConfig.port http.HandleFunc("/", handleRequest) + if currentConfig.host == "" { + fmt.Println("Listening on port " + listen) + } else { + fmt.Println("Listening on " + listen) + } + err := http.ListenAndServe(listen, nil) if err != nil { - fmt.Println(err) + log.Fatal(err) } }