Fix memory leaks in rate limiter

pull/306/head
Tim Robinson 2016-04-28 10:10:39 +00:00
rodzic 2afa1ad468
commit 2a99b3449d
1 zmienionych plików z 13 dodań i 15 usunięć

28
node_modules/c9/ratelimit.js wygenerowano vendored
Wyświetl plik

@ -6,26 +6,24 @@ var error = require("http-error");
module.exports = ratelimit;
function ratelimit(key, duration, max) {
var limit = {};
var counts = {};
return function(req, res, next) {
var handle = req.params[key];
var lim = limit[handle] || (limit[handle] = []);
var now = Date.now();
for (var i = 0; i < lim.length; i++) {
if (now - lim[i] > duration) {
lim.splice(i, 1);
i--;
}
else break;
}
if (lim.length > max) {
counts[handle] = counts[handle] || 0;
if (counts[handle] >= max) {
var err = new error.TooManyRequests("Rate limit exceeded");
err.retryIn = duration - (Date.now() - lim[0]);
next(err);
return;
err.retryIn = Math.min(duration, 5000);
return next(err);
}
lim.push(Date.now());
counts[handle]++;
setTimeout(function () {
counts[handle]--;
if (counts[handle] == 0) {
delete counts[handle];
}
}, duration);
return next();
};