46 lines
1.0 KiB
JavaScript
Raw Normal View History

'use strict';
const utils = require('@strapi/utils');
const { has, toLower } = require('lodash/fp');
const { RateLimitError } = utils.errors;
module.exports =
(config, { strapi }) =>
async (ctx, next) => {
let ratelimitConfig = strapi.config.get('admin.ratelimit');
2022-12-27 08:20:38 -07:00
if (!ratelimitConfig) {
ratelimitConfig = {
enabled: true,
};
}
2022-12-27 08:20:38 -07:00
if (!has('enabled', ratelimitConfig)) {
ratelimitConfig.enabled = true;
}
if (ratelimitConfig.enabled === true) {
const ratelimit = require('koa2-ratelimit').RateLimit;
const userEmail = toLower(ctx.request.body.email) || 'unknownEmail';
2022-12-27 08:20:38 -07:00
const loadConfig = {
interval: { min: 5 },
max: 5,
prefixKey: `${userEmail}:${ctx.request.path}:${ctx.request.ip}`,
handler() {
throw new RateLimitError();
},
...ratelimitConfig,
...config,
2022-12-27 08:20:38 -07:00
};
console.log(loadConfig);
return ratelimit.middleware(loadConfig)(ctx, next);
}
return next();
};