Fix rate limiting for admin users

- Add skip function to rate limiter that bypasses limits for authenticated admins
- Verify JWT token to identify admin users
- Admin users can now make unlimited API requests
- Other users still subject to rate limits (100 requests per 15 minutes)
This commit is contained in:
2025-07-07 16:26:57 +02:00
parent 7e3009cedc
commit ff370f6dbd
+17 -2
View File
@@ -3,6 +3,7 @@ const express = require('express');
const helmet = require('helmet');
const cors = require('cors');
const rateLimit = require('express-rate-limit');
const jwt = require('jsonwebtoken');
const path = require('path');
const { initializeDatabase } = require('./src/database/db');
const { startFileWatcher } = require('./src/services/fileWatcher');
@@ -46,10 +47,23 @@ const corsOptions = {
app.use(cors(corsOptions));
// Rate limiting
// Rate limiting with admin bypass
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100 // limit each IP to 100 requests per windowMs
max: 100, // limit each IP to 100 requests per windowMs
skip: (req) => {
// Skip rate limiting for authenticated admin users
if (req.path.startsWith('/api/admin/') && req.headers.authorization) {
const token = req.headers.authorization.replace('Bearer ', '');
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
return decoded.type === 'admin';
} catch (err) {
return false;
}
}
return false;
}
});
const authLimiter = rateLimit({
@@ -57,6 +71,7 @@ const authLimiter = rateLimit({
max: 5 // limit auth attempts
});
// Apply rate limiting - admin routes check will skip for valid admin tokens
app.use('/api/', limiter);
app.use('/api/auth', authLimiter);