import { genCode } from '../../../shared/pubUtils/util'; import { MsgEncrypt } from "../../../shared/pubUtils/sysUtil"; import { Context } from 'egg'; module.exports = (options: any) => { return async function parmsDecode(ctx: Context, next: () => Promise) { let url = ctx.request.url; ctx.logcode = genCode(10); if (url.indexOf("/dev") == 0 || url.indexOf("/web") == 0 || url.indexOf("/cb") == 0) { ctx.service.utils.log('INFO', `[${ctx.request.url}] [${ctx.logcode}] request: ${JSON.stringify(ctx.request.body)}`); await next(); ctx.service.utils.log('INFO', `[${ctx.request.url}] [${ctx.logcode}] res: ${JSON.stringify(ctx.body)}`) return; } if (options.threshold && ctx.length < options.threshold) return; const reqBody = ctx.request.body; const reqHeader = ctx.request.header; console.log(ctx.app.config.decodeParm) if (ctx.app.config.decodeParm == false) { await next(); return; } if (!reqBody.data) return; const k = typeof reqHeader['k'] === 'string' ? reqHeader['k'] : reqHeader['k'][0]; const v = typeof reqHeader['v'] === 'string' ? reqHeader['v'] : reqHeader['v'][0]; let msgEncrypt = new MsgEncrypt({ encodeK: k, encodeV: v }); console.log(`encode str ${msgEncrypt.encryptMsg(reqBody)}`); try { let decryptResult = msgEncrypt.decryptMsg(reqBody.data); if (!decryptResult) throw new Error('params parse err'); ctx.request.body = decryptResult; console.log('req body:', ctx.request.body); ctx.service.utils.log('INFO', `[${ctx.request.url}] [${ctx.logcode}] request: ${JSON.stringify(ctx.request.body)}`) } catch (e) { console.error('parms parse err'); ctx.service.utils.log('ERROR', `[${ctx.request.url}] [${ctx.logcode}] request: parms parse err`) } try { await next(); } catch (e) { ctx.service.utils.log('ERROR', `[${ctx.request.url}] [${ctx.logcode}] err: ${(e).stack}`); throw e; } const resBody = ctx.body; console.log('return value:', JSON.stringify(resBody)); let resBodyWithEncrypt = msgEncrypt.encryptMsg(resBody); if (resBodyWithEncrypt) { ctx.body = { result: resBodyWithEncrypt }; ctx.service.utils.log('INFO', `[${ctx.request.url}] [${ctx.logcode}] res: ${JSON.stringify(resBody)}`) } else { ctx.body = { result: msgEncrypt.encryptMsg({ status: 3, data: 'internal err' }) }; ctx.service.utils.log('ERROR', `[${ctx.request.url}] [${ctx.logcode}] res: ${resBody}`) } }; };