feat: v1
This commit is contained in:
62
backend/internal/config/config.go
Normal file
62
backend/internal/config/config.go
Normal file
@ -0,0 +1,62 @@
|
||||
// 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
|
||||
}
|
||||
Reference in New Issue
Block a user