diff --git a/backend/build.gradle b/backend/build.gradle index aaec739..6f95df4 100755 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -78,7 +78,7 @@ task copyAssets(type: Copy) { into "./build/output/assets/" } -def currVersion = "0.0.4" +def currVersion = "0.0.5" task copyJar(type: Copy, dependsOn: [":backend:copyLibs",":backend:jar"]) { from "./build/libs/$project.name-${project.version}.jar" into "./build/output/libs" diff --git a/backend/debugconf.json b/backend/debugconf.json index 30417e7..6512dda 100755 --- a/backend/debugconf.json +++ b/backend/debugconf.json @@ -2,7 +2,7 @@ "agentHttpAddr": "127.0.0.1:18000", "privKey": "589d94ee5688358a1c5c18430dd9c75097ddddebf769f139da36a807911d20f8", "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd", - "script": "./build/registry-0.0.1.ypk", + "script": "./build/registry-0.0.5.ypk", "killContract": "Registry", "createParam": { "privateKey": "4616ff0e2a4f982364914f9be30b51c6bc6ccb6602114a9ee8792f2ccf67465b", diff --git a/backend/src/main/java/org/bdware/sc/registry/RuleExecutor.java b/backend/src/main/java/org/bdware/sc/registry/RuleExecutor.java new file mode 100644 index 0000000..5bede64 --- /dev/null +++ b/backend/src/main/java/org/bdware/sc/registry/RuleExecutor.java @@ -0,0 +1,50 @@ +package org.bdware.sc.registry; + +import com.google.gson.JsonObject; +import org.bdware.sc.ContractProcess; +import org.bdware.sc.boundry.JavaScriptEntry; +import org.bdware.sc.engine.JSONTool; +import wrp.jdk.nashorn.api.scripting.NashornScriptEngine; +import wrp.jdk.nashorn.api.scripting.ScriptObjectMirror; +import wrp.jdk.nashorn.internal.runtime.PropertyMap; +import wrp.jdk.nashorn.internal.runtime.ScriptFunction; +import wrp.jdk.nashorn.internal.scripts.JO; + +public class RuleExecutor { + private static int executeCode; + + public static Object executeRule(ScriptObjectMirror som) { + executeCode = 0; + JsonObject jo = JSONTool.convertMirrorToJson(som).getAsJsonObject(); + Object val = som.get("localDataSample"); + JsonObject rule = jo.get("mapRule").getAsJsonObject(); + JO ret = new JO(PropertyMap.newMap()); + for (String str : rule.keySet()) { + ret.put(str, getMapResult(val, rule.get(str).getAsString()), false); + } + return ret; + } + + //{"localDataSample":{"owner":"abcdef","size":"1234"},"mapRule":{"所有者":"${val.owner}","大小":"${val.size*1000}","偏移过的大小":"${edp(val.size,30.0)}" }} + private static Object getMapResult(Object val, String fun) { + try { + NashornScriptEngine engine = ContractProcess.instance.engine.engine; + if (fun.matches("\\$\\{.*\\}")) { + fun = "function(val){ return " + fun.substring(2); + } + ScriptObjectMirror function = (ScriptObjectMirror) engine.eval(fun); + function.compileScriptFunction(); + return JavaScriptEntry.executeFunction((ScriptFunction) function.getScriptObject(), val); + } catch (Exception e) { + e.printStackTrace(); + //TODO GREP.... + executeCode = 1; + return "exception:" + e.getMessage(); + } + } + + public static int getLastExecuteStatus() { + return executeCode; + } + +} diff --git a/backend/src/main/java/org/bdware/sc/registry/RuleHelper.java b/backend/src/main/java/org/bdware/sc/registry/RuleHelper.java new file mode 100644 index 0000000..2ecddd0 --- /dev/null +++ b/backend/src/main/java/org/bdware/sc/registry/RuleHelper.java @@ -0,0 +1,27 @@ +package org.bdware.sc.registry; + +import com.alibaba.datax.transport.transformer.maskingMethods.differentialPrivacy.EpsilonDifferentialPrivacyImpl; +import com.alibaba.datax.transport.transformer.maskingMethods.irreversibleInterference.MD5EncryptionImpl; + +public class RuleHelper { + public static String md5(Object obj) { + try { + MD5EncryptionImpl masker = new MD5EncryptionImpl(); + return masker.execute(obj.toString()); + } catch (Exception e) { + return "*****" + e.getMessage() + "****"; + } + } + + public static Object edp(Object obj, double epsilon) { + try { + EpsilonDifferentialPrivacyImpl masker = new EpsilonDifferentialPrivacyImpl(); + double result = 0; + result = masker.maskOne(Double.valueOf(obj.toString()), epsilon); + return result; + } catch (Exception e) { + e.printStackTrace(); + return "***" + e.getMessage() + "***"; + } + } +} diff --git a/backend/yjs/Register.yjs b/backend/yjs/Register.yjs index 677afb1..07811db 100755 --- a/backend/yjs/Register.yjs +++ b/backend/yjs/Register.yjs @@ -1,16 +1,17 @@ import "User.yjs"; import "metaDetail.yjs"; -oracle Register{ - @ArgSchema({"!doId":"string","offset":"number","count":"number"}) - export function retrieve(){ - //executeContract去拿到Repo的原始结果 - //根据request进行判断,找到对应的rule - //将原始结果与rule做一个映射,得到转换后的结果 - //返回转换后的结果。 - return Transform.trans(abc); +import "ruleHelper.yjs"; +oracle Register { + @ArgSchema({"!doId":"string", "offset":"number", "count":"number"}) + export function retrieve() { + //executeContract去拿到Repo的原始结果 + //根据request进行判断,找到对应的rule + //将原始结果与rule做一个映射,得到转换后的结果 + //返回转换后的结果。 + return Transform.trans(abc); } - function onCreate(arg){ + function onCreate(arg) { Global.registerID = arg.registerID; org.bdware.sc.registry.RegistryDB.init(arg, requester); } diff --git a/backend/yjs/metaDetail.yjs b/backend/yjs/metaDetail.yjs index 3edd309..87e0589 100755 --- a/backend/yjs/metaDetail.yjs +++ b/backend/yjs/metaDetail.yjs @@ -1,261 +1,165 @@ -module metaStandardDetail{ - export function getRegistryInfo(arg){ - return {"code":0,"registryID":"macjw.ab","description":"这是xx市的注册表,添加更多Registry描述"}; - } - export function verifyRule(arg){ - return {"code":0,"msg":"success"} - } - export function getFieldTypeList(arg){ - return {"code":0, "data":[ - { - "typeName":"string", - "lable":"字符串", - "formDesc":{ - "固定值":{ - "type":"input" - }, - "默认值":{ - "type":"input" - }, - "最小长度":{ - "type":"input" - }, - "最大长度":{ - "type":"input" - }, - "必备项":{ - "type":"select", - "options":["是","否"] - }, - } - }, - { - "typeName":"boolean", - "lable":"真假", - "formDesc":{ - "固定值":{ - "type":"input" - }, - "默认值":{ - "type":"input" - }, - "必备项":{ - "type":"select", - "options":["是","否"] - }, - } - }, - ]}; - } - - export function listRemoteRegistry(){ - var ret = [ - {"registryID":"macjw","name":"jw市市级注册"}, - {"registryID":"macjw.de.cd","name":"jw市de县cd镇注册表"} - ]; - return { - "total":10,"data":ret,"code":0}; - - } - //{如果是offset+count,就按顺序, - // controlType=过滤 - // createStartDate createEndDate - // updateStartDate updateEndDate - // 如果是keyword:... 就模糊搜索} - // registryID - //{"createStartDate":16111,"createEndDate":12222,"offset":0,"count":5} - export function listMetaStandard(arg){ - var ret =[]; - ret.push({ - "name":"CO传感数据", - "createDate":167227222, - "updateDate":1111111, - "creator":"xxx", - "updater":"aabbcc", - "registryID":"macjw.ab", - "controlType":"private", - "typeList":["public","private"], - "status":"off", - "version":"2.1", - "doId":"ab.ccd/aaaaa-aaa", - "desc":"元数据标准说明", - "fields":[ - { - "name":"owner", - "type":"string", - "description":"简要的说明", - "constraint":{ - "固定值":"xxxxx", - "最大长度":50, - "必备项":"是", - } - }, - { - "name":"pubkey", - "type":"string", - "description":"pubkey简要的说明2", - "constraint":{ - "固定值":"jjjjjjj", - "最大长度":50 - } - } - ] - }, - { - "name":"BF传感数据", - "createDate":167226222, - "updateDate":1111311, - "creator":"xxx", - "updater":"aabbcc", - "registryID":"macjw", - "controlType":"public", - "typeList":["public","private"], - "status":"on", - "version":"2.1", - "doId":"ab.ccd/aabbbaa-aaa", - "desc":"元数据标准说明", - "fields":[ - { - "name":"repository", - "type":"string", - "description":"简要的说明", - "constraint":{ - "固定值":"xxx", - "最大长度":50, - "必备项":"是", - } - }, - { - "name":"format", - "type":"boolean", - "description":"简要的说明2", - "constraint":{ - "必备项":"否" - } - }, - { - "name":"registertime", - "type":"string", - "description":"registertime简要的说明333333333", - "constraint":{ - "固定值":"ooooo", - "默认值":"hhhhhhhh", - "最小长度":10, - "必备项":"否", - } - }, - ] - }, - { - "name":"AA传感数据", - "createDate":167227222, - "updateDate":1111111, - "creator":"xxx", - "updater":"aabbcc", - "registryID":"macjw.ab", - "controlType":"private", - "typeList":["public","private"], - "status":"off", - "version":"2.1", - "doId":"ab.ccd/adddda-aaa", - "desc":"元数据标准说明", - "fields":[ - { - "name":"owner", - "type":"string", - "description":"简要的说明", - "constraint":{ - "固定值":"xxxxx", - "最大长度":50, - "必备项":"是", - } - }, - { - "name":"pubkey", - "type":"string", - "description":"pubkey简要的说明2", - "constraint":{ - "固定值":"jjjjjjj", - "最大长度":50 - } - } - ] - }, - { - "name":"HHH传感数据", - "createDate":167227222, - "updateDate":1111111, - "creator":"xxx", - "updater":"aabbcc", - "registryID":"macjw.ac", - "controlType":"private", - "typeList":["public","private"], - "status":"on", - "version":"2.1", - "doId":"ab.ccd/aggga-aaa", - "desc":"元数据标准说明", - "fields":[ - { - "name":"owner", - "type":"string", - "description":"简要的说明", - "constraint":{ - "固定值":"xxxxx", - "最大长度":50, - "必备项":"是", - } - }, - { - "name":"pubkey", - "type":"string", - "description":"pubkey简要的说明2", - "constraint":{ - "固定值":"jjjjjjj", - "最大长度":50 - } - } - ] +module metaStandardDetail { + export function getRegistryInfo(arg) { + return { + "code":0, "registryID":"macjw.ab", "description":"这是xx市的注册表,添加更多Registry描述" + }; } - ); - return { - "total":10,"data":ret,"code":0}; - } - - export function updateMetaStandardDetail(arg){ - var ret =[]; - //通知对应的远程注册表,需要更新这个关系。 - return { - "total":10,"data":ret,"code":0}; - } - - //{"offset":..,"count":,"localMetaStandardDoid":} - export function listMetaStandardRelaction(arg){ - var ret = []; - ret.push({ - "name":"煤矿传感数据映射", - "localMetaStandardDoid":"xx.xx/adfa", - "remoteMetaStandardDoid":"ab.ccd/aaaaa-aaa", - "createDate":167227222, - "updateDate":1111111, - "creator":"aabbcc", - "updater":"aabbcc", - "mapRule":{ - "owner":"${val.大小}", - "pubkey":"function(val){}", - } - }); - return { - "total":10,"data":ret,"code":0}; - } - - //{"localMetaID":"xxx","mapRule":{},"remoteMetaID":"xxx"} - export function getPreviewMapResult(arg){ - return {"code":0, data:{"localData":{"大小":"500KB","姓名":"小东"},"remoteData":{"size":"500000Byte","name":"*东"}}}; + export function verifyRule(arg) { + return { + "code":0, "msg":"success" + } + + + + } + export function getFieldTypeList(arg) { + return { + "code":0, "data":[ + { + "typeName":"string", "lable":"字符串", "formDesc":{ + "固定值":{ + "type":"input" + }, "默认值":{ + "type":"input" + }, "最小长度":{ + "type":"input" + }, "最大长度":{ + "type":"input" + }, "必备项":{ + "type":"select", "options":["是", "否"] + }, } + }, { + "typeName":"boolean", "lable":"真假", "formDesc":{ + "固定值":{ + "type":"input" + }, "默认值":{ + "type":"input" + }, "必备项":{ + "type":"select", "options":["是", "否"] + }, } + }, ] + }; + } + + export function listRemoteRegistry() { + var ret = [ + { + "registryID":"macjw", "name":"jw市市级注册" + }, { + "registryID":"macjw.de.cd", "name":"jw市de县cd镇注册表" + } + ]; + return { + "total":10, "data":ret, "code":0 + }; + } +//{如果是offset+count,就按顺序, +// controlType=过滤 +// createStartDate createEndDate +// updateStartDate updateEndDate +// 如果是keyword:... 就模糊搜索} +// registryID +//{"createStartDate":16111,"createEndDate":12222,"offset":0,"count":5} + export function listMetaStandard(arg) { + var ret = []; + ret.push({ + "name":"CO传感数据", "createDate":167227222, "updateDate":1111111, "creator":"xxx", "updater":"aabbcc", "registryID":"macjw.ab", "controlType":"private", "typeList":["public", "private"], "status":"off", "version":"2.1", "doId":"ab.ccd/aaaaa-aaa", "desc":"元数据标准说明", "fields":[ + { + "name":"owner", "type":"string", "description":"简要的说明", "constraint":{ + "固定值":"xxxxx", "最大长度":50, "必备项":"是", } + }, { + "name":"pubkey", "type":"string", "description":"pubkey简要的说明2", "constraint":{ + "固定值":"jjjjjjj", "最大长度":50 + } + } + ] + }, { + "name":"BF传感数据", "createDate":167226222, "updateDate":1111311, "creator":"xxx", "updater":"aabbcc", "registryID":"macjw", "controlType":"public", "typeList":["public", "private"], "status":"on", "version":"2.1", "doId":"ab.ccd/aabbbaa-aaa", "desc":"元数据标准说明", "fields":[ + { + "name":"repository", "type":"string", "description":"简要的说明", "constraint":{ + "固定值":"xxx", "最大长度":50, "必备项":"是", } + }, { + "name":"format", "type":"boolean", "description":"简要的说明2", "constraint":{ + "必备项":"否" + } + }, { + "name":"registertime", "type":"string", "description":"registertime简要的说明333333333", "constraint":{ + "固定值":"ooooo", "默认值":"hhhhhhhh", "最小长度":10, "必备项":"否", } + }, ] + }, { + "name":"AA传感数据", "createDate":167227222, "updateDate":1111111, "creator":"xxx", "updater":"aabbcc", "registryID":"macjw.ab", "controlType":"private", "typeList":["public", "private"], "status":"off", "version":"2.1", "doId":"ab.ccd/adddda-aaa", "desc":"元数据标准说明", "fields":[ + { + "name":"owner", "type":"string", "description":"简要的说明", "constraint":{ + "固定值":"xxxxx", "最大长度":50, "必备项":"是", } + }, { + "name":"pubkey", "type":"string", "description":"pubkey简要的说明2", "constraint":{ + "固定值":"jjjjjjj", "最大长度":50 + } + } + ] + }, { + "name":"HHH传感数据", "createDate":167227222, "updateDate":1111111, "creator":"xxx", "updater":"aabbcc", "registryID":"macjw.ac", "controlType":"private", "typeList":["public", "private"], "status":"on", "version":"2.1", "doId":"ab.ccd/aggga-aaa", "desc":"元数据标准说明", "fields":[ + { + "name":"owner", "type":"string", "description":"简要的说明", "constraint":{ + "固定值":"xxxxx", "最大长度":50, "必备项":"是", } + }, { + "name":"pubkey", "type":"string", "description":"pubkey简要的说明2", "constraint":{ + "固定值":"jjjjjjj", "最大长度":50 + } + } + ] + } + ); + return { + "total":10, "data":ret, "code":0 + }; + } + + export function updateMetaStandardDetail(arg) { + var ret = []; + //通知对应的远程注册表,需要更新这个关系。 + return { + "total":10, "data":ret, "code":0 + }; + } + +//{"offset":..,"count":,"localMetaStandardDoid":} + export function listMetaStandardRelaction(arg) { + var ret = []; + ret.push({ + "name":"煤矿传感数据映射", "localMetaStandardDoid":"xx.xx/adfa", "remoteMetaStandardDoid":"ab.ccd/aaaaa-aaa", "createDate":167227222, "updateDate":1111111, "creator":"aabbcc", "updater":"aabbcc", "mapRule":{ + "owner":"${val.大小}", "pubkey":"function(val){}", } + }); + return { + "total":10, "data":ret, "code":0 + }; + } + +//{"localMetaID":"xxx","mapRule":{},"remoteMetaID":"xxx"} + export function getPreviewMapResult(arg) { + return { + "code":0, data:{ + "localData":{ + "大小":"500KB", "姓名":"小东" + }, "remoteData":{ + "size":"500000Byte", "name":"*东" + } + } + }; //TODO 返回映射格式有误 // return {"code":1,"....."} - } - //{"localDataSample":{},"mapRule":{},"remoteMetaID":"xxx"} - export function getMapResult(){ - return {"code":0, data: {"remoteData":{"size":"500000Byte","姓名":"*明"}}} - } + } + function convertArgToJson(arg) { + if (typeof(arg)=='string') return JSON.parse(arg); + return arg; + } +//{"localDataSample":{},"mapRule":{},"remoteMetaID":"xxx"} + export function getMapResult(arg) { + arg = convertArgToJson(arg); + var ret = { + }; + ret.data = org.bdware.sc.registry.RuleExecutor.executeRule(arg); + ret.code = org.bdware.sc.registry.RuleExecutor.getLastExecuteStatus(); + return ret; + } } diff --git a/backend/yjs/ruleHelper.yjs b/backend/yjs/ruleHelper.yjs new file mode 100755 index 0000000..5e7af50 --- /dev/null +++ b/backend/yjs/ruleHelper.yjs @@ -0,0 +1,8 @@ +module ruleHelper { + function md5(str) { + return org.bdware.sc.registry.RuleHelper.md5(str); + } + function edp(d1, d2) { + return org.bdware.sc.registry.RuleHelper.edp(d1, d2); + } +}