Add vote rate limit

This commit is contained in:
Nanobyte
2020-10-11 16:17:17 +02:00
parent 97383a71af
commit 58097f0d60
6 changed files with 52 additions and 6 deletions

View File

@@ -3,8 +3,11 @@ var express = require('express');
var app = express();
var config = require('./config.js');
var redis = require('./utils/redis.js');
const getIP = require('./utils/getIP.js');
const getHash = require('./utils/getHash.js');
// Middleware
const voteRateLimitMiddleware = require('./middleware/voteRateLimit.js');
var corsMiddleware = require('./middleware/cors.js');
var loggerMiddleware = require('./middleware/logger.js');
const userCounter = require('./middleware/userCounter.js');
@@ -59,8 +62,8 @@ app.post('/api/skipSegments', postSkipSegments);
app.get('/api/skipSegments/:prefix', getSkipSegmentsByHash);
//voting endpoint
app.get('/api/voteOnSponsorTime', voteOnSponsorTime.endpoint);
app.post('/api/voteOnSponsorTime', voteOnSponsorTime.endpoint);
app.get('/api/voteOnSponsorTime', voteRateLimitMiddleware, voteOnSponsorTime.endpoint);
app.post('/api/voteOnSponsorTime', voteRateLimitMiddleware, voteOnSponsorTime.endpoint);
//Endpoint when a sponsorTime is used up
app.get('/api/viewedVideoSponsorTime', viewedVideoSponsorTime);

View File

@@ -0,0 +1,18 @@
const config = require('../config.js');
const getIP = require('../utils/getIP.js');
const getHash = require('../utils/getHash.js');
const rateLimit = require('express-rate-limit');
module.exports = rateLimit({
windowMs: config.rateLimit.vote.windowMs,
max: config.rateLimit.vote.max,
message: config.rateLimit.vote.message,
headers: false,
keyGenerator: (req /*, res*/) => {
return getHash(req.ip, 1);
},
skip: (/*req, res*/) => {
// skip rate limit if running in test mode
return process.env.npm_lifecycle_script === 'node test.js';
}
});