mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-13 23:17:02 +03:00
Merge pull request #159 from ajayyy/experimental
Setup different ratelimit for views and votes
This commit is contained in:
@@ -27,7 +27,13 @@
|
|||||||
"vote": {
|
"vote": {
|
||||||
"windowMs": 900000, // 15 minutes
|
"windowMs": 900000, // 15 minutes
|
||||||
"max": 20, // 20 requests in 15min time window
|
"max": 20, // 20 requests in 15min time window
|
||||||
"message": "Too many votes, please try again later"
|
"message": "Too many votes, please try again later",
|
||||||
|
"statusCode": 200
|
||||||
|
},
|
||||||
|
"view": {
|
||||||
|
"windowMs": 900000, // 15 minutes
|
||||||
|
"max": 20, // 20 requests in 15min time window
|
||||||
|
"statusCode": 200
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
20
src/app.js
20
src/app.js
@@ -7,7 +7,7 @@ const getIP = require('./utils/getIP.js');
|
|||||||
const getHash = require('./utils/getHash.js');
|
const getHash = require('./utils/getHash.js');
|
||||||
|
|
||||||
// Middleware
|
// Middleware
|
||||||
const voteRateLimitMiddleware = require('./middleware/voteRateLimit.js');
|
const rateLimitMiddleware = require('./middleware/requestRateLimit.js');
|
||||||
var corsMiddleware = require('./middleware/cors.js');
|
var corsMiddleware = require('./middleware/cors.js');
|
||||||
var loggerMiddleware = require('./middleware/logger.js');
|
var loggerMiddleware = require('./middleware/logger.js');
|
||||||
const userCounter = require('./middleware/userCounter.js');
|
const userCounter = require('./middleware/userCounter.js');
|
||||||
@@ -34,6 +34,14 @@ var getIsUserVIP = require('./routes/getIsUserVIP.js');
|
|||||||
var oldGetVideoSponsorTimes = require('./routes/oldGetVideoSponsorTimes.js');
|
var oldGetVideoSponsorTimes = require('./routes/oldGetVideoSponsorTimes.js');
|
||||||
var oldSubmitSponsorTimes = require('./routes/oldSubmitSponsorTimes.js');
|
var oldSubmitSponsorTimes = require('./routes/oldSubmitSponsorTimes.js');
|
||||||
|
|
||||||
|
// Rate limit endpoint lists
|
||||||
|
let voteEndpoints = [voteOnSponsorTime.endpoint];
|
||||||
|
let viewEndpoints = [viewedVideoSponsorTime];
|
||||||
|
if (config.rateLimit) {
|
||||||
|
// if (config.rateLimit.vote) voteEndpoints.unshift(rateLimitMiddleware(config.rateLimit.vote));
|
||||||
|
if (config.rateLimit.view) viewEndpoints.unshift(rateLimitMiddleware(config.rateLimit.view));
|
||||||
|
}
|
||||||
|
|
||||||
//setup CORS correctly
|
//setup CORS correctly
|
||||||
app.use(corsMiddleware);
|
app.use(corsMiddleware);
|
||||||
app.use(loggerMiddleware);
|
app.use(loggerMiddleware);
|
||||||
@@ -62,12 +70,12 @@ app.post('/api/skipSegments', postSkipSegments);
|
|||||||
app.get('/api/skipSegments/:prefix', getSkipSegmentsByHash);
|
app.get('/api/skipSegments/:prefix', getSkipSegmentsByHash);
|
||||||
|
|
||||||
//voting endpoint
|
//voting endpoint
|
||||||
app.get('/api/voteOnSponsorTime', voteRateLimitMiddleware, voteOnSponsorTime.endpoint);
|
app.get('/api/voteOnSponsorTime', ...voteEndpoints);
|
||||||
app.post('/api/voteOnSponsorTime', voteRateLimitMiddleware, voteOnSponsorTime.endpoint);
|
app.post('/api/voteOnSponsorTime', ...voteEndpoints);
|
||||||
|
|
||||||
//Endpoint when a sponsorTime is used up
|
//Endpoint when a submission is skipped
|
||||||
app.get('/api/viewedVideoSponsorTime', voteRateLimitMiddleware, viewedVideoSponsorTime);
|
app.get('/api/viewedVideoSponsorTime', ...viewEndpoints);
|
||||||
app.post('/api/viewedVideoSponsorTime', voteRateLimitMiddleware, viewedVideoSponsorTime);
|
app.post('/api/viewedVideoSponsorTime', ...viewEndpoints);
|
||||||
|
|
||||||
//To set your username for the stats view
|
//To set your username for the stats view
|
||||||
app.post('/api/setUsername', setUsername);
|
app.post('/api/setUsername', setUsername);
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
const config = require('../config.js');
|
|
||||||
const getIP = require('../utils/getIP.js');
|
const getIP = require('../utils/getIP.js');
|
||||||
const getHash = require('../utils/getHash.js');
|
const getHash = require('../utils/getHash.js');
|
||||||
const rateLimit = require('express-rate-limit');
|
const rateLimit = require('express-rate-limit');
|
||||||
|
|
||||||
module.exports = rateLimit({
|
module.exports = (limitConfig) => rateLimit({
|
||||||
windowMs: config.rateLimit.vote.windowMs,
|
windowMs: limitConfig.windowMs,
|
||||||
max: config.rateLimit.vote.max,
|
max: limitConfig.max,
|
||||||
message: config.rateLimit.vote.message,
|
message: limitConfig.message,
|
||||||
|
statusCode: limitConfig.statusCode,
|
||||||
headers: false,
|
headers: false,
|
||||||
keyGenerator: (req /*, res*/) => {
|
keyGenerator: (req /*, res*/) => {
|
||||||
return getHash(req.ip, 1);
|
return getHash(getIP(req), 1);
|
||||||
},
|
},
|
||||||
skip: (/*req, res*/) => {
|
skip: (/*req, res*/) => {
|
||||||
// skip rate limit if running in test mode
|
// skip rate limit if running in test mode
|
||||||
16
test.json
16
test.json
@@ -51,10 +51,16 @@
|
|||||||
],
|
],
|
||||||
"categoryList": ["sponsor", "intro", "outro", "interaction", "selfpromo", "music_offtopic"],
|
"categoryList": ["sponsor", "intro", "outro", "interaction", "selfpromo", "music_offtopic"],
|
||||||
"rateLimit": {
|
"rateLimit": {
|
||||||
"vote": {
|
"vote": {
|
||||||
"windowMs": 900000,
|
"windowMs": 900000,
|
||||||
"max": 20,
|
"max": 20,
|
||||||
"message": "Too many votes, please try again later"
|
"message": "Too many votes, please try again later",
|
||||||
|
"statusCode": 200
|
||||||
|
},
|
||||||
|
"view": {
|
||||||
|
"windowMs": 900000,
|
||||||
|
"max": 20,
|
||||||
|
"statusCode": 200
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user