summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2024-05-11 13:23:54 +0300
committerPaul Buetow <paul@buetow.org>2024-05-11 13:23:54 +0300
commit560b685505a43aa1a1365c1c3f7b3d0733676847 (patch)
tree9da7929d77587216eaf3632947683badcf710686 /internal
parent2337c4c11eda933f9c91b46defca63dc5557eb19 (diff)
branch out serverconfig
Diffstat (limited to 'internal')
-rw-r--r--internal/config/config.go40
-rw-r--r--internal/config/config_test.go10
-rw-r--r--internal/config/server/server.go41
-rw-r--r--internal/server/server.go6
4 files changed, 52 insertions, 45 deletions
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(),