package config import ( "log" "os" ) // Config 持有 push-gateway 运行时配置 type Config struct { Port string JWTSecret string DevMode bool RedisURL string OTLPEndpoint string InternalAPIKey string } // devJWTSecret 是 DevMode 下的默认 JWT 密钥(仅用于本地联调,生产必须配置 JWT_SECRET) const devJWTSecret = "p1-dev-secret-change-in-production" // Load 从环境变量加载配置。 // 非 DevMode 下若 JWT_SECRET 未配置则 fatal 退出;DevMode 下使用默认密钥并打印 warning。 func Load() *Config { devMode := getEnv("DEV_MODE", "false") == "true" jwtSecret := getEnv("JWT_SECRET", "") if jwtSecret == "" { if devMode { log.Println("warning: JWT_SECRET not set, using dev default (DEV_MODE=true)") jwtSecret = devJWTSecret } else { log.Fatal("JWT_SECRET must be set in non-dev mode") } } return &Config{ Port: getEnv("PUSH_GATEWAY_PORT", "8081"), JWTSecret: jwtSecret, DevMode: devMode, RedisURL: getEnv("REDIS_URL", ""), OTLPEndpoint: getEnv("OTEL_EXPORTER_OTLP_ENDPOINT", "http://localhost:4318"), InternalAPIKey: getEnv("INTERNAL_API_KEY", ""), } } // getEnv 读取环境变量,缺失时返回 fallback func getEnv(key, fallback string) string { if v := os.Getenv(key); v != "" { return v } return fallback }