package config import ( "fmt" "log" "os" "time" "github.com/joho/godotenv" ) type Config struct { ServerPort string DatabaseURL string JWTSecret string JWTExpiration time.Duration JWTRefreshExpiration time.Duration } func Load() (*Config, error) { if err := godotenv.Load(); err != nil { log.Printf("warning: .env file not loaded: %v", err) } cfg := &Config{ ServerPort: getEnv("SERVER_PORT", "8080"), DatabaseURL: getEnv("DATABASE_URL", "postgres://localhost:5432/aegisguard?sslmode=disable"), JWTSecret: getEnv("JWT_SECRET", ""), JWTExpiration: 24 * time.Hour, JWTRefreshExpiration: 7 * 24 * time.Hour, } if cfg.JWTSecret == "" { return nil, fmt.Errorf("JWT_SECRET is required in .env file") } if len(cfg.JWTSecret) < 32 { return nil, fmt.Errorf("JWT_SECRET must be at least 32 characters long") } if expStr := os.Getenv("JWT_EXPIRATION"); expStr != "" { d, err := time.ParseDuration(expStr) if err != nil { return nil, fmt.Errorf("invalid JWT_EXPIRATION: %w", err) } cfg.JWTExpiration = d } if expStr := os.Getenv("JWT_REFRESH_EXPIRATION"); expStr != "" { d, err := time.ParseDuration(expStr) if err != nil { return nil, fmt.Errorf("invalid JWT_REFRESH_EXPIRATION: %w", err) } cfg.JWTRefreshExpiration = d } return cfg, nil } func getEnv(key, defaultVal string) string { if val := os.Getenv(key); val != "" { return val } return defaultVal }