63 lines
1.9 KiB
Go
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
|
|
}
|