Services: Admin-Compliance, Backend-Compliance, AI-Compliance-SDK, Consent-SDK, Developer-Portal, PCA-Platform, DSMS Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
94 lines
2.3 KiB
Go
94 lines
2.3 KiB
Go
// 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
|
|
}
|