# Variables d'environnement — Adastra API Référence pour les variables sensibles ou non-triviales. Pour les valeurs par défaut et la liste exhaustive, voir `config/env/.env.example`. --- ## TRUST_PROXY **Fichier concerné :** `src/createApp.js` **Utilisé par :** `express-rate-limit` (IP réelle du client), `req.ip` ### Principe Indique à Express combien de proxies se trouvent entre internet et le process Node. Sans cette valeur, `req.ip` retourne l'IP du proxy (`127.0.0.1`) au lieu de l'IP du client réel, ce qui rend le rate limiting inefficace (toutes les requêtes semblent venir de la même IP). ### Valeurs selon la topologie | Environnement | Topologie | Valeur | |---|---|---| | Dev local | Node exposé directement, pas de proxy | ne pas setter (variable absente) | | Prod — serveur seul | nginx → Node sur le même serveur | `1` | | Prod — cloud avec LB | nginx → load balancer → Node | `2` | | Confiance totale | Tous les proxies de la chaîne `X-Forwarded-For` | `true` (déconseillé) | > **Règle générale :** `TRUST_PROXY` = nombre de proxies entre internet et Node. ### Vérification empirique Ajouter temporairement cette route et appeler `/debug-ip` depuis l'extérieur : ```js app.get('/debug-ip', (req, res) => { res.json({ ip: req.ip, ips: req.ips, xForwardedFor: req.headers['x-forwarded-for'] }); }); ``` - `req.ip` retourne l'IP réelle du client → valeur correcte - `req.ip` retourne `127.0.0.1` ou l'IP du proxy → augmenter de 1 - `req.ips` est vide malgré un proxy → idem **Supprimer la route après vérification.** ### Implémentation actuelle ```js if (process.env.TRUST_PROXY) { app.set('trust proxy', parseInt(process.env.TRUST_PROXY, 10) || process.env.TRUST_PROXY); } ``` Le cast `parseInt(...) || process.env.TRUST_PROXY` permet de passer soit un entier (`"1"` → `1`) soit la chaîne `"true"`. --- ## SECRET **Fichier concerné :** `src/config/index.js` **Utilisé par :** signature JWT, HMAC-SHA256 des API keys, secret de session Express Valeur obligatoire en production — le process refuse de démarrer si elle est absente. Générer avec : ```bash node -e "console.log(require('crypto').randomBytes(64).toString('hex'))" ``` --- ## SESSION_SECRET **Fichier concerné :** `src/createApp.js` **Utilisé par :** `express-session` Indépendant de `SECRET` pour limiter la surface d'impact si l'un des deux est compromis. Même commande de génération que `SECRET`. Fallback sur `SECRET` si absent (rétrocompatibilité). --- ## ALLOWED_ORIGINS **Fichier concerné :** `src/createApp.js` **Utilisé par :** CORS Liste d'origines autorisées, séparées par des virgules. Si absente ou vide, CORS refuse toutes les origines cross-domain. ``` ALLOWED_ORIGINS=http://localhost:4200,http://localhost:4300 ``` En production, indiquer uniquement le domaine du frontend (ex: `https://adastra.example.com`).