From 312e11e7c1f78dbcfb86299a3ce5289acc5334b5 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sun, 22 Jan 2023 11:31:48 -0500 Subject: [PATCH] fix: Any error from rate limiter results in 'Rate limit exceeded' screen --- server/middlewares/rateLimiter.ts | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/server/middlewares/rateLimiter.ts b/server/middlewares/rateLimiter.ts index aaedc3610..2ef85e925 100644 --- a/server/middlewares/rateLimiter.ts +++ b/server/middlewares/rateLimiter.ts @@ -2,6 +2,7 @@ import { Context, Next } from "koa"; import { defaults } from "lodash"; import env from "@server/env"; import { RateLimitExceededError } from "@server/errors"; +import Logger from "@server/logging/Logger"; import Metrics from "@server/logging/Metrics"; import Redis from "@server/redis"; import RateLimiter from "@server/utils/RateLimiter"; @@ -27,19 +28,23 @@ export function defaultRateLimiter() { try { await limiter.consume(key); } catch (rateLimiterRes) { - ctx.set("Retry-After", `${rateLimiterRes.msBeforeNext / 1000}`); - ctx.set("RateLimit-Limit", `${limiter.points}`); - ctx.set("RateLimit-Remaining", `${rateLimiterRes.remainingPoints}`); - ctx.set( - "RateLimit-Reset", - `${new Date(Date.now() + rateLimiterRes.msBeforeNext)}` - ); + if (rateLimiterRes.points) { + ctx.set("Retry-After", `${rateLimiterRes.msBeforeNext / 1000}`); + ctx.set("RateLimit-Limit", `${limiter.points}`); + ctx.set("RateLimit-Remaining", `${rateLimiterRes.remainingPoints}`); + ctx.set( + "RateLimit-Reset", + `${new Date(Date.now() + rateLimiterRes.msBeforeNext)}` + ); - Metrics.increment("rate_limit.exceeded", { - path: ctx.path, - }); + Metrics.increment("rate_limit.exceeded", { + path: ctx.path, + }); - throw RateLimitExceededError(); + throw RateLimitExceededError(); + } else { + Logger.error("Rate limiter error", rateLimiterRes); + } } return next();