Files
PdfEditor/backend/internal/config/config.go
2026-08-17 19:08:20 +02:00

63 lines
1.9 KiB
Go

// Package config charge la configuration de l'application depuis les variables d'environnement.
package config
import (
"fmt"
"os"
"time"
)
// Config regroupe tous les paramètres de configuration du serveur.
type Config struct {
DatabaseURL string // chaîne de connexion PostgreSQL
JWTSecret []byte // secret de signature des JWT
JWTAccessTTL time.Duration // durée de vie des access tokens
JWTRefreshTTL time.Duration // durée de vie des refresh tokens
StoragePath string // dossier de stockage des PDF sur disque
Port string // port d'écoute HTTP
CORSOrigin string // origine autorisée pour le CORS
}
// Load lit la configuration depuis l'environnement et applique les valeurs par défaut.
// Retourne une erreur si une variable obligatoire est absente ou invalide.
func Load() (*Config, error) {
cfg := &Config{
DatabaseURL: os.Getenv("DATABASE_URL"),
StoragePath: getEnv("STORAGE_PATH", "/data/documents"),
Port: getEnv("PORT", "8080"),
CORSOrigin: os.Getenv("CORS_ORIGIN"),
}
if cfg.DatabaseURL == "" {
return nil, fmt.Errorf("la variable d'environnement DATABASE_URL est obligatoire")
}
secret := os.Getenv("JWT_SECRET")
if secret == "" {
return nil, fmt.Errorf("la variable d'environnement JWT_SECRET est obligatoire")
}
cfg.JWTSecret = []byte(secret)
accessTTL, err := time.ParseDuration(getEnv("JWT_ACCESS_TTL", "15m"))
if err != nil {
return nil, fmt.Errorf("JWT_ACCESS_TTL invalide : %w", err)
}
cfg.JWTAccessTTL = accessTTL
refreshTTL, err := time.ParseDuration(getEnv("JWT_REFRESH_TTL", "168h"))
if err != nil {
return nil, fmt.Errorf("JWT_REFRESH_TTL invalide : %w", err)
}
cfg.JWTRefreshTTL = refreshTTL
return cfg, nil
}
// getEnv retourne la valeur de la variable d'environnement clef, ou def si absente.
func getEnv(key, def string) string {
if v := os.Getenv(key); v != "" {
return v
}
return def
}