- Nouvelle architecture modulaire avec src/api, src/core, src/utils - Séparation claire docs/ (admin, changelog, dev, security) et tests/ (unit, integration, scripts) - server.js devient un simple point d'entrée - Ajout de STRUCTURE.md documentant l'architecture - Archivage ancien-confluent/ avec générateur de lexique complet 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
4.4 KiB
🔒 Full Lockdown Security - Guide Rapide
✅ C'EST FAIT !
Tous les endpoints sont maintenant sécurisés. Voici ce qui a changé :
Avant → Après
AVANT : N'importe qui pouvait :
- ❌ Lire le lexique complet
- ❌ Voir les stats
- ❌ Recharger les lexiques
- ❌ Debugger les prompts
- ❌ Faire des traductions batch
APRÈS : Personne ne peut rien faire sans token valide
- ✅ Tous les endpoints nécessitent authentification
- ✅ Interface bloquée sans connexion
- ✅ Auto-logout sur session expirée
- ✅ Rate limiting sur traductions
🚀 Démarrage rapide
1. Lancer le serveur
cd ConfluentTranslator
npm start
2. Récupérer le token admin
Le serveur va afficher :
🔑 Admin token created: c32b04be-2e68-4e15-8362-xxxxx
⚠️ SAVE THIS TOKEN - It will not be shown again!
OU lire le fichier :
cat data/tokens.json
3. Se connecter
- Ouvrir
http://localhost:3000 - Entrer le token admin dans le champ "API Key"
- Cliquer "Se connecter"
- ✅ L'interface se charge
🧪 Tester la sécurité
Test automatique (Linux/Mac/WSL)
chmod +x test-security.sh
./test-security.sh
Test manuel rapide
# Sans auth (doit échouer avec 401)
curl http://localhost:3000/api/stats
# Avec auth (doit réussir)
TOKEN="votre-token"
curl http://localhost:3000/api/stats -H "x-api-key: $TOKEN"
Résultat attendu :
- Sans auth :
{"error":"API key missing"}(401) - Avec auth : JSON avec les stats
📝 Ce qui a été modifié
Backend (server.js)
// Avant
- app.get('/api/stats', (req, res) => {
+ app.get('/api/stats', authenticate, (req, res) => {
// Avant
- app.post('/api/reload', (req, res) => {
+ app.post('/api/reload', authenticate, requireAdmin, (req, res) => {
Tous les endpoints ont authenticate maintenant
Frontend (index.html)
// Avant
- const response = await fetch('/api/stats');
+ const response = await authFetch('/api/stats');
// authFetch() gère automatiquement :
// - Header x-api-key
// - Auto-logout sur 401/403
// - Erreurs de session
🔑 Gestion des tokens
Où sont les tokens ?
ConfluentTranslator/data/tokens.json
Format :
{
"c32b04be-2e68-4e15-8362-xxx": {
"name": "admin",
"role": "admin",
"enabled": true,
"createdAt": "2025-12-02T..."
}
}
Créer un nouveau token admin
# Supprimer le fichier et redémarrer
rm data/tokens.json
npm start
Créer un token user (via API admin)
TOKEN_ADMIN="votre-token-admin"
curl -X POST http://localhost:3000/api/admin/tokens \
-H "x-api-key: $TOKEN_ADMIN" \
-H "Content-Type: application/json" \
-d '{"name":"user1","role":"user"}'
🛡️ Endpoints sécurisés
Public (pas d'auth)
GET /- Page HTMLGET /api/health- Health check
Protégé (auth requise)
GET /api/statsGET /api/lexique/:variantGET /api/searchGET /api/validatePOST /translatePOST /api/translate/*POST /api/analyze/coveragePOST /api/debug/prompt
Admin only
POST /api/reloadPOST /api/admin/*
⚠️ Troubleshooting
"API key missing" partout
Problème : Pas connecté ou token invalide Solution : Se connecter avec un token valide
Interface blanche après login
Problème : Erreur de chargement Solution : Ouvrir la console (F12) et vérifier les erreurs
"Session expirée" en boucle
Problème : Token désactivé côté serveur
Solution : Vérifier data/tokens.json que enabled: true
Token admin perdu
Problème : Fichier tokens.json supprimé ou corrompu
Solution :
rm data/tokens.json
npm start # Un nouveau token sera créé
📚 Documentation complète
- Tests détaillés : Voir
SECURITY_TEST.md - Changelog : Voir
CHANGELOG_SECURITY.md - Script de test : Voir
test-security.sh
✅ Checklist
- Tous les endpoints protégés
- Interface bloquée sans auth
- Auto-logout sur session expirée
- Rate limiting actif
- Token admin créé automatiquement
- Documentation complète
- Scripts de test fournis
🎉 Résultat
Full lockdown opérationnel !
Personne ne peut accéder aux données sans authentification. Le système est sécurisé de bout en bout.
Questions ? Voir SECURITY_TEST.md pour plus de détails.