var onode = require('./node'); var express = require('express'); var settings = require('./settings'); module.exports = function(){ function express_app(){ var app = express(); app.get('*', hasAccess, function(req, res){ var method = req.path.substring(1,req.path.length); if('undefined' != typeof requires_passphrase[method]){ if(wallet_passphrase) client.walletPassphrase(wallet_passphrase, 10); else res.send('A wallet passphrase is needed and has not been set.'); } var query_parameters = req.query; var params = []; for(var parameter in query_parameters){ if(query_parameters.hasOwnProperty(parameter)){ var param = query_parameters[parameter]; if(!isNaN(param)){ param = parseFloat(param); } params.push(param); } } var command = []; if (method == 'sendmany' || method == 'getmasternodecountonline' || method == 'getmasternodecount' || method == 'getmasternodelist' || method == 'getvotelist') { command = specialApiCase(method); } else { command = [{ method: method, params: params }]; } client.cmd(command, function(err, response){ if(err){console.log(err); res.send("There was an error. Check your console.");} else{ if(typeof response === 'object'){ res.json(response); } else{ res.send(""+response); } } }); }); function hasAccess(req, res, next){ if(accesslist.type == 'all'){ return next(); } var method = req.path.substring(1,req.path.length); if('undefined' == typeof accesslist[method]){ if(accesslist.type == 'only') res.end('This method is restricted.'); else return next(); } else{ if(accesslist[method] == true){ return next(); } else res.end('This method is restricted.'); } } function specialApiCase(method_name){ var params = []; switch(method_name) { case 'sendmany': var after_account = false; var before_min_conf = true; var address_info = {}; for(var parameter in query_parameters){ if(query_parameters.hasOwnProperty(parameter)){ if(parameter == 'minconf'){ before_min_conf = false; params.push(address_info); } var param = query_parameters[parameter]; if(!isNaN(param)){ param = parseFloat(param); } if(after_account && before_min_conf){ address_info[parameter] = param; } else { params.push(param); } if(parameter == 'account') after_account = true; } } if(before_min_conf){ params.push(address_info); } break; case 'getvotelist': method_name = 'masternodelist' params.push('votes'); break; case 'getmasternodelist': method_name = 'masternode' params.push('list'); break; case 'getmasternodecountonline': method_name = 'masternode'; params.push('count'); params.push('enabled'); break; case 'getmasternodecount': // split cmd by spaces var sSplit = settings.api_cmds.masternode_count.split(' '); for (i=0; i