From efa5b36389dca23e2803045a0022d6f96a5dd866 Mon Sep 17 00:00:00 2001 From: mrhid6 Date: Fri, 17 Jul 2026 11:30:40 +0100 Subject: [PATCH] feat: OS-aware agent config directory --- agent/internal/config/config.go | 22 ++++++++++++++++++---- agent/internal/config/config_test.go | 20 ++++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 agent/internal/config/config_test.go diff --git a/agent/internal/config/config.go b/agent/internal/config/config.go index ad72da7..1718438 100644 --- a/agent/internal/config/config.go +++ b/agent/internal/config/config.go @@ -2,12 +2,26 @@ package config import ( "os" + "path/filepath" + "runtime" "time" "gopkg.in/yaml.v3" ) -const ConfigPath = "/etc/vantage/config.yaml" +// ConfigDir returns the platform-specific config directory. +func ConfigDir() string { + if runtime.GOOS == "windows" { + base := os.Getenv("ProgramData") + if base == "" { + base = `C:\ProgramData` + } + return filepath.Join(base, "vantage") + } + return "/etc/vantage" +} + +func configPath() string { return filepath.Join(ConfigDir(), "config.yaml") } type Config struct { ServerURL string `yaml:"server_url"` @@ -19,7 +33,7 @@ type Config struct { } func Load() (*Config, error) { - data, err := os.ReadFile(ConfigPath) + data, err := os.ReadFile(configPath()) if err != nil { return nil, err } @@ -38,8 +52,8 @@ func Save(cfg *Config) error { if err != nil { return err } - if err := os.MkdirAll("/etc/vantage", 0700); err != nil { + if err := os.MkdirAll(ConfigDir(), 0700); err != nil { return err } - return os.WriteFile(ConfigPath, data, 0600) + return os.WriteFile(configPath(), data, 0600) } diff --git a/agent/internal/config/config_test.go b/agent/internal/config/config_test.go new file mode 100644 index 0000000..924a85a --- /dev/null +++ b/agent/internal/config/config_test.go @@ -0,0 +1,20 @@ +package config + +import ( + "runtime" + "strings" + "testing" +) + +func TestConfigDirByOS(t *testing.T) { + d := ConfigDir() + if runtime.GOOS == "windows" { + if !strings.Contains(strings.ToLower(d), "programdata") { + t.Fatalf("windows config dir = %q, want ProgramData path", d) + } + } else { + if d != "/etc/vantage" { + t.Fatalf("unix config dir = %q, want /etc/vantage", d) + } + } +}