Skip to content

Commit 6e43061

Browse files
authored
chore/refactor: configs (#150)
1 parent 6ee54ce commit 6e43061

File tree

6 files changed

+79
-37
lines changed

6 files changed

+79
-37
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM alpine:latest
1+
FROM alpine:3.22
22
RUN apk --no-cache add ca-certificates
33

44
ARG IMAGE_TAG

go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
module github.com/codeshelldev/secured-signal-api
22

3-
go 1.25.4
3+
go 1.25.5
44

5-
require github.com/codeshelldev/gotl v0.0.2
5+
require github.com/codeshelldev/gotl v0.0.4-30
66

7-
require go.uber.org/zap v1.27.0 // indirect
7+
require go.uber.org/zap v1.27.1 // indirect
88

99
require (
1010
github.com/fsnotify/fsnotify v1.9.0 // indirect
@@ -19,5 +19,5 @@ require (
1919
github.com/mitchellh/reflectwalk v1.0.2 // indirect
2020
go.uber.org/multierr v1.11.0 // indirect
2121
go.yaml.in/yaml/v3 v3.0.4 // indirect
22-
golang.org/x/sys v0.38.0 // indirect
22+
golang.org/x/sys v0.39.0 // indirect
2323
)

go.sum

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,29 @@
1-
github.com/codeshelldev/gotl v0.0.2 h1:PQbipYHut3DNvwcrdkQmIGo2p6X6a889Glmba/KIeFQ=
2-
github.com/codeshelldev/gotl v0.0.2/go.mod h1:OzawxKcFw9QEgbeR5H2UXryhYeeLo8xSLme1r8viE+U=
1+
github.com/codeshelldev/gotl v0.0.4-18 h1:Uv7803qOcaVI7zVyBmadX2SCObHvbO9LBcBUNWa0Ejg=
2+
github.com/codeshelldev/gotl v0.0.4-18/go.mod h1:Mfb+Lb+DV3DUXdA1sixJb2pLawaJGGFFeC29gUZQLcg=
3+
github.com/codeshelldev/gotl v0.0.4-19 h1:dshnBkR7F8BvzVD2aakk8yFKWB7aZZbAA4TjOLrzyaA=
4+
github.com/codeshelldev/gotl v0.0.4-19/go.mod h1:Mfb+Lb+DV3DUXdA1sixJb2pLawaJGGFFeC29gUZQLcg=
5+
github.com/codeshelldev/gotl v0.0.4-20 h1:B7tTiiDiCpr/WnkK8O6jj2Q+GIzykNgX4qsvTLWyRzQ=
6+
github.com/codeshelldev/gotl v0.0.4-20/go.mod h1:Mfb+Lb+DV3DUXdA1sixJb2pLawaJGGFFeC29gUZQLcg=
7+
github.com/codeshelldev/gotl v0.0.4-21 h1:umeAIi56fmAyWw5fz5eXnrje6pAS1nqlDlKrXGhdp9k=
8+
github.com/codeshelldev/gotl v0.0.4-21/go.mod h1:Mfb+Lb+DV3DUXdA1sixJb2pLawaJGGFFeC29gUZQLcg=
9+
github.com/codeshelldev/gotl v0.0.4-22 h1:wfPxZa5B2HX5rhZlbz3Yl2uukNUGko3ayFVPDcA3rmA=
10+
github.com/codeshelldev/gotl v0.0.4-22/go.mod h1:Mfb+Lb+DV3DUXdA1sixJb2pLawaJGGFFeC29gUZQLcg=
11+
github.com/codeshelldev/gotl v0.0.4-23 h1:A83kFtHLO8ryPxTsH0bXGsx+upzpDOooPLygCePeD6Y=
12+
github.com/codeshelldev/gotl v0.0.4-23/go.mod h1:Mfb+Lb+DV3DUXdA1sixJb2pLawaJGGFFeC29gUZQLcg=
13+
github.com/codeshelldev/gotl v0.0.4-24 h1:XwOlOA1OKjpCuBG4jWe51aVYYghtgPCBPy03F/UYFcc=
14+
github.com/codeshelldev/gotl v0.0.4-24/go.mod h1:Mfb+Lb+DV3DUXdA1sixJb2pLawaJGGFFeC29gUZQLcg=
15+
github.com/codeshelldev/gotl v0.0.4-25 h1:79FIwopXMuKPqYAE/G1dlso5v5LYnREgAmQCfURjYxM=
16+
github.com/codeshelldev/gotl v0.0.4-25/go.mod h1:Mfb+Lb+DV3DUXdA1sixJb2pLawaJGGFFeC29gUZQLcg=
17+
github.com/codeshelldev/gotl v0.0.4-26 h1:qT+ybh/bauRLE4irt45oAV14mCrkmXBG/zeZqryj3Mo=
18+
github.com/codeshelldev/gotl v0.0.4-26/go.mod h1:Mfb+Lb+DV3DUXdA1sixJb2pLawaJGGFFeC29gUZQLcg=
19+
github.com/codeshelldev/gotl v0.0.4-27 h1:SV8Oad50uYpwMSdLpS6uOkJlSHrvSKi0KBe0Sf+0TQU=
20+
github.com/codeshelldev/gotl v0.0.4-27/go.mod h1:Mfb+Lb+DV3DUXdA1sixJb2pLawaJGGFFeC29gUZQLcg=
21+
github.com/codeshelldev/gotl v0.0.4-28 h1:Q1lWa0hcvRp1jVJmWicGNsQyupBy/s7N8gi++Jgvf4E=
22+
github.com/codeshelldev/gotl v0.0.4-28/go.mod h1:Mfb+Lb+DV3DUXdA1sixJb2pLawaJGGFFeC29gUZQLcg=
23+
github.com/codeshelldev/gotl v0.0.4-29 h1:c1fRnCQsP7DgqyRgYE2+9jg7FlgGsVAdFbeHX1gxe5A=
24+
github.com/codeshelldev/gotl v0.0.4-29/go.mod h1:Mfb+Lb+DV3DUXdA1sixJb2pLawaJGGFFeC29gUZQLcg=
25+
github.com/codeshelldev/gotl v0.0.4-30 h1:Gtbebmea9vZlwajfHtiUwSEVyX1xjJWLbsCL6eKKO30=
26+
github.com/codeshelldev/gotl v0.0.4-30/go.mod h1:rDkJma6eQSRfCr7ieX9/esn3/uAWNzjHfpjlr9j6FFk=
327
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
428
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
529
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
@@ -34,12 +58,14 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
3458
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
3559
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
3660
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
37-
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
38-
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
61+
go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc=
62+
go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
3963
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
4064
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
4165
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
4266
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
67+
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
68+
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
4369
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
4470
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
4571
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

internals/config/loader.go

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,20 @@ import (
1515
)
1616

1717
var ENV *structure.ENV = &structure.ENV{
18-
CONFIG_PATH: os.Getenv("CONFIG_PATH"),
19-
DEFAULTS_PATH: os.Getenv("DEFAULTS_PATH"),
20-
TOKENS_DIR: os.Getenv("TOKENS_DIR"),
21-
FAVICON_PATH: os.Getenv("FAVICON_PATH"),
22-
CONFIGS: map[string]*structure.CONFIG{},
23-
INSECURE: false,
18+
CONFIG_PATH: os.Getenv("CONFIG_PATH"),
19+
DEFAULTS_PATH: os.Getenv("DEFAULTS_PATH"),
20+
TOKENS_DIR: os.Getenv("TOKENS_DIR"),
21+
FAVICON_PATH: os.Getenv("FAVICON_PATH"),
22+
INSECURE: false,
23+
24+
CONFIGS: map[string]*structure.CONFIG{},
2425
}
2526

2627
var DEFAULT *structure.CONFIG
2728

2829
var defaultsConf *configutils.Config
2930
var userConf *configutils.Config
31+
var envConf *configutils.Config
3032
var tokenConf *configutils.Config
3133

3234
var mainConf *configutils.Config
@@ -42,32 +44,38 @@ func Load() {
4244

4345
LoadTokens()
4446

45-
userConf.LoadEnv(normalizeEnv)
47+
NormalizeConfig("", defaultsConf)
48+
NormalizeConfig("config", userConf)
4649

47-
NormalizeConfig(defaultsConf)
48-
NormalizeConfig(userConf)
49-
50-
NormalizeTokens()
50+
envConf.LoadEnv(normalizeEnv)
5151

52+
NormalizeConfig("env", envConf)
53+
54+
userConf.MergeLayers(envConf.Layer)
55+
5256
mainConf.MergeLayers(defaultsConf.Layer, userConf.Layer)
5357

5458
mainConf.TemplateConfig()
5559

56-
InitTokens()
60+
NormalizeTokens()
61+
62+
InitConfig()
5763

58-
InitEnv()
64+
InitTokens()
5965

6066
log.Info("Finished Loading Configuration")
6167
}
6268

6369
func Log() {
64-
log.Dev("Loaded Config:", mainConf.Layer.All())
65-
log.Dev("Loaded Token Configs:", tokenConf.Layer.All())
70+
log.Dev("Loaded Config:", mainConf.Layer.Get(""))
71+
log.Dev("Loaded Token Configs:", tokenConf.Layer.Get(""))
72+
log.Dev("Parsed Configs: ", ENV)
6673
}
6774

6875
func Clear() {
6976
defaultsConf = configutils.New()
7077
userConf = configutils.New()
78+
envConf = configutils.New()
7179
tokenConf = configutils.New()
7280
mainConf = configutils.New()
7381
}
@@ -85,11 +93,11 @@ func LowercaseKeys(config *configutils.Config) {
8593
config.Load(data, "")
8694
}
8795

88-
func NormalizeConfig(config *configutils.Config) {
89-
Normalize(config, "", &structure.CONFIG{})
96+
func NormalizeConfig(id string, config *configutils.Config) {
97+
Normalize(id, config, "", &structure.CONFIG{})
9098
}
9199

92-
func Normalize(config *configutils.Config, path string, structure any) {
100+
func Normalize(id string, config *configutils.Config, path string, structure any) {
93101
data := config.Layer.Get(path)
94102
old, ok := data.(map[string]any)
95103

@@ -103,7 +111,7 @@ func Normalize(config *configutils.Config, path string, structure any) {
103111
tmpConf.Load(old, "")
104112

105113
// Apply transforms to the new config
106-
tmpConf.ApplyTransformFuncs(structure, "", transformFuncs)
114+
tmpConf.ApplyTransformFuncs(id, structure, "", transformFuncs)
107115

108116
// Lowercase actual config
109117
LowercaseKeys(config)
@@ -126,7 +134,7 @@ func InitReload() {
126134
tokenConf.OnReload(reload)
127135
}
128136

129-
func InitEnv() {
137+
func InitConfig() {
130138
var config structure.CONFIG
131139

132140
mainConf.Layer.Unmarshal("", &config)
@@ -161,3 +169,11 @@ func LoadConfig() {
161169
log.Error("Could not Load Config ", ENV.CONFIG_PATH, ": ", err.Error())
162170
}
163171
}
172+
173+
func normalizeEnv(key string, value string) (string, any) {
174+
key = strings.ToLower(key)
175+
key = strings.ReplaceAll(key, "__", ".")
176+
key = strings.ReplaceAll(key, "_", "")
177+
178+
return key, stringutils.ToType(value)
179+
}

internals/config/structure/structure.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ type ENV struct {
1313
type CONFIG struct {
1414
SERVICE SERVICE `koanf:"service"`
1515
API API `koanf:"api"`
16-
SETTINGS SETTINGS `koanf:"settings" aliases:"overrides"`
16+
SETTINGS SETTINGS `koanf:"settings" token>aliases:"overrides"`
1717
}
1818

1919
type SERVICE struct {
20-
PORT string `koanf:"port"`
21-
LOG_LEVEL string `koanf:"loglevel"`
20+
PORT string `koanf:"port" env>aliases:".port"`
21+
LOG_LEVEL string `koanf:"loglevel" env>aliases:".loglevel"`
2222
}
2323

2424
type API struct {
25-
URL string `koanf:"url"`
26-
TOKENS []string `koanf:"tokens" aliases:"token"`
25+
URL string `koanf:"url" env>aliases:".apiurl"`
26+
TOKENS []string `koanf:"tokens" env>aliases:".apitokens,.apitoken" aliases:"token"`
2727
}
2828

2929
type SETTINGS struct {

internals/config/tokens.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func NormalizeTokens() {
2828
tmpConf := configutils.New()
2929
tmpConf.Load(config.Raw(), "")
3030

31-
Normalize(tmpConf, "overrides", &structure.SETTINGS{})
31+
Normalize("token", tmpConf, "", &structure.CONFIG{})
3232

3333
data = append(data, tmpConf.Layer.Raw())
3434
}
@@ -38,7 +38,7 @@ func NormalizeTokens() {
3838
}
3939

4040
func InitTokens() {
41-
apiTokens := mainConf.Layer.Strings("api.tokens")
41+
apiTokens := DEFAULT.API.TOKENS
4242

4343
var tokenConfigs []structure.CONFIG
4444

@@ -61,7 +61,7 @@ func InitTokens() {
6161

6262
// Set Blocked Endpoints on Config to User Layer Value
6363
// => effectively ignoring Default Layer
64-
mainConf.Layer.Set("settings.access.endpoints", userConf.Layer.Strings("settings.access.endpoints"))
64+
DEFAULT.SETTINGS.ACCESS.ENDPOINTS = userConf.Layer.Strings("settings.access.endpoints")
6565
}
6666

6767
if len(apiTokens) > 0 {

0 commit comments

Comments
 (0)