confluent/ConfluentTranslator/rateLimiter.js
StillHammer 3cd73e6598 Ajout système d'authentification complet avec interface de connexion
Backend:
- auth.js: Système de tokens avec API keys UUID
- rateLimiter.js: Rate limiting multi-tiers (global, traduction, admin)
- logger.js: Logging des requêtes avec rotation automatique
- adminRoutes.js: Routes admin pour gestion des tokens
- server.js: Intégration de tous les middlewares de sécurité

Frontend:
- Interface de connexion modale élégante
- Stockage sécurisé API key dans localStorage
- Bouton déconnexion dans le header
- authFetch() wrapper pour toutes les requêtes protégées
- Protection automatique des endpoints de traduction

Sécurité:
- Token admin généré automatiquement au premier lancement
- Limites quotidiennes par token configurables
- Rate limiting pour prévenir les abus
- Logs détaillés de toutes les requêtes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 12:01:01 +08:00

39 lines
1.0 KiB
JavaScript

const rateLimit = require('express-rate-limit');
// Rate limiter global par IP
const globalLimiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 200, // max 200 requêtes par IP
standardHeaders: true,
legacyHeaders: false,
message: { error: 'Too many requests from this IP, please try again later.' }
});
// Rate limiter pour les traductions (plus strict)
const translationLimiter = rateLimit({
windowMs: 60 * 1000, // 1 minute
max: 10, // max 10 traductions par minute
standardHeaders: true,
legacyHeaders: false,
skip: (req) => {
// Skip si l'utilisateur est admin
return req.user && req.user.role === 'admin';
},
message: { error: 'Too many translation requests. Please wait a moment.' }
});
// Rate limiter pour les endpoints sensibles (admin)
const adminLimiter = rateLimit({
windowMs: 5 * 60 * 1000, // 5 minutes
max: 50,
standardHeaders: true,
legacyHeaders: false,
message: { error: 'Too many admin requests.' }
});
module.exports = {
globalLimiter,
translationLimiter,
adminLimiter
};