summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgumi <git@gumi.ca>2020-03-03 17:23:36 -0500
committergumi <git@gumi.ca>2020-03-03 17:23:36 -0500
commitf95e97717cdcdb0fa030e784c30b21aa1c04c5e6 (patch)
tree20cf52bf29d39b81310390a2da03071e3deb203d
parentfb87984b6d30f78792b5721023c0c66aefcd490a (diff)
downloadapi-f95e97717cdcdb0fa030e784c30b21aa1c04c5e6.tar.gz
api-f95e97717cdcdb0fa030e784c30b21aa1c04c5e6.tar.bz2
api-f95e97717cdcdb0fa030e784c30b21aa1c04c5e6.tar.xz
api-f95e97717cdcdb0fa030e784c30b21aa1c04c5e6.zip
improve rate limiter logging
-rw-r--r--src/limiter.js28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/limiter.js b/src/limiter.js
index 2760ad3..9239fb7 100644
--- a/src/limiter.js
+++ b/src/limiter.js
@@ -19,17 +19,27 @@ const setLimiter = (req, cooldown = 1e3) => {
// if cooldown is above 5min, assume they did something bad
if (cooldown >= 3e5) {
const bad_level = (bad_actors.get(req.ip) || 0) + 1;
- bad_actors.set(req.ip, bad_level);
- setTimeout(() => {
- bad_actors.set(req.ip, (bad_actors.get(req.ip) || 1) - 1);
- console.info(`Limiter: decreasing threat level of IP [${req.ip}]`);
- }, BAN_HOURS * 3.6e6); // decrease danger level every X hours
-
- if (bad_level >= MAX_DANGER) {
- req.app.locals.logger.warn(`Limiter: banning IP for ${BAN_HOURS} hours [${req.ip}]`);
+ if (bad_level > MAX_DANGER) {
+ console.warn(`Limiter: bad actor above max danger level [${req.ip}]`);
} else {
- console.warn(`Limiter: bad actor [${req.ip}]`);
+ bad_actors.set(req.ip, bad_level);
+ setTimeout(() => {
+ const current_level = bad_actors.get(req.ip) || 1;
+ bad_actors.set(req.ip, current_level - 1);
+
+ if (current_level === MAX_DANGER) {
+ req.app.locals.logger.info(`Limiter: unbanning IP (ban expired) [${req.ip}]`);
+ } else {
+ console.info(`Limiter: decreasing threat level of IP (was level ${current_level}) [${req.ip}]`);
+ }
+ }, BAN_HOURS * 3.6e6); // decrease danger level every X hours
+
+ if (bad_level === MAX_DANGER) {
+ req.app.locals.logger.warn(`Limiter: banning IP for ${BAN_HOURS} hours [${req.ip}]`);
+ } else {
+ console.warn(`Limiter: bad actor (threat level ${bad_level}) [${req.ip}]`);
+ }
}
}