@jianghujs/jianghu
Version:
Progressive Enterprise Framework
38 lines (29 loc) • 900 B
JavaScript
;
const { BizError, errorInfoEnum } = require('../../../../app/constant/error');
const fs = require('fs');
module.exports = options => {
return async (ctx, next) => {
const { config } = ctx.app;
const { jianghuConfig = {} } = config;
if (!jianghuConfig.enableIpBlock) {
return await next();
}
const ip = ctx.ip;
if (!ip) {
return await next();
}
// 黑名单判断
if (jianghuConfig.ipBlocklist.includes(ip)) {
throw new BizError(errorInfoEnum.request_rate_limit_exceeded);
}
// 黑名单文件配置
if (jianghuConfig.ipBlocklistFilePath) {
const content = fs.readFileSync(jianghuConfig.ipBlocklistFilePath);
const ipList = content.split(/\r?\n/);
if (ipList.includes(ip)) {
throw new BizError(errorInfoEnum.request_rate_limit_exceeded);
}
}
return await next();
};
};