monkeytype/backend/middlewares/rate-limit.js
2021-08-29 17:33:51 +01:00

68 lines
1.5 KiB
JavaScript

const rateLimit = require("express-rate-limit");
let multiplier = process.env.MODE === "dev" ? 100 : 1;
exports.limit60perhour = rateLimit({
windowMs: 60 * 60 * 1000, // 60 min
max: 60 * multiplier,
message: {
message: "Too many requests, please try again later",
},
keyGenerator: (req) => {
return `${
req.headers["cf-connecting-ip"] ||
req.headers["x-forwarded-for"] ||
req.ip ||
"255.255.255.255"
}`;
},
});
exports.limit3perday = rateLimit({
windowMs: 24 * 60 * 60 * 1000, // 1 day
max: 3 * multiplier,
message: {
message: "Too many requests, please try again later",
},
keyGenerator: (req) => {
return `${
req.headers["cf-connecting-ip"] ||
req.headers["x-forwarded-for"] ||
req.ip ||
"255.255.255.255"
}`;
},
});
exports.limit1persec = rateLimit({
windowMs: 60 * 1000,
max: 60 * multiplier,
message: {
message: "Too many requests, please try again later",
},
keyGenerator: (req) => {
return `${
req.headers["cf-connecting-ip"] ||
req.headers["x-forwarded-for"] ||
req.ip ||
"255.255.255.255"
}`;
},
});
exports.limit500perhour = rateLimit({
windowMs: 60 * 60 * 1000,
max: 500 * multiplier,
message: {
message: "Too many requests, please try again later",
},
keyGenerator: (req) => {
return `${
req.headers["cf-connecting-ip"] ||
req.headers["x-forwarded-for"] ||
req.ip ||
"255.255.255.255"
}`;
},
});