Files
SponsorBlockServer/src/middleware/requestRateLimit.ts
2021-07-12 02:12:22 -04:00

28 lines
1.0 KiB
TypeScript

import {getIP} from "../utils/getIP";
import {getHash} from "../utils/getHash";
import rateLimit from "express-rate-limit";
import {RateLimitConfig} from "../types/config.model";
import {Request} from "express";
import { isUserVIP } from "../utils/isUserVIP";
import { UserID } from "../types/user.model";
export function rateLimitMiddleware(limitConfig: RateLimitConfig, getUserID?: (req: Request) => UserID): rateLimit.RateLimit {
return rateLimit({
windowMs: limitConfig.windowMs,
max: limitConfig.max,
message: limitConfig.message,
statusCode: limitConfig.statusCode,
headers: false,
keyGenerator: (req) => {
return getHash(getIP(req), 1);
},
handler: async (req, res, next) => {
if (getUserID === undefined || !await isUserVIP(getHash(getUserID(req)))) {
return res.status(limitConfig.statusCode).send(limitConfig.message);
} else {
return next();
}
}
});
}