// Package config handles configuration loading for the API Gateway package config import ( "os" ) // Config holds the application configuration type Config struct { Environment string Port string Version string // Database DatabaseURL string // Redis RedisURL string // JWT JWTSecret string JWTExpiration int // hours // Rate limiting RateLimit RateLimitConfig // Services ComplianceEngineURL string RAGServiceURL string SecurityScannerURL string // Storage MinIOEndpoint string MinIOAccessKey string MinIOSecretKey string MinIOBucket string } // RateLimitConfig holds rate limiting configuration type RateLimitConfig struct { RequestsPerSecond int Burst int } // Load loads configuration from environment variables func Load() (*Config, error) { cfg := &Config{ Environment: getEnv("ENVIRONMENT", "development"), Port: getEnv("PORT", "8080"), Version: getEnv("VERSION", "0.0.1"), DatabaseURL: getEnv("DATABASE_URL", "postgres://breakpilot:breakpilot@localhost:5432/compliance"), RedisURL: getEnv("REDIS_URL", "redis://localhost:6379"), JWTSecret: getEnv("JWT_SECRET", "your-secret-key-change-in-production"), JWTExpiration: getEnvInt("JWT_EXPIRATION", 24), RateLimit: RateLimitConfig{ RequestsPerSecond: getEnvInt("RATE_LIMIT_RPS", 100), Burst: getEnvInt("RATE_LIMIT_BURST", 200), }, ComplianceEngineURL: getEnv("COMPLIANCE_ENGINE_URL", "http://compliance-engine:8081"), RAGServiceURL: getEnv("RAG_SERVICE_URL", "http://rag-service:8082"), SecurityScannerURL: getEnv("SECURITY_SCANNER_URL", "http://security-scanner:8083"), MinIOEndpoint: getEnv("MINIO_ENDPOINT", "minio:9000"), MinIOAccessKey: getEnv("MINIO_ACCESS_KEY", "breakpilot"), MinIOSecretKey: getEnv("MINIO_SECRET_KEY", "breakpilot123"), MinIOBucket: getEnv("MINIO_BUCKET", "compliance"), } return cfg, nil } func getEnv(key, defaultValue string) string { if value := os.Getenv(key); value != "" { return value } return defaultValue } func getEnvInt(key string, defaultValue int) int { if value := os.Getenv(key); value != "" { // Simple conversion, production code should handle errors var result int for _, c := range value { result = result*10 + int(c-'0') } return result } return defaultValue }