62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
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 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
|
|
}
|