A previous `git pull --rebase origin main` dropped 177 local commits,
losing 3400+ files across admin-v2, backend, studio-v2, website,
klausur-service, and many other services. The partial restore attempt
(660295e2) only recovered some files.
This commit restores all missing files from pre-rebase ref 98933f5e
while preserving post-rebase additions (night-scheduler, night-mode UI,
NightModeWidget dashboard integration).
Restored features include:
- AI Module Sidebar (FAB), OCR Labeling, OCR Compare
- GPU Dashboard, RAG Pipeline, Magic Help
- Klausur-Korrektur (8 files), Abitur-Archiv (5+ files)
- Companion, Zeugnisse-Crawler, Screen Flow
- Full backend, studio-v2, website, klausur-service
- All compliance SDKs, agent-core, voice-service
- CI/CD configs, documentation, scripts
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
|
|
}
|