api: upgrade express-rate-limit to v7, reuse key generator
This commit is contained in:
parent
693204b799
commit
d466f8a4af
3 changed files with 20 additions and 18 deletions
|
@ -31,7 +31,7 @@
|
||||||
"dotenv": "^16.0.1",
|
"dotenv": "^16.0.1",
|
||||||
"esbuild": "^0.14.51",
|
"esbuild": "^0.14.51",
|
||||||
"express": "^4.21.0",
|
"express": "^4.21.0",
|
||||||
"express-rate-limit": "^6.3.0",
|
"express-rate-limit": "^7.4.1",
|
||||||
"ffmpeg-static": "^5.1.0",
|
"ffmpeg-static": "^5.1.0",
|
||||||
"hls-parser": "^0.10.7",
|
"hls-parser": "^0.10.7",
|
||||||
"ipaddr.js": "2.2.0",
|
"ipaddr.js": "2.2.0",
|
||||||
|
|
|
@ -68,31 +68,33 @@ export const runAPI = (express, app, __dirname, isPrimary = true) => {
|
||||||
return res.status(status).json(body);
|
return res.status(status).json(body);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const keyGenerator = (req) => hashHmac(getIP(req), 'rate').toString('base64url');
|
||||||
|
|
||||||
const sessionLimiter = rateLimit({
|
const sessionLimiter = rateLimit({
|
||||||
windowMs: 60000,
|
windowMs: 60000,
|
||||||
max: 10,
|
limit: 10,
|
||||||
standardHeaders: true,
|
standardHeaders: 'draft-6',
|
||||||
legacyHeaders: false,
|
legacyHeaders: false,
|
||||||
keyGenerator: req => hashHmac(getIP(req), 'rate'),
|
keyGenerator,
|
||||||
handler: handleRateExceeded
|
handler: handleRateExceeded
|
||||||
});
|
});
|
||||||
|
|
||||||
const apiLimiter = rateLimit({
|
const apiLimiter = rateLimit({
|
||||||
windowMs: env.rateLimitWindow * 1000,
|
windowMs: env.rateLimitWindow * 1000,
|
||||||
max: (req) => req.rateLimitMax || env.rateLimitMax,
|
limit: (req) => req.rateLimitMax || env.rateLimitMax,
|
||||||
standardHeaders: true,
|
standardHeaders: 'draft-6',
|
||||||
legacyHeaders: false,
|
legacyHeaders: false,
|
||||||
keyGenerator: req => req.rateLimitKey || hashHmac(getIP(req), 'rate'),
|
keyGenerator: req => req.rateLimitKey || keyGenerator(req),
|
||||||
handler: handleRateExceeded
|
handler: handleRateExceeded
|
||||||
})
|
})
|
||||||
|
|
||||||
const apiTunnelLimiter = rateLimit({
|
const apiTunnelLimiter = rateLimit({
|
||||||
windowMs: env.rateLimitWindow * 1000,
|
windowMs: env.rateLimitWindow * 1000,
|
||||||
max: (req) => req.rateLimitMax || env.rateLimitMax,
|
limit: (req) => req.rateLimitMax || env.rateLimitMax,
|
||||||
standardHeaders: true,
|
standardHeaders: 'draft-6',
|
||||||
legacyHeaders: false,
|
legacyHeaders: false,
|
||||||
keyGenerator: req => req.rateLimitKey || hashHmac(getIP(req), 'rate'),
|
keyGenerator: req => req.rateLimitKey || keyGenerator(req),
|
||||||
handler: (req, res) => {
|
handler: (_, res) => {
|
||||||
return res.sendStatus(429)
|
return res.sendStatus(429)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -32,8 +32,8 @@ importers:
|
||||||
specifier: ^4.21.0
|
specifier: ^4.21.0
|
||||||
version: 4.21.0
|
version: 4.21.0
|
||||||
express-rate-limit:
|
express-rate-limit:
|
||||||
specifier: ^6.3.0
|
specifier: ^7.4.1
|
||||||
version: 6.11.2(express@4.21.0)
|
version: 7.4.1(express@4.21.0)
|
||||||
ffmpeg-static:
|
ffmpeg-static:
|
||||||
specifier: ^5.1.0
|
specifier: ^5.1.0
|
||||||
version: 5.2.0
|
version: 5.2.0
|
||||||
|
@ -1298,11 +1298,11 @@ packages:
|
||||||
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
|
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
express-rate-limit@6.11.2:
|
express-rate-limit@7.4.1:
|
||||||
resolution: {integrity: sha512-a7uwwfNTh1U60ssiIkuLFWHt4hAC5yxlLGU2VP0X4YNlyEDZAqF4tK3GD3NSitVBrCQmQ0++0uOyFOgC2y4DDw==}
|
resolution: {integrity: sha512-KS3efpnpIDVIXopMc65EMbWbUht7qvTCdtCR2dD/IZmi9MIkopYESwyRqLgv8Pfu589+KqDqOdzJWW7AHoACeg==}
|
||||||
engines: {node: '>= 14'}
|
engines: {node: '>= 16'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
express: ^4 || ^5
|
express: 4 || 5 || ^5.0.0-beta.1
|
||||||
|
|
||||||
express@4.21.0:
|
express@4.21.0:
|
||||||
resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==}
|
resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==}
|
||||||
|
@ -3341,7 +3341,7 @@ snapshots:
|
||||||
signal-exit: 3.0.7
|
signal-exit: 3.0.7
|
||||||
strip-final-newline: 2.0.0
|
strip-final-newline: 2.0.0
|
||||||
|
|
||||||
express-rate-limit@6.11.2(express@4.21.0):
|
express-rate-limit@7.4.1(express@4.21.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
express: 4.21.0
|
express: 4.21.0
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue