2018-08-24 13:05:19 +00:00
|
|
|
const vm = require('vm');
|
2018-05-23 15:16:56 +00:00
|
|
|
|
2018-08-24 13:05:19 +00:00
|
|
|
class RunCode {
|
2018-09-10 08:26:37 +00:00
|
|
|
constructor({logger}) {
|
|
|
|
this.logger = logger;
|
2018-09-11 08:27:19 +00:00
|
|
|
this.context = Object.assign({}, {
|
|
|
|
global, console, exports, require, module, __filename, __dirname, process,
|
|
|
|
setTimeout, setInterval, clearTimeout, clearInterval
|
|
|
|
});
|
2018-08-24 13:05:19 +00:00
|
|
|
}
|
2017-02-18 21:53:49 +00:00
|
|
|
|
2018-08-24 13:05:19 +00:00
|
|
|
doEval(code) {
|
2018-08-27 15:12:28 +00:00
|
|
|
try {
|
|
|
|
return vm.runInNewContext(code, this.context);
|
|
|
|
} catch(e) {
|
2018-09-10 12:57:54 +00:00
|
|
|
this.logger.error(e.message);
|
2018-08-27 15:12:28 +00:00
|
|
|
}
|
2018-08-24 13:05:19 +00:00
|
|
|
}
|
2017-02-18 21:53:49 +00:00
|
|
|
|
2018-08-24 13:05:19 +00:00
|
|
|
registerVar(varName, code) {
|
|
|
|
// TODO: Update all the code being dependent of web3
|
|
|
|
// To identify, look at the top of the file for something like:
|
|
|
|
// /*global web3*/
|
|
|
|
if (varName === 'web3') {
|
|
|
|
global.web3 = code;
|
|
|
|
}
|
2018-08-29 09:22:43 +00:00
|
|
|
this.context["global"][varName] = code;
|
2018-08-24 13:05:19 +00:00
|
|
|
this.context[varName] = code;
|
|
|
|
}
|
2018-05-23 15:16:56 +00:00
|
|
|
|
2018-08-24 13:05:19 +00:00
|
|
|
getWeb3Config() {
|
2018-09-17 03:03:55 +00:00
|
|
|
const Web3 = require('web3');
|
|
|
|
const provider = this.context.web3.currentProvider;
|
|
|
|
let providerUrl;
|
|
|
|
if(provider instanceof Web3.providers.HttpProvider){
|
|
|
|
providerUrl = provider.host;
|
|
|
|
}
|
|
|
|
else if(provider instanceof Web3.provider.WebsocketProvider){
|
|
|
|
providerUrl = provider.connection._url;
|
|
|
|
}
|
|
|
|
return {defaultAccount: this.context.web3.eth.defaultAccount, providerUrl: providerUrl};
|
2018-08-24 13:05:19 +00:00
|
|
|
}
|
2018-08-08 12:42:45 +00:00
|
|
|
}
|
|
|
|
|
2018-08-24 13:05:19 +00:00
|
|
|
module.exports = RunCode;
|