From bbf42aaf97a42e4097aa9805d4e07e8f214a08a2 Mon Sep 17 00:00:00 2001 From: Andrew Zhu Date: Fri, 25 May 2018 01:39:35 -0700 Subject: [PATCH] make ratelimiter actually match, return time to reset on hitting ratelimit --- rpg-docs/Routes/API.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/rpg-docs/Routes/API.js b/rpg-docs/Routes/API.js index ba0a78c1..9978728c 100644 --- a/rpg-docs/Routes/API.js +++ b/rpg-docs/Routes/API.js @@ -44,9 +44,11 @@ var ifKeyValid = function(apiKey, response, method, callback){ } else if (!isKeyValid(apiKey)){ response.writeHead(403, "API key is invalid"); response.end(); - } else if (isRateLimited(apiKey)){ + } else if (isRateLimited(apiKey, method)){ response.writeHead(429, "Too many requests"); - response.end(); + response.end(JSON.stringify({ + "timeToReset": rateLimiter.check({apiKey: apiKey, method: method}).timeToReset + })); } else { rateLimiter.increment({apiKey: apiKey, method: method}) callback(); @@ -66,8 +68,8 @@ rateLimiter.addRule({apiKey: String, method: "vmixCharacter"}, 2, 10000); rateLimiter.addRule({apiKey: String, method: "vmixParty"}, 2, 10000); rateLimiter.addRule({apiKey: String, method: "jsonCharacterSheet"}, 5, 5000); -var isRateLimited = function(apiKey){ - const limited = !rateLimiter.check({apiKey}).allowed +var isRateLimited = function(apiKey, method){ + const limited = !rateLimiter.check({apiKey: apiKey, method: method}).allowed if (limited) { console.log(`Rate limit hit by API key ${apiKey}`); return true;