package config import ( "fmt" "os" "time" ) type Config struct { ListenAddr string FootageRoot string DBPath string AdminUser string AdminPass string SessionTTL time.Duration ScanInterval time.Duration } func Load() (*Config, error) { sessionTTL, err := parseDurationEnv("SESSION_TTL", 24*time.Hour) if err != nil { return nil, err } scanInterval, err := parseDurationEnv("SCAN_INTERVAL", 5*time.Minute) if err != nil { return nil, err } return &Config{ ListenAddr: getEnv("LISTEN_ADDR", ":8080"), FootageRoot: getEnv("FOOTAGE_ROOT", "/footage"), DBPath: getEnv("DB_PATH", "/data/cammonitor.db"), AdminUser: getEnv("ADMIN_USER", "admin"), AdminPass: getEnv("ADMIN_PASS", "changeme"), SessionTTL: sessionTTL, ScanInterval: scanInterval, }, nil } func getEnv(key, fallback string) string { value := os.Getenv(key) if value == "" { return fallback } return value } func parseDurationEnv(key string, fallback time.Duration) (time.Duration, error) { value := os.Getenv(key) if value == "" { return fallback, nil } duration, err := time.ParseDuration(value) if err != nil { return 0, fmt.Errorf("parse %s: %w", key, err) } return duration, nil }