diff --git a/main.go b/main.go index b0b5694..860bfcb 100644 --- a/main.go +++ b/main.go @@ -309,6 +309,9 @@ func (u *ui) filter() { func defaultStatePaths(stateDir string) statePaths { baseDir := strings.TrimSpace(stateDir) + if baseDir == "" { + baseDir = strings.TrimSpace(os.Getenv("KEEPASSGO_STATE_DIR")) + } if baseDir == "" { configDir, err := os.UserConfigDir() if err != nil || strings.TrimSpace(configDir) == "" { diff --git a/main_test.go b/main_test.go index c174c5f..6317359 100644 --- a/main_test.go +++ b/main_test.go @@ -1978,6 +1978,20 @@ func TestDefaultStatePathsUsesProvidedStateDir(t *testing.T) { } } +func TestDefaultStatePathsUsesEnvironmentStateDirWhenFlagUnset(t *testing.T) { + base := filepath.Join(t.TempDir(), "keepassgo-state-env") + t.Setenv("KEEPASSGO_STATE_DIR", base) + + paths := defaultStatePaths("") + + if got := paths.DefaultSaveAsPath; got != filepath.Join(base, "vault.kdbx") { + t.Fatalf("DefaultSaveAsPath = %q, want %q", got, filepath.Join(base, "vault.kdbx")) + } + if got := paths.RecentVaultsPath; got != filepath.Join(base, "recent-vaults.json") { + t.Fatalf("RecentVaultsPath = %q, want %q", got, filepath.Join(base, "recent-vaults.json")) + } +} + func TestResolveFlagOrEnvPrefersFlagThenEnvThenFallback(t *testing.T) { t.Setenv("KEEPASSGO_TEST_VALUE", "from-env")