UNPKG

@reldens/server-utils

Version:
76 lines (68 loc) 2.38 kB
/** * * Reldens - RateLimitConfigurer * */ const rateLimit = require('express-rate-limit'); class RateLimitConfigurer { constructor() { this.isDevelopmentMode = false; this.globalRateLimit = 0; this.windowMs = 60000; this.maxRequests = 30; this.developmentMultiplier = 10; this.applyKeyGenerator = false; this.tooManyRequestsMessage = 'Too many requests, please try again later.'; this.rateLimit = rateLimit; } setup(app, config) { this.isDevelopmentMode = config.isDevelopmentMode || false; this.globalRateLimit = config.globalRateLimit || 0; this.windowMs = Number(config.windowMs || this.windowMs); this.maxRequests = Number(config.maxRequests || this.maxRequests); this.developmentMultiplier = Number(config.developmentMultiplier || this.developmentMultiplier); this.applyKeyGenerator = config.applyKeyGenerator || false; this.tooManyRequestsMessage = config.tooManyRequestsMessage || this.tooManyRequestsMessage; if(!this.globalRateLimit){ return; } let limiterParams = { windowMs: this.windowMs, limit: this.maxRequests, standardHeaders: 'draft-8', legacyHeaders: false, message: this.tooManyRequestsMessage }; if(this.isDevelopmentMode){ limiterParams.limit = this.maxRequests * this.developmentMultiplier; } if(this.applyKeyGenerator){ limiterParams.keyGenerator = function(req){ return req.ip; }; } app.use(this.rateLimit(limiterParams)); } createHomeLimiter() { let limiterParams = { windowMs: this.windowMs, limit: this.maxRequests, standardHeaders: 'draft-8', legacyHeaders: false }; if(this.isDevelopmentMode){ limiterParams.limit = this.maxRequests * this.developmentMultiplier; } if(this.applyKeyGenerator){ limiterParams.keyGenerator = function(req){ return req.ip; }; } return this.rateLimit(limiterParams); } } module.exports.RateLimitConfigurer = RateLimitConfigurer;