Add support for customizing all daemon api cmds

This commit is contained in:
joeuhren
2020-12-07 21:32:43 -07:00
parent c7efaad294
commit 4240178255
11 changed files with 936 additions and 440 deletions
+121 -52
View File
@@ -29,19 +29,38 @@ module.exports = function(){
var command = [];
if (method == 'sendmany' ||
method == 'getmasternodecountonline' ||
method == 'getmasternodecount' ||
method == 'getmasternodelist' ||
method == 'getvotelist') {
command = specialApiCase(method);
} else if (method == 'verifymessage') {
command = specialApiCase(method, query_parameters);
} else {
command = [{
method: method,
params: params
}];
switch (method) {
case 'getnetworkhashps':
case 'getmininginfo':
case 'getdifficulty':
case 'getconnectioncount':
case 'getblockcount':
case 'getblockhash':
case 'getblock':
case 'getrawtransaction':
case 'getsupply':
case 'getinfo':
case 'gettxoutsetinfo':
case 'getmaxmoney':
case 'getmaxvote':
case 'getvote':
case 'getphase':
case 'getreward':
case 'getnextrewardestimate':
case 'getnextrewardwhenstr':
case 'getvotelist':
case 'getmasternodecount':
case 'getmasternodelist':
case 'verifymessage':
case 'sendmany':
command = specialApiCase(method, query_parameters);
break;
default:
command = [{
method: method,
params: params
}];
break;
}
client.cmd(command, function(err, response){
@@ -75,11 +94,99 @@ module.exports = function(){
else res.end('This method is restricted.');
}
}
function prepareRpcCommand(cmd, addParams) {
var method_name = '';
var params = addParams || [];
// Check for null/blank string
if (cmd != null && cmd.trim() != '') {
// Split cmd by spaces
var split = cmd.split(' ');
for (i=0; i<split.length; i++) {
if (i==0)
method_name = split[i];
else
params.push(split[i]);
}
}
return { method: method_name, parameters: params };
}
function specialApiCase(method_name, query_parameters){
var params = [];
switch(method_name) {
switch (method_name) {
case 'getnetworkhashps':
case 'getmininginfo':
case 'getdifficulty':
case 'getconnectioncount':
case 'getblockcount':
case 'getsupply':
case 'getinfo':
case 'gettxoutsetinfo':
case 'getmaxmoney':
case 'getmaxvote':
case 'getvote':
case 'getphase':
case 'getreward':
case 'getnextrewardestimate':
case 'getnextrewardwhenstr':
case 'getvotelist':
case 'getmasternodecount':
case 'getmasternodelist':
var cmd = prepareRpcCommand(settings.api_cmds[method_name]);
method_name = cmd.method;
params = cmd.parameters;
break;
case 'getblockhash':
for (var parameter in query_parameters) {
if (query_parameters.hasOwnProperty(parameter) && (parameter == 'height' || parameter == 'index'))
params.push(parseInt(query_parameters[parameter]));
}
var cmd = prepareRpcCommand(settings.api_cmds.getblockhash, params);
method_name = cmd.method;
params = cmd.parameters;
break;
case 'getblock':
for (var parameter in query_parameters) {
if (query_parameters.hasOwnProperty(parameter) && parameter == 'hash')
params.push(query_parameters[parameter]);
}
var cmd = prepareRpcCommand(settings.api_cmds.getblock, params);
method_name = cmd.method;
params = cmd.parameters;
break;
case 'getrawtransaction':
for (var parameter in query_parameters) {
if (query_parameters.hasOwnProperty(parameter)) {
if (parameter == 'txid')
params.push(query_parameters[parameter]);
else if (parameter == 'decrypt')
params.push(parseInt(query_parameters[parameter]));
}
}
var cmd = prepareRpcCommand(settings.api_cmds.getrawtransaction, params);
method_name = cmd.method;
params = cmd.parameters;
break;
case 'verifymessage':
for (var parameter in query_parameters) {
if (query_parameters.hasOwnProperty(parameter)) {
if (parameter == 'address' || parameter == 'message')
params.push(query_parameters[parameter]);
if (parameter == 'signature') {
var param = decodeURIComponent(query_parameters[parameter]);
while (param.indexOf(" ") > -1) {
param = param.replace(" ", "+");
}
params.push(param);
}
}
}
break;
case 'sendmany':
var after_account = false;
var before_min_conf = true;
@@ -107,44 +214,6 @@ module.exports = function(){
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<sSplit.length; i++) {
if (i==0)
method_name = sSplit[i];
else
params.push(sSplit[i]);
}
break;
case 'verifymessage':
for (var parameter in query_parameters) {
if (query_parameters.hasOwnProperty(parameter)) {
if (parameter == 'address' || parameter == 'message')
params.push(query_parameters[parameter]);
if (parameter == 'signature') {
var param = decodeURIComponent(query_parameters[parameter]);
while (param.indexOf(" ") > -1) {
param = param.replace(" ", "+");
}
params.push(param);
}
}
}
break;
}
return [{