package config import ( "os" "strconv" "git.secnex.io/secnex/masterlog" ) const ( // Default ports DefaultSOLPort = 9999 DefaultAPIPort = 8080 ) // Config holds the application configuration type Config struct { SOLPort int APIPort int APIEnabled bool AuthUser string AuthPass string } // Load loads configuration from environment variables func Load() *Config { cfg := &Config{ SOLPort: getPortFromEnv("SOL_PORT", DefaultSOLPort), APIPort: getPortFromEnv("API_PORT", DefaultAPIPort), APIEnabled: getBoolFromEnv("API_ENABLED", false), AuthUser: os.Getenv("SOL_AUTH_USER"), AuthPass: os.Getenv("SOL_AUTH_PASSWORD"), } if cfg.AuthUser == "" || cfg.AuthPass == "" { masterlog.Error("Environment variables not set", map[string]interface{}{ "variables": "SOL_AUTH_USER, SOL_AUTH_PASSWORD", }) return nil } return cfg } func getPortFromEnv(envVar string, defaultPort int) int { if portStr := os.Getenv(envVar); portStr != "" { if port, err := strconv.Atoi(portStr); err == nil && port > 0 && port < 65536 { return port } else { masterlog.Error("Invalid environment variable value", map[string]interface{}{ "error": err, "variable": envVar, "value": portStr, "default": defaultPort, "type": "port", }) } } return defaultPort } func getBoolFromEnv(envVar string, defaultValue bool) bool { if val := os.Getenv(envVar); val != "" { if val == "true" || val == "TRUE" || val == "True" || val == "1" { return true } else { masterlog.Error("Invalid environment variable value", map[string]interface{}{ "variable": envVar, "value": val, "type": "boolean", }) } return false } else { masterlog.Error("Invalid environment variable value", map[string]interface{}{ "variable": envVar, "value": val, "type": "boolean", }) return false } }