package config import ( "fmt" "os" "github.com/cynfo/rmm-backend/db" "gopkg.in/yaml.v3" ) type Config struct { ListenAddr string `yaml:"listen_addr"` TLSCert string `yaml:"tls_cert"` TLSKey string `yaml:"tls_key"` APIKeys []string `yaml:"api_keys"` JWTSecret string `yaml:"jwt_secret"` Database db.DBConfig `yaml:"database"` } func Load(path string) (*Config, error) { cfg := &Config{ ListenAddr: ":8443", TLSCert: "certs/server.crt", TLSKey: "certs/server.key", Database: db.DBConfig{ Host: "127.0.0.1", Port: 5432, User: "rmm", Password: "", DBName: "rmm", SSLMode: "disable", }, } data, err := os.ReadFile(path) if err != nil { return nil, err } if err := yaml.Unmarshal(data, cfg); err != nil { return nil, err } // Env overrides — alle Werte koennen via ENV ueberschrieben werden (z.B. Docker) if v := os.Getenv("RMM_LISTEN_ADDR"); v != "" { cfg.ListenAddr = v } if v := os.Getenv("RMM_TLS_CERT"); v != "" { cfg.TLSCert = v } if v := os.Getenv("RMM_TLS_KEY"); v != "" { cfg.TLSKey = v } if v := os.Getenv("RMM_JWT_SECRET"); v != "" { cfg.JWTSecret = v } if v := os.Getenv("RMM_API_KEY"); v != "" { cfg.APIKeys = append(cfg.APIKeys, v) } if v := os.Getenv("RMM_DB_HOST"); v != "" { cfg.Database.Host = v } if v := os.Getenv("RMM_DB_PORT"); v != "" { if port := 0; len(v) > 0 { fmt.Sscanf(v, "%d", &port) if port > 0 { cfg.Database.Port = port } } } if v := os.Getenv("RMM_DB_USER"); v != "" { cfg.Database.User = v } if v := os.Getenv("RMM_DB_PASSWORD"); v != "" { cfg.Database.Password = v } if v := os.Getenv("RMM_DB_NAME"); v != "" { cfg.Database.DBName = v } return cfg, nil }