Backend Go: - Remplacement complet des anciennes migrations par la base V1 alignée sur ORIGIN. - Durcissement global du parsing JSON (BindAndValidateJSON + RespondWithAppError). - Sécurisation de config.go, CORS, statuts de santé et monitoring. - Implémentation des transactions P0 (RBAC, duplication de playlists, social toggles). - Ajout d’un job worker structuré (emails, analytics, thumbnails) + tests associés. - Nouvelle doc backend : AUDIT_CONFIG, BACKEND_CONFIG, AUTH_PASSWORD_RESET, JOB_WORKER_*. Chat server (Rust): - Refonte du pipeline JWT + sécurité, audit et rate limiting avancé. - Implémentation complète du cycle de message (read receipts, delivered, edit/delete, typing). - Nettoyage des panics, gestion d’erreurs robuste, logs structurés. - Migrations chat alignées sur le schéma UUID et nouvelles features. Stream server (Rust): - Refonte du moteur de streaming (encoding pipeline + HLS) et des modules core. - Transactions P0 pour les jobs et segments, garanties d’atomicité. - Documentation détaillée de la pipeline (AUDIT_STREAM_*, DESIGN_STREAM_PIPELINE, TRANSACTIONS_P0_IMPLEMENTATION). Documentation & audits: - TRIAGE.md et AUDIT_STABILITY.md à jour avec l’état réel des 3 services. - Cartographie complète des migrations et des transactions (DB_MIGRATIONS_*, DB_TRANSACTION_PLAN, AUDIT_DB_TRANSACTIONS, TRANSACTION_TESTS_PHASE3). - Scripts de reset et de cleanup pour la lab DB et la V1. Ce commit fige l’ensemble du travail de stabilisation P0 (UUID, backend, chat et stream) avant les phases suivantes (Coherence Guardian, WS hardening, etc.).
10 KiB
Configuration Backend Veza - Guide de Sécurité
Version: 1.0
Date: 2025-01-XX
Priorité: P0 - Sécurité
📋 Vue d'ensemble
Ce document décrit la configuration du backend Go de Veza, avec un focus particulier sur la sécurisation selon l'environnement (development, test, production).
Changements de sécurité (P0-SECURITY)
- ✅ CORS sécurisé: Plus de wildcard
"*"par défaut en production - ✅ Validation stricte: Production refuse de démarrer si configuration critique manquante
- ✅ Profils d'environnement: Comportements différents selon
APP_ENV - ✅ Defaults sécurisés: Valeurs par défaut adaptées à chaque environnement
🔧 Variables d'environnement
Variables requises (tous environnements)
| Variable | Description | Exemple | Validation |
|---|---|---|---|
JWT_SECRET |
Secret pour signer les tokens JWT | your-super-secret-jwt-key-min-32-chars |
REQUIS, min 32 caractères |
DATABASE_URL |
URL de connexion PostgreSQL | postgresql://user:pass@localhost:5432/veza_db |
REQUIS, format valide |
Variables optionnelles avec defaults
| Variable | Description | Default | Notes |
|---|---|---|---|
APP_PORT |
Port HTTP du serveur | 8080 |
1-65535 |
REDIS_URL |
URL de connexion Redis | redis://localhost:6379 |
Format redis:// ou rediss:// |
LOG_LEVEL |
Niveau de log | INFO |
DEBUG, INFO, WARN, ERROR |
UPLOAD_DIR |
Répertoire d'upload | uploads |
Chemin relatif ou absolu |
STREAM_SERVER_URL |
URL du serveur de streaming | http://localhost:8082 |
URL complète |
Variables spécifiques CORS (P0-SECURITY)
| Variable | Description | Default (dev) | Default (prod) | Validation |
|---|---|---|---|---|
CORS_ALLOWED_ORIGINS |
Origines CORS autorisées (séparées par virgules) | http://localhost:3000,http://127.0.0.1:3000,... |
REQUIS | Non vide en prod, pas de "*" en prod |
Format: Liste séparée par virgules
CORS_ALLOWED_ORIGINS=https://app.veza.com,https://www.veza.com,https://staging.veza.com
🌍 Environnements
Détection automatique
L'environnement est détecté automatiquement selon cette priorité :
APP_ENV(priorité maximale)NODE_ENV(compatibilité)GO_ENV(compatibilité Go)- Hostname (si contient "prod" → production)
- Fallback:
development
Environnements supportés
development: Développement localtest: Tests automatisésstaging: Environnement de pré-productionproduction: Production
🔒 Comportements par environnement
Development (APP_ENV=development)
Caractéristiques:
- ✅ CORS permissif par défaut (localhost uniquement)
- ✅ Logs verbeux (DEBUG autorisé)
- ✅ Valeurs par défaut acceptées
- ⚠️ Warning si CORS contient
"*"(mais démarrage autorisé)
Defaults CORS (si CORS_ALLOWED_ORIGINS non défini):
http://localhost:3000
http://127.0.0.1:3000
http://localhost:5173
http://127.0.0.1:5173
Exemple de configuration minimale:
APP_ENV=development
JWT_SECRET=dev-secret-key-minimum-32-characters-long
DATABASE_URL=postgresql://veza:password@localhost:5432/veza_db
# CORS_ALLOWED_ORIGINS optionnel - defaults locaux utilisés
Test (APP_ENV=test)
Caractéristiques:
- ✅ CORS vide par défaut (peut être configuré explicitement)
- ✅ Validation adaptée aux tests
- ✅ Pas de side-effects externes (SMTP, etc.)
Exemple de configuration:
APP_ENV=test
JWT_SECRET=test-secret-key-minimum-32-characters-long
DATABASE_URL=postgresql://veza:password@localhost:5432/veza_test
# CORS_ALLOWED_ORIGINS optionnel - liste vide par défaut
Production (APP_ENV=production)
Caractéristiques:
- 🔴 CORS_ALLOWED_ORIGINS REQUIS et non vide
- 🔴 Wildcard
"*"INTERDIT en production - 🔴 LOG_LEVEL=DEBUG INTERDIT en production
- 🔴 Erreur fatale si configuration critique manquante
Validation stricte:
- Si
CORS_ALLOWED_ORIGINSest vide → Erreur fatale, serveur ne démarre pas - Si
CORS_ALLOWED_ORIGINScontient"*"→ Erreur fatale, serveur ne démarre pas - Si
LOG_LEVEL=DEBUG→ Erreur fatale, serveur ne démarre pas
Exemple de configuration requise:
APP_ENV=production
JWT_SECRET=production-super-secret-key-minimum-32-characters-long
DATABASE_URL=postgresql://veza:secure-password@db.veza.com:5432/veza_prod
CORS_ALLOWED_ORIGINS=https://app.veza.com,https://www.veza.com
LOG_LEVEL=INFO
REDIS_URL=rediss://redis.veza.com:6379
❌ Configuration INVALIDE en production:
# ❌ CORS_ALLOWED_ORIGINS manquant
APP_ENV=production
JWT_SECRET=...
DATABASE_URL=...
# → Erreur: "CORS_ALLOWED_ORIGINS is required in production"
# ❌ Wildcard dans CORS
CORS_ALLOWED_ORIGINS=*
# → Erreur: "CORS wildcard '*' is not allowed in production"
# ❌ DEBUG en production
LOG_LEVEL=DEBUG
# → Erreur: "LOG_LEVEL=DEBUG is not allowed in production"
🚀 Démarrage du serveur
Development
# Option 1: Via fichier .env
echo "APP_ENV=development" > .env
echo "JWT_SECRET=dev-secret-key-minimum-32-characters-long" >> .env
echo "DATABASE_URL=postgresql://veza:password@localhost:5432/veza_db" >> .env
go run cmd/api/main.go
# Option 2: Variables d'environnement
export APP_ENV=development
export JWT_SECRET=dev-secret-key-minimum-32-characters-long
export DATABASE_URL=postgresql://veza:password@localhost:5432/veza_db
go run cmd/api/main.go
Production
# Configuration requise
export APP_ENV=production
export JWT_SECRET=production-super-secret-key-minimum-32-characters-long
export DATABASE_URL=postgresql://veza:secure-password@db.veza.com:5432/veza_prod
export CORS_ALLOWED_ORIGINS=https://app.veza.com,https://www.veza.com
export LOG_LEVEL=INFO
export REDIS_URL=rediss://redis.veza.com:6379
# Démarrage
./veza-backend-api
Si une variable critique manque en production, le serveur refusera de démarrer avec un message d'erreur explicite.
🔍 Validation de la configuration
Validation automatique
La configuration est validée automatiquement au démarrage via ValidateForEnvironment() :
-
Validation de base (tous environnements):
- Port valide (1-65535)
- JWT secret ≥ 32 caractères
- DatabaseURL et RedisURL format valide
- LogLevel dans la liste autorisée
-
Validation spécifique production:
CORS_ALLOWED_ORIGINSnon vide- Pas de wildcard
"*"dans CORS LOG_LEVEL≠DEBUG
Messages d'erreur
Production - CORS manquant:
ERROR: Configuration validation failed
Error: CORS_ALLOWED_ORIGINS is required in production environment and must not be empty
Production - Wildcard détecté:
ERROR: Configuration validation failed
Error: CORS wildcard '*' is not allowed in production environment. Please specify explicit origins in CORS_ALLOWED_ORIGINS
Production - DEBUG interdit:
ERROR: Configuration validation failed
Error: LOG_LEVEL=DEBUG is not allowed in production environment for security reasons
📝 Fichiers de configuration
Ordre de chargement
- Variables d'environnement système (priorité maximale)
.env.{APP_ENV}(ex:.env.development,.env.production).env(fallback)- Valeurs par défaut (selon environnement)
Exemple de fichiers
.env.development:
APP_ENV=development
JWT_SECRET=dev-secret-key-minimum-32-characters-long
DATABASE_URL=postgresql://veza:password@localhost:5432/veza_db
REDIS_URL=redis://localhost:6379
LOG_LEVEL=DEBUG
# CORS_ALLOWED_ORIGINS optionnel - defaults locaux utilisés
.env.production:
APP_ENV=production
JWT_SECRET=production-super-secret-key-minimum-32-characters-long
DATABASE_URL=postgresql://veza:secure-password@db.veza.com:5432/veza_prod
CORS_ALLOWED_ORIGINS=https://app.veza.com,https://www.veza.com
LOG_LEVEL=INFO
REDIS_URL=rediss://redis.veza.com:6379
⚠️ IMPORTANT: Ne jamais commiter les fichiers .env.production avec des secrets réels dans le repository.
🧪 Tests
Exécuter les tests de configuration
cd veza-backend-api
go test ./internal/config/... -v
Tests de sécurité (P0-SECURITY)
Les tests suivants valident la sécurisation :
TestLoadConfig_DevDefaults: Vérifie les defaults devTestLoadConfig_ProdMissingCritical: Vérifie que prod refuse si CORS manquantTestLoadConfig_ProdWildcard: Vérifie que prod refuse le wildcardTestLoadConfig_ProdValid: Vérifie qu'une config prod valide passe
🔐 Bonnes pratiques de sécurité
✅ À FAIRE
- Production: Toujours définir
CORS_ALLOWED_ORIGINSexplicitement - Production: Utiliser
LOG_LEVEL=INFOou supérieur - Secrets: Stocker les secrets dans des variables d'environnement, jamais dans le code
- Validation: Vérifier la configuration avant chaque déploiement
- Documentation: Documenter les variables d'environnement requises
❌ À ÉVITER
- Production: Ne jamais utiliser
CORS_ALLOWED_ORIGINS=* - Production: Ne jamais utiliser
LOG_LEVEL=DEBUG - Secrets: Ne jamais hardcoder des secrets dans le code
- Git: Ne jamais commiter des fichiers
.envavec des secrets - Defaults: Ne pas compter sur les valeurs par défaut en production
🐛 Dépannage
Le serveur refuse de démarrer en production
Erreur: CORS_ALLOWED_ORIGINS is required in production
Solution: Définir CORS_ALLOWED_ORIGINS avec une liste explicite d'origines :
export CORS_ALLOWED_ORIGINS=https://app.veza.com,https://www.veza.com
Erreur de validation CORS wildcard
Erreur: CORS wildcard '*' is not allowed in production
Solution: Remplacer "*" par une liste explicite d'origines autorisées.
Erreur LOG_LEVEL=DEBUG en production
Erreur: LOG_LEVEL=DEBUG is not allowed in production
Solution: Utiliser LOG_LEVEL=INFO ou supérieur :
export LOG_LEVEL=INFO
📚 Références
- Audit de sécurité - Rapport d'audit détaillé
- Middleware CORS - Implémentation CORS
- Validation de config - Validateur de configuration
📞 Support
Pour toute question sur la configuration, consulter :
- Le code source:
internal/config/config.go - Les tests:
internal/config/config_test.go - Ce document:
docs/BACKEND_CONFIG.md
Dernière mise à jour: 2025-01-XX
Auteur: Équipe Veza
Priorité: P0 - Sécurité