'custome defined'

/*---------------
   解密有几种情况
   1、明文传输数据，数据里面带有sign签名。这种情况不需要进行解密
   2、全密文传输，解密以后里面带有明文数据
   加密有几种情况
   1、摘出来需要加密的部分，进行sign签名，嵌入到传输数据种
   2、全文进行加密
   拓展，有些
    解密过程可能需要多次处理才能完成，那么这里就是需要写成具体的代码来进行处理。并且能进行详细的调试
    加密过程，需要进行多次处理才能完成，那个这里需要写成具体的代码处理块来进行处理。


     */



function requireFromString(src, filename) {
    var Module = module.constructor;
    var m = new Module();
    //默认经历过解密后的都是明文的结果
    m._compile(`module.exports = { do:function(ctx){${src}}}`, filename);
    return m.exports;
}
module.exports = {
    //初始化加解密器具
    init: function () {
        this.role_exports = {}
    },
    //获取加解密规则
    //不知道什么时候用
    getRole: function () {

    },
    // 单个设置加解密代码规则
    setRole: function (role) {
        if(this.role_exports[role.project_id] == undefined){
            this.role_exports[role.project_id] = {}
        }
        this.role_exports[role.project_id][role.url] = requireFromString(role.function_str)
    },
    // 批量设置加解密代码规则
    setRoles: function (roles) {
        roles.forEach(function(item,index) {
            this.setRole(item)
        }, this);
    },
    encode: function () {
        ctx = arguments[0]
        if (ctx.bpRouter.encode_route == false) {
            return
        } else {
            // 按照ctx.bpRouter.encode_route里面的规则进行处理
        }
    },

    decode: function (ctx) {
        if (ctx.bpRouter.decode_route == false) {
            return
        } else {
            // 按照ctx.bpRouter.decode_route里面的规则进行处理
        }
    }
}