From 9d6af8cd0effe3fd12b84808ba8a87c3e7924080 Mon Sep 17 00:00:00 2001 From: Matias Alejo Garcia Date: Thu, 19 Oct 2017 14:52:53 -0300 Subject: [PATCH] add rateLimiter to estimateFee --- lib/common/defaults.js | 9 +++++++++ lib/expressapp.js | 17 +++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/common/defaults.js b/lib/common/defaults.js index 670b167..efce6e8 100644 --- a/lib/common/defaults.js +++ b/lib/common/defaults.js @@ -108,6 +108,15 @@ Defaults.RateLimit = { max: 20, // start blocking after 20 request message: "Too many wallets created from this IP, please try again after an hour" }, + estimateFee: { + windowMs: 60 * 10 *1000, // 10 min window + delayAfter: 10, // begin slowing down responses after the 3rd request + delayMs: 300, // slow down subsequent responses by 3 seconds per request + + max: 20, // start blocking after 200 request + message: "Too many request" + }, + // otherPosts: { // windowMs: 60 * 60 * 1000, // 1 hour window // max: 1200 , // 1 post every 3 sec average, max. diff --git a/lib/expressapp.js b/lib/expressapp.js index d6e11dc..98b62fe 100644 --- a/lib/expressapp.js +++ b/lib/expressapp.js @@ -431,8 +431,21 @@ ExpressApp.prototype.start = function(opts, cb) { }); }); + var estimateFeeLimiter; + + if (Defaults.RateLimit.estimateFee && !opts.ignoreRateLimiter) { + log.info('', 'Limiting estimate fee per IP: %d req/h', (Defaults.RateLimit.estimateFee.max / Defaults.RateLimit.estimateFee.windowMs * 60 * 60 * 1000).toFixed(2)) + estimateFeeLimiter = new RateLimit(Defaults.RateLimit.estimateFee); + // router.use(/\/v\d+\/wallets\/$/, createWalletLimiter) + } else { + estimateFeeLimiter = function(req, res, next) { + next() + }; + } + + // DEPRECATED - router.get('/v1/feelevels/', function(req, res) { + router.get('/v1/feelevels/', estimateFeeLimiter, function(req, res) { logDeprecated(req); var opts = {}; if (req.query.network) opts.network = req.query.network; @@ -452,7 +465,7 @@ ExpressApp.prototype.start = function(opts, cb) { }); }); - router.get('/v2/feelevels/', function(req, res) { + router.get('/v2/feelevels/', estimateFeeLimiter, function(req, res) { var opts = {}; if (req.query.coin) opts.coin = req.query.coin; if (req.query.network) opts.network = req.query.network;