mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-15 07:57:05 +03:00
28 lines
1.0 KiB
TypeScript
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();
|
|
}
|
|
}
|
|
});
|
|
}
|