Files
fleetforge/agents/forge-agent/internal/config/config.go
T

69 lines
1.4 KiB
Go

package config
import (
"encoding/json"
"os"
"path/filepath"
"runtime"
)
type Config struct {
ServerURL string `json:"server_url"`
EnrollmentToken string `json:"enrollment_token,omitempty"`
DeviceID string `json:"device_id"`
Credential string `json:"credential"`
Label string `json:"label"`
HeartbeatSec int `json:"heartbeat_interval_seconds"`
}
func configDir() string {
switch runtime.GOOS {
case "windows":
if p := os.Getenv("ProgramData"); p != "" {
return filepath.Join(p, "FleetForge")
}
return `C:\ProgramData\FleetForge`
case "darwin":
home, _ := os.UserHomeDir()
return filepath.Join(home, "Library", "Application Support", "FleetForge")
default:
home, _ := os.UserHomeDir()
return filepath.Join(home, ".config", "forge-agent")
}
}
func ConfigPath() string {
return filepath.Join(configDir(), "config.json")
}
func Load() (*Config, error) {
data, err := os.ReadFile(ConfigPath())
if err != nil {
return nil, err
}
var cfg Config
if err := json.Unmarshal(data, &cfg); err != nil {
return nil, err
}
if cfg.HeartbeatSec <= 0 {
cfg.HeartbeatSec = 30
}
return &cfg, nil
}
func Save(cfg *Config) error {
dir := filepath.Dir(ConfigPath())
if err := os.MkdirAll(dir, 0700); err != nil {
return err
}
data, err := json.MarshalIndent(cfg, "", " ")
if err != nil {
return err
}
return os.WriteFile(ConfigPath(), data, 0600)
}
func Delete() error {
return os.Remove(ConfigPath())
}