summaryrefslogtreecommitdiff
path: root/internal/config
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-05-11 12:52:28 +0300
committerPaul Buetow <paul@buetow.org>2024-05-11 12:52:28 +0300
commit653057ac9d2ba6783233bc0f59a6a7ca111ad11c (patch)
treee5be6be1f6df5066885b73bf20d06acb42acc718 /internal/config
parent248e4919501a472b90505c0ada6a47113acd6688 (diff)
refactor server
refactor config
Diffstat (limited to 'internal/config')
-rw-r--r--internal/config/config.go66
-rw-r--r--internal/config/config_test.go8
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)
}