diff options
| author | Paul Buetow <paul@buetow.org> | 2024-05-11 12:52:28 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-05-11 12:52:28 +0300 |
| commit | 653057ac9d2ba6783233bc0f59a6a7ca111ad11c (patch) | |
| tree | e5be6be1f6df5066885b73bf20d06acb42acc718 /internal/config | |
| parent | 248e4919501a472b90505c0ada6a47113acd6688 (diff) | |
refactor server
refactor config
Diffstat (limited to 'internal/config')
| -rw-r--r-- | internal/config/config.go | 66 | ||||
| -rw-r--r-- | internal/config/config_test.go | 8 |
2 files changed, 43 insertions, 31 deletions
diff --git a/internal/config/config.go b/internal/config/config.go index ab9ee7a..ad82b15 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -10,23 +10,41 @@ import ( "unicode" ) -type config struct { +type Config struct { + ListenAddr string `json:"ListenAddr,omitempty"` + Partner string `json:"Partner,omitempty"` + ApiKey string `json:"ApiKey,omitempty"` + DataDir string `json:"StateDir,omitempty"` EmailTo string `json:"EmailTo,omitempty"` EmailFrom string `json:"EmailFrom,omitempty"` SMTPServer string `json:"SMTPServer,omitempty"` - DataDir string `json:"StateDir,omitempty"` - Partner string `json:"Partner,omitempty"` } -func newConfig(configFile string) (config, error) { - conf := config{ - EmailTo: fromEnv("EmailTo"), - EmailFrom: fromEnv("EmailFrom"), - SMTPServer: fromEnv("SMTPServer"), - DataDir: fromEnv("DataDir", "data"), - Partner: fromEnv("Partner"), +func New(configFile string) (Config, error) { + conf, _ := newFromConfigFile(configFile) + conf.ListenAddr = fromEnv("ListenAddr", conf.ListenAddr, "localhost:8080") + conf.Partner = fromEnv("Partner", conf.Partner) + conf.ApiKey = fromEnv("ApiKey", conf.ApiKey) + conf.DataDir = fromEnv("DataDir", conf.DataDir, "data") + conf.EmailTo = fromEnv("EmailTo", conf.EmailTo) + conf.EmailFrom = fromEnv("EmailFrom", conf.EmailFrom) + conf.SMTPServer = fromEnv("SMTPServer", conf.SMTPServer) + + if conf.SMTPServer == "" { + hostname, err := os.Hostname() + if err != nil { + log.Fatal(err) + } + conf.SMTPServer = fmt.Sprintf("%s:25", hostname) + log.Println("Set SMTPServer to " + conf.SMTPServer) } + return conf, nil +} + +func newFromConfigFile(configFile string) (Config, error) { + var conf Config + file, err := os.Open(configFile) if err != nil { return conf, err @@ -39,25 +57,7 @@ func newConfig(configFile string) (config, error) { } err = json.Unmarshal(bytes, &conf) - if err != nil { - return conf, err - } - - if conf.SMTPServer == "" { - hostname, err := os.Hostname() - if err != nil { - log.Fatal(err) - } - conf.SMTPServer = fmt.Sprintf("%s:25", hostname) - log.Println("Set SMTPServer to " + conf.SMTPServer) - } - - if conf.DataDir == "" { - conf.DataDir = "data" - log.Println("Set data dir to " + conf.DataDir) - } - - return conf, nil + return conf, err } // Set config from envoronment variable if present, e.g. hansWurst from GOS_HANS_WURST @@ -67,9 +67,13 @@ func fromEnv(configKey string, defaultValue ...string) string { return value } - if len(defaultValue) > 0 { - return defaultValue[0] + // Use first non-empty default value. + for _, value := range defaultValue { + if value != "" { + return value + } } + return "" } diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 5c429c9..1b133bd 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -49,4 +49,12 @@ func TestFromEnv(t *testing.T) { return } t.Logf("got empty string as expected") + + expected = "casio g-shock" + got = fromEnv("watch", "", "", "", expected, "") + if got != expected { + t.Errorf("got '%s' but expected '%s'", got, expected) + return + } + t.Logf("got '%s' as expected", expected) } |
