feat(apps.web.middleware#ratelimit): return HttpErrclass or instead than send a response

Signed-off-by: Hanif Dwy Putra S <47862061+hansputera@users.noreply.github.com>
This commit is contained in:
Hanif Dwy Putra S
2022-07-29 12:49:40 +00:00
parent 174b80548b
commit 1e2edfb28a

View File

@@ -1,28 +1,26 @@
import type {NextApiRequest, NextApiResponse} from 'next';
import {rateLimitConfig} from '../config';
import {HttpError} from '../errors';
import {client} from '../lib';
export const ratelimitMiddleware = async (
req: NextApiRequest,
res: NextApiResponse,
_res: NextApiResponse,
) => {
const ip = req.headers['x-real-ip'] || req.headers['x-forwarded-for'];
if (!rateLimitConfig.enable || process.env.NODE_ENV === 'development')
return true;
else if (!ip) {
return res
.status(401)
.json({message: "Couldn't find your real ip address."});
}
return undefined;
else if (!ip)
throw new HttpError("Couldn't find your real ip address!").setCode(401);
const result = await client.get('rate-'.concat(ip.toString()));
if (result) {
if (parseInt(result) > rateLimitConfig.maxRatelimitPerXSeconds) {
return res.status(429).json({
message: 'Please try again, you are getting ratelimit!',
});
throw new HttpError(
'Please try again, you are getting ratelimit!',
).setCode(429);
}
client.incr('rate-'.concat(ip.toString()));
return true;
return undefined;
} else {
client.set(
'rate-'.concat(ip.toString()),
@@ -30,6 +28,6 @@ export const ratelimitMiddleware = async (
'EX',
rateLimitConfig.ratelimitTime,
);
return true;
return undefined;
}
};