@lcap/nasl
Version:
NetEase Application Specific Language
115 lines • 3.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getCallLogicData = void 0;
async function getCallLogicData(app, validations) {
function getValidationMap(serverData) {
const map = new Map();
Object.values(serverData).forEach((logic) => {
logic.forEach((item) => {
map.set(item.uuid, item);
});
});
return map;
}
function clearValidationMap(serverData) {
Object.values(serverData).forEach((logic) => {
logic.forEach((item) => {
item.rules = [];
item.failureRules = [];
});
});
return serverData;
}
function mergeValidation(serverData, nasl) {
const map = getValidationMap(serverData);
if (map.size === 0) {
return {};
}
nasl.traverseStrictChildren((node) => {
if (node.concept === 'CallLogic' &&
node.validation &&
'uuid' in node &&
map.has(node.uuid)) {
const data = map.get(node.uuid);
const naslRules = node.validation.rules.map((rule) => rule.toJSON());
data.rules = [...naslRules, ...data.rules];
}
});
return serverData;
}
/**
* 移除密码的验证规则
* @description 之后可能移除
*/
function removePasswordValidation(serverData, nasl) {
const validationMap = getValidationMap(serverData);
if (validationMap.size === 0) {
return {};
}
const passwordCallLogicUuid = new Set();
const removeRuleNames = [
"rangeLength",
"pattern",
"^az",
"^az09",
"^az09_",
"^azAZ",
"^azAZ09",
"^azAZ09_",
"az09$",
"azAZ09$",
"^09$",
"^az09$",
"^az09-$",
"^az09-.$",
"^azAZ09$",
"^azAZ09-$",
"^azAZ09_$",
"^azAZ09-_$",
];
// 获取所有调用加密函数的调用节点 uuid
nasl.traverseStrictChildren((node) => {
if (!('uuid' in node) ||
!('concept' in node) ||
node.concept !== 'CallLogic') {
return;
}
const calledLogicPath = `${node.calleeNamespace}.${node.calleeName}`;
if (Boolean(node.uuid) &&
(calledLogicPath === 'app.dataSources.defaultDS.entities.LCAPUser.logics.update' ||
calledLogicPath === 'app.dataSources.defaultDS.entities.LCAPUser.logics.create' ||
calledLogicPath.includes('encrypt'))) {
passwordCallLogicUuid.add(node.uuid);
}
});
if (passwordCallLogicUuid.size === 0) {
return serverData;
}
passwordCallLogicUuid.forEach((uuid) => {
const validation = validationMap.get(uuid);
if (!validation) {
return;
}
for (let i = 0; i < validation.rules.length; i++) {
const current = validation.rules[i];
if (removeRuleNames.includes(current.calleeName)) {
validation.rules.splice(i, 1);
i--;
}
}
});
return serverData;
}
const { preferenceMap: { serverValidationRules, }, } = app;
const serverValidationRulesBySwitch = serverValidationRules === 'custom'
? // 自定义
mergeValidation(validations, app)
: serverValidationRules === 'auto'
? // 自动
validations
: // 关闭
clearValidationMap(validations);
return removePasswordValidation(serverValidationRulesBySwitch, app);
}
exports.getCallLogicData = getCallLogicData;
//# sourceMappingURL=validation.js.map