UNPKG

@lcap/nasl

Version:

NetEase Application Specific Language

115 lines 3.98 kB
"use strict"; 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