From 560b685505a43aa1a1365c1c3f7b3d0733676847 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 11 May 2024 13:23:54 +0300 Subject: branch out serverconfig --- internal/config/config.go | 40 +++------------------------------------ internal/config/config_test.go | 10 +++++----- internal/config/server/server.go | 41 ++++++++++++++++++++++++++++++++++++++++ internal/server/server.go | 6 +++--- 4 files changed, 52 insertions(+), 45 deletions(-) create mode 100644 internal/config/server/server.go (limited to 'internal') diff --git a/internal/config/config.go b/internal/config/config.go index ad82b15..3dcc0e6 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -2,48 +2,14 @@ package config import ( "encoding/json" - "fmt" "io" - "log" "os" "strings" "unicode" ) -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"` -} - -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 +func FromFile[T any](configFile string) (T, error) { + var conf T file, err := os.Open(configFile) if err != nil { @@ -61,7 +27,7 @@ func newFromConfigFile(configFile string) (Config, error) { } // Set config from envoronment variable if present, e.g. hansWurst from GOS_HANS_WURST -func fromEnv(configKey string, defaultValue ...string) string { +func FromENV(configKey string, defaultValue ...string) string { envKey := camelToSnakeWithPrefix("GOS", configKey) if value := os.Getenv(envKey); value != "" { return value diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 1b133bd..5c4db88 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -20,14 +20,14 @@ func TestCamelToSnake(t *testing.T) { t.Logf("got '%s' as expected", expected) } -func TestFromEnv(t *testing.T) { +func TestFromENV(t *testing.T) { t.Parallel() os.Setenv("GOS_TEST_FROM_ENV", "foobarbaz") var ( expected = "foobarbaz" - got = fromEnv("testFromEnv") + got = FromENV("testFromEnv") ) if got != expected { @@ -37,21 +37,21 @@ func TestFromEnv(t *testing.T) { t.Logf("got '%s' as expected", expected) expected = "default value" - got = fromEnv("jajaja", expected) + got = FromENV("jajaja", expected) if got != expected { t.Errorf("got '%s' but expected '%s'", got, expected) return } t.Logf("got '%s' as expected", expected) - if got = fromEnv("jujuju"); got != "" { + if got = FromENV("jujuju"); got != "" { t.Errorf("got '%s' but expected empty string", got) return } t.Logf("got empty string as expected") expected = "casio g-shock" - got = fromEnv("watch", "", "", "", expected, "") + got = FromENV("watch", "", "", "", expected, "") if got != expected { t.Errorf("got '%s' but expected '%s'", got, expected) return diff --git a/internal/config/server/server.go b/internal/config/server/server.go new file mode 100644 index 0000000..6778b1b --- /dev/null +++ b/internal/config/server/server.go @@ -0,0 +1,41 @@ +package server + +import ( + "fmt" + "log" + "os" + + "codeberg.org/snonux/gos/internal/config" +) + +type ServerConfig 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"` +} + +func New(configFile string) (ServerConfig, error) { + conf, _ := config.FromFile[ServerConfig](configFile) + conf.ListenAddr = config.FromENV("ListenAddr", conf.ListenAddr, "localhost:8080") + conf.Partner = config.FromENV("Partner", conf.Partner) + conf.ApiKey = config.FromENV("ApiKey", conf.ApiKey) + conf.DataDir = config.FromENV("DataDir", conf.DataDir, "data") + conf.EmailTo = config.FromENV("EmailTo", conf.EmailTo) + conf.EmailFrom = config.FromENV("EmailFrom", conf.EmailFrom) + conf.SMTPServer = config.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 +} diff --git a/internal/server/server.go b/internal/server/server.go index 6013c1a..010b5b7 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -5,7 +5,7 @@ import ( "log" "net/http" - "codeberg.org/snonux/gos/internal/config" + config "codeberg.org/snonux/gos/internal/config/server" "codeberg.org/snonux/gos/internal/server/health" ) @@ -13,12 +13,12 @@ const HealthHandlerName = `healthHandler` type Server struct { Status health.Status - Conf config.Config + Conf config.ServerConfig } type HandlerFuncWithError func(http.ResponseWriter, *http.Request) error -func New(conf config.Config) Server { +func New(conf config.ServerConfig) Server { return Server{ Conf: conf, Status: health.NewStatus(), -- cgit v1.2.3