Skip to content

Commit 614bd9b

Browse files
feat(settings): support env var expansion in secret file paths; fixes #269 (#270)
1 parent e4c939b commit 614bd9b

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

internal/settings/settings.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ func readSecretFromFile(source, value string) (string, error) {
286286
return value, nil
287287
}
288288

289-
content, err := os.ReadFile(source)
289+
content, err := os.ReadFile(os.ExpandEnv(source))
290290

291291
if err != nil {
292292
return value, err

internal/settings/settings_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package settings
22

33
import (
4+
"os"
45
"testing"
56
)
67

@@ -36,3 +37,47 @@ func TestLoadYAMLSetting(t *testing.T) {
3637

3738
t.Log(settings)
3839
}
40+
41+
func TestLoadWithEnvPath(t *testing.T) {
42+
const expectedToken = "super secret login token"
43+
44+
tokenFile, err := os.CreateTemp("", "login_token_*.txt")
45+
if err != nil {
46+
t.Fatalf("failed to create temp token file: %v", err)
47+
}
48+
defer os.Remove(tokenFile.Name())
49+
50+
if _, err := tokenFile.WriteString(expectedToken); err != nil {
51+
t.Fatalf("failed to write token to file: %v", err)
52+
}
53+
if err := tokenFile.Close(); err != nil {
54+
t.Fatalf("failed to close token file: %v", err)
55+
}
56+
57+
settings := Settings{
58+
LoginTokenFile: "$LOGIN_TOKEN_FILE",
59+
}
60+
61+
configFile, err := os.CreateTemp("", "config_*.yaml")
62+
if err != nil {
63+
t.Fatalf("failed to create temp config file: %v", err)
64+
}
65+
defer os.Remove(configFile.Name())
66+
67+
if err := settings.SaveSettings(configFile.Name()); err != nil {
68+
t.Fatalf("failed to save settings to config file: %v", err)
69+
}
70+
71+
t.Setenv("LOGIN_TOKEN_FILE", tokenFile.Name())
72+
73+
var loaded Settings
74+
if err := LoadSettings(configFile.Name(), &loaded); err != nil {
75+
t.Fatalf("failed to load settings with env var: %v", err)
76+
}
77+
78+
if loaded.LoginToken != expectedToken {
79+
t.Errorf("expected login token %q, got %q", expectedToken, loaded.LoginToken)
80+
}
81+
82+
t.Log(settings)
83+
}

0 commit comments

Comments
 (0)