69 lines
1.4 KiB
Go
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())
|
|
}
|