Clean meshuser merge

Noah Zalev committed Jul 8, 2021 at 10:21 UTC b05f65d819352b1487cf19655e85ba670476534e
1 file changed +239 -278
meshuser.js
+239 -278
@@ -1510,15 +1510,15 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1510 if (cmdargs.length == 0) break;
1511 const cmd = cmdargs[0].toLowerCase();
1512 cmdargs = parseArgs(cmdargs);
1513 + var cmdData = { result: '', command: command, cmdargs: cmdargs };
1514
1515 // Find the command in the lookup table and run it.
1515 - var cmdData = serverUserCommands[cmd], r = '';;
1516 - if (cmdData != null) {
1517 - try { r = cmdData[0](cmdargs); } catch (ex) { r = '' + ex; }
1518 - } else { r = 'Unknown command \"' + cmd + '\", type \"help\" for list of available commands.'; }
1516 + var cmdTableEntry = serverUserCommands[cmd];
1517 + if (cmdTableEntry != null) { try { cmdTableEntry[0](cmdData); } catch (ex) { cmdData.result = '' + ex; }
1518 + } else { cmdData.result = 'Unknown command \"' + cmd + '\", type \"help\" for list of available commands.'; }
1519
1520 // Send back the command result
1521 - if (r != '') { try { ws.send(JSON.stringify({ action: 'serverconsole', value: r, tag: command.tag })); } catch (ex) { } }
1521 + if (cmdData.result != '') { try { ws.send(JSON.stringify({ action: 'serverconsole', value: cmdData.result, tag: command.tag })); } catch (ex) { } }
1522 break;
1523 }
1524 case 'msg':
@@ -6179,7 +6179,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
6179 'showpaths': [serverUserCommandShowPaths, ""],
6180 'sms': [serverUserCommandSMS, ""],
6181 'swarmstats': [serverUserCommandSwarmStats, ""],
6182 - 'tasklimiter': [serverUserCommandTaslkLimiter, "Returns the internal status of the tasklimiter. This is a system used to smooth out work done by the server. It's used by, for example, agent updates so that not all agents are updated at the same time."],
6182 + 'tasklimiter': [serverUserCommandTaskLimiter, "Returns the internal status of the tasklimiter. This is a system used to smooth out work done by the server. It's used by, for example, agent updates so that not all agents are updated at the same time."],
6183 'trafficdelta': [serverUserCommandTrafficDelta, ""],
6184 'trafficstats': [serverUserCommandTrafficStats, ""],
6185 'updatecheck': [serverUserCommandUpdateCheck, ""],
@@ -6190,99 +6190,101 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
6190 'webstats': [serverUserCommandWebStats, ""]
6191 }
6192
6193 - function serverUserCommandHelp(cmdargs) {
6194 - var r, fin = '', f = '', availcommands = [];
6193 +
6194 + function serverUserCommandHelp(cmdData) {
6195 + var fin = '', f = '', availcommands = [];
6196 for (var i in serverUserCommands) { availcommands.push(i); }
6197 availcommands = availcommands.sort();
6198 while (availcommands.length > 0) { if (f.length > 80) { fin += (f + ',\r\n'); f = ''; } f += (((f != '') ? ', ' : ' ') + availcommands.shift()); }
6199 if (f != '') { fin += f; }
6199 - if (cmdargs['_'].length == 0) {
6200 - r = 'Available commands: \r\n' + fin + '\r\nType help <command> for details.';
6200 +
6201 + if (cmdData.cmdargs['_'].length == 0) {
6202 + cmdData.result = 'Available commands: \r\n' + fin + '\r\nType help <command> for details.';
6203 } else {
6202 - var cmd2 = cmdargs['_'][0].toLowerCase();
6203 - var cmddata = serverUserCommands[cmd2];
6204 - if (cmddata) { if (cmddata[1] == '') { r = "No help available for this command."; } else { r = cmddata[1]; } } else { r = "This command does not exist."; }
6204 + var cmd2 = cmdData.cmdargs['_'][0].toLowerCase();
6205 + var cmdTableEntry = serverUserCommands[cmd2];
6206 + if (cmdTableEntry) {
6207 + if (cmdTableEntry[1] == '') {
6208 + cmdData.result = 'No help available for this command.'
6209 + } else {
6210 + cmdData.result = cmdTableEntry[1]; }
6211 + } else {
6212 + cmdData.result = "This command does not exist.";
6213 + }
6214 }
6206 - return r;
6215 }
6216
6209 - function serverUserCommandCertExpire(cmdargs) {
6210 - var r = '';
6217 + function serverUserCommandCertExpire(cmdData) {
6218 const now = Date.now();
6219 for (var i in parent.webCertificateExpire) {
6220 const domainName = (i == '') ? '[Default]' : i;
6214 - r += domainName + ', expires in ' + Math.floor((parent.webCertificateExpire[i] - now) / 86400000) + ' day(s)\r\n';
6221 + cmdData.result += domainName + ', expires in ' + Math.floor((parent.webCertificateExpire[i] - now) / 86400000) + ' day(s)\r\n';
6222 }
6216 - return r;
6223 }
6224
6219 - function serverUserCommandWebPush(cmdargs) {
6225 + function serverUserCommandWebPush(cmdData) {
6226 if (parent.parent.webpush == null) {
6221 - r = "Web push not supported.";
6227 + cmdData.result = "Web push not supported.";
6228 } else {
6223 - if (cmdargs['_'].length != 1) {
6224 - r = "Usage: WebPush \"Message\"";
6229 + if (cmdData.cmdargs['_'].length != 1) {
6230 + cmdData.result = "Usage: WebPush \"Message\"";
6231 } else {
6232 const pushSubscription = { "endpoint": "https://updates.push.services.mozilla.com/wpush/v2/gAAAAABgIkO9hjXHWhMPiuk-ppNRw7r_pUZitddwCEK4ykdzeIxOIjFnYhIt_nr-qUca2mpZziwQsSEhYTUCiuYrhWnVDRweMtiUj16yJJq8V5jneaEaUYjEIe5jp3DOMNpoTm1aHgX74gCR8uTXSITcM97bNi-hRxcQ4f6Ie4WSAmoXpd89B_g", "keys": { "auth": "UB2sbLVK7ALnSHw5P1dahg", "p256dh": "BIoRbcNSxBuTjN39CCCUCHo1f4NxBJ1YDdu_k4MbPW_q3NK1_RufnydUzLPDp8ibBVItSI72-s48QJvOjQ_S8Ok" } }
6227 - parent.parent.webpush.sendNotification(pushSubscription, cmdargs['_'][0]).then(
6228 - function (value) { try { ws.send(JSON.stringify({ action: 'OK', value: r, tag: command.tag })); } catch (ex) { } },
6229 - function (error) { try { ws.send(JSON.stringify({ action: 'Error', value: r, tag: command.tag })); } catch (ex) { } }
6233 + parent.parent.webpush.sendNotification(pushSubscription, cmdData.cmdargs['_'][0]).then(
6234 + function (value) { try { ws.send(JSON.stringify({ action: 'OK', value: cmdData.result, tag: cmdData.command.tag })); } catch (ex) { } },
6235 + function (error) { try { ws.send(JSON.stringify({ action: 'Error', value: cmdData.result, tag: cmdData.command.tag })); } catch (ex) { } }
6236 );
6237 }
6238 }
6233 - return r;
6239 }
6240
6236 - function serverUserCommandAmtManager(cmdargs) {
6237 - if (parent.parent.amtManager == null) { return 'Intel AMT Manager not active.'; }
6238 - return parent.parent.amtManager.getStatusString();
6241 + function serverUserCommandAmtManager(cmdData) {
6242 + if (parent.parent.amtManager == null) {
6243 + cmdData.result = 'Intel AMT Manager not active.';
6244 + } else {
6245 + cmdData.result = parent.parent.amtManager.getStatusString();
6246 + }
6247 }
6248
6241 - function serverUserCommandCertHashes(cmdargs) {
6242 - var r = 'AgentCertHash: ' + parent.agentCertificateHashHex;
6243 - for (var i in parent.webCertificateHashs) { r += '\r\nwebCertificateHash (' + i + '): ' + common.rstr2hex(parent.webCertificateHashs[i]); }
6244 - for (var i in parent.webCertificateFullHashs) { r += '\r\nwebCertificateFullHash (' + i + '): ' + common.rstr2hex(parent.webCertificateFullHashs[i]); }
6245 - r += '\r\ndefaultWebCertificateHash: ' + common.rstr2hex(parent.defaultWebCertificateHash);
6246 - r += '\r\ndefaultWebCertificateFullHash: ' + common.rstr2hex(parent.defaultWebCertificateFullHash);
6247 - return r;
6249 + function serverUserCommandCertHashes(cmdData) {
6250 + cmdData.result += 'AgentCertHash: ' + parent.agentCertificateHashHex;
6251 + for (var i in parent.webCertificateHashs) { cmdData.result += '\r\nwebCertificateHash (' + i + '): ' + common.rstr2hex(parent.webCertificateHashs[i]); }
6252 + for (var i in parent.webCertificateFullHashs) { cmdData.result += '\r\nwebCertificateFullHash (' + i + '): ' + common.rstr2hex(parent.webCertificateFullHashs[i]); }
6253 + cmdData.result += '\r\ndefaultWebCertificateHash: ' + common.rstr2hex(parent.defaultWebCertificateHash);
6254 + cmdData.result += '\r\ndefaultWebCertificateFullHash: ' + common.rstr2hex(parent.defaultWebCertificateFullHash);
6255 }
6256
6250 - function serverUserCommandAmtAcm(cmdargs) {
6251 - var r = '';
6257 + function serverUserCommandAmtAcm(cmdData) {
6258 if ((domain.amtacmactivation == null) || (domain.amtacmactivation.acmmatch == null) || (domain.amtacmactivation.acmmatch.length == 0)) {
6253 - r = 'No Intel AMT activation certificates.';
6259 + cmdData.result = 'No Intel AMT activation certificates.';
6260 } else {
6255 - if (domain.amtacmactivation.log != null) { r += '--- Activation Log ---\r\nFile : ' + domain.amtacmactivation.log + '\r\n'; }
6261 + if (domain.amtacmactivation.log != null) { cmdData.result += '--- Activation Log ---\r\nFile : ' + domain.amtacmactivation.log + '\r\n'; }
6262 for (var i in domain.amtacmactivation.acmmatch) {
6263 var acmcert = domain.amtacmactivation.acmmatch[i];
6258 - r += '--- Activation Certificate ' + (parseInt(i) + 1) + ' ---\r\nName : ' + acmcert.cn + '\r\nSHA1 : ' + acmcert.sha1 + '\r\nSHA256: ' + acmcert.sha256 + '\r\n';
6264 + cmdData.result += '--- Activation Certificate ' + (parseInt(i) + 1) + ' ---\r\nName : ' + acmcert.cn + '\r\nSHA1 : ' + acmcert.sha1 + '\r\nSHA256: ' + acmcert.sha256 + '\r\n';
6265 }
6266 }
6261 - return r;
6267 }
6268
6264 - function serverUserCommandHeapDump(cmdargs) {
6265 - var r = '';
6269 + function serverUserCommandHeapDump(cmdData) {
6270 // Heapdump support, see example at:
6271 // https://www.arbazsiddiqui.me/a-practical-guide-to-memory-leaks-in-nodejs/
6272 if (parent.parent.config.settings.heapdump === true) {
6273 var dumpFileName = parent.path.join(parent.parent.datapath, `heapDump-${Date.now()}.heapsnapshot`);
6270 - try { ws.send(JSON.stringify({ action: 'serverconsole', value: "Generating dump file at: " + dumpFileName, tag: command.tag })); } catch (ex) { }
6274 + try { ws.send(JSON.stringify({ action: 'serverconsole', value: "Generating dump file at: " + dumpFileName, tag: cmdData.command.tag })); } catch (ex) { }
6275 require('heapdump').writeSnapshot(dumpFileName, (err, filename) => {
6272 - try { ws.send(JSON.stringify({ action: 'serverconsole', value: "Done.", tag: command.tag })); } catch (ex) { }
6276 + try { ws.send(JSON.stringify({ action: 'serverconsole', value: "Done.", tag: cmdData.command.tag })); } catch (ex) { }
6277 });
6278 } else {
6275 - r = "Heapdump not supported, add \"heapdump\":true to settings section of config.json.";
6279 + cmdData.result = "Heapdump not supported, add \"heapdump\":true to settings section of config.json.";
6280 }
6277 - return r;
6281 }
6282
6280 - function serverUserCommandHeapDump2(cmdargs) {
6281 - var r = '';
6283 + function serverUserCommandHeapDump2(cmdData) {
6284 var heapdump = null;
6285 try { heapdump = require('heapdump'); } catch (ex) { }
6286 if (heapdump == null) {
6285 - r = 'Heapdump module not installed, run "npm install heapdump".';
6287 + cmdData.result = 'Heapdump module not installed, run "npm install heapdump".';
6288 } else {
6289 heapdump.writeSnapshot(function (err, filename) {
6290 if (err != null) {
@@ -6292,224 +6294,212 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
6294 }
6295 });
6296 }
6295 - break;
6297 }
6298
6298 - function serverUserCommandSMS(cmdargs) {
6299 - var r = '';
6299 + function serverUserCommandSMS(cmdData) {
6300 if (parent.parent.smsserver == null) {
6301 - r = "No SMS gateway in use.";
6301 + cmdData.result = "No SMS gateway in use.";
6302 } else {
6303 - if (cmdargs['_'].length != 2) {
6304 - r = "Usage: SMS \"PhoneNumber\" \"Message\".";
6303 + if (cmdData.cmdargs['_'].length != 2) {
6304 + cmdData.result = "Usage: SMS \"PhoneNumber\" \"Message\".";
6305 } else {
6306 - parent.parent.smsserver.sendSMS(cmdargs['_'][0], cmdargs['_'][1], function (status, msg) {
6306 + parent.parent.smsserver.sendSMS(cmdData.cmdargs['_'][0], cmdData.cmdargs['_'][1], function (status, msg) {
6307 if (typeof msg == 'string') {
6308 - try { ws.send(JSON.stringify({ action: 'serverconsole', value: status ? ('Success: ' + msg) : ('Failed: ' + msg), tag: command.tag })); } catch (ex) { }
6308 + try { ws.send(JSON.stringify({ action: 'serverconsole', value: status ? ('Success: ' + msg) : ('Failed: ' + msg), tag: cmdData.command.tag })); } catch (ex) { }
6309 } else {
6310 - try { ws.send(JSON.stringify({ action: 'serverconsole', value: status ? 'Success' : 'Failed', tag: command.tag })); } catch (ex) { }
6310 + try { ws.send(JSON.stringify({ action: 'serverconsole', value: status ? 'Success' : 'Failed', tag: cmdData.command.tag })); } catch (ex) { }
6311 }
6312 });
6313 }
6314 }
6315 - return r;
6315 }
6316
6318 - function serverUserCommandEmail(cmdargs) {
6319 - var r = '';
6317 + function serverUserCommandEmail(cmdData) {
6318 if (domain.mailserver == null) {
6321 - r = "No email service enabled.";
6319 + cmdData.result = "No email service enabled.";
6320 } else {
6323 - if (cmdargs['_'].length != 3) {
6324 - r = "Usage: email \"user@sample.com\" \"Subject\" \"Message\".";
6321 + if (cmdData.cmdargs['_'].length != 3) {
6322 + cmdData.result = "Usage: email \"user@sample.com\" \"Subject\" \"Message\".";
6323 } else {
6326 - domain.mailserver.sendMail(cmdargs['_'][0], cmdargs['_'][1], cmdargs['_'][2]);
6327 - r = "Done.";
6324 + domain.mailserver.sendMail(cmdData.cmdargs['_'][0], cmdData.cmdargs['_'][1], cmdData.cmdargs['_'][2]);
6325 + cmdData.result = "Done.";
6326 }
6327 }
6330 - return r;
6328 }
6329
6333 - function serverUserCommandLe(cmdargs) {
6334 - if (parent.parent.letsencrypt == null) { return "Let's Encrypt not in use."; }
6335 - return JSON.stringify(parent.parent.letsencrypt.getStats(), null, 4);
6330 + function serverUserCommandLe(cmdData) {
6331 + if (parent.parent.letsencrypt == null) {
6332 + cmdData.result = "Let's Encrypt not in use.";
6333 + } else {
6334 + cmdData.result = JSON.stringify(parent.parent.letsencrypt.getStats(), null, 4);
6335 + }
6336 }
6337
6338 - function serverUserCommandLeCheck(cmdargs) {
6339 - if (parent.parent.letsencrypt == null) { return "Let's Encrypt not in use."; }
6340 - return ["CertOK", "Request:NoCert", "Request:Expire", "Request:MissingNames"][parent.parent.letsencrypt.checkRenewCertificate()];
6338 + function serverUserCommandLeCheck(cmdData) {
6339 + if (parent.parent.letsencrypt == null) {
6340 + cmdData.result = "Let's Encrypt not in use.";
6341 + } else {
6342 + cmdData.result = ["CertOK", "Request:NoCert", "Request:Expire", "Request:MissingNames"][parent.parent.letsencrypt.checkRkenewCertificate()];
6343 + }
6344 }
6345
6343 - function serverUserCommandLeEvents(cmdargs) {
6344 - if (parent.parent.letsencrypt == null) { return "Let's Encrypt not in use."; }
6345 - return parent.parent.letsencrypt.events.join('\r\n');
6346 + function serverUserCommandLeEvents(cmdData) {
6347 + if (parent.parent.letsencrypt == null) {
6348 + cmdData.result = "Let's Encrypt not in use.";
6349 + } else {
6350 + cmdData.result = parent.parent.letsencrypt.events.join('\r\n');
6351 + }
6352 }
6353
6348 - function serverUserCommandBadLogins(cmdargs) {
6349 - var r = '';
6354 + function serverUserCommandBadLogins(cmdData) {
6355 if (parent.parent.config.settings.maxinvalidlogin == false) {
6351 - r = 'Bad login filter is disabled.';
6356 + cmdData.result = 'Bad login filter is disabled.';
6357 } else {
6353 - if (cmdargs['_'] == 'reset') {
6358 + if (cmdData.cmdargs['_'] == 'reset') {
6359 // Reset bad login table
6360 parent.badLoginTable = {};
6361 parent.badLoginTableLastClean = 0;
6357 - r = 'Done.'
6358 - } else if (cmdargs['_'] == '') {
6362 + cmdData.result = 'Done.'
6363 + } else if (cmdData.cmdargs['_'] == '') {
6364 // Show current bad login table
6365 if (typeof parent.parent.config.settings.maxinvalidlogin.coolofftime == 'number') {
6361 - r = "Max is " + parent.parent.config.settings.maxinvalidlogin.count + " bad login(s) in " + parent.parent.config.settings.maxinvalidlogin.time + " minute(s), " + parent.parent.config.settings.maxinvalidlogin.coolofftime + " minute(s) cooloff.\r\n";
6366 + cmdData.result = "Max is " + parent.parent.config.settings.maxinvalidlogin.count + " bad login(s) in " + parent.parent.config.settings.maxinvalidlogin.time + " minute(s), " + parent.parent.config.settings.maxinvalidlogin.coolofftime + " minute(s) cooloff.\r\n";
6367 } else {
6363 - r = "Max is " + parent.parent.config.settings.maxinvalidlogin.count + " bad login(s) in " + parent.parent.config.settings.maxinvalidlogin.time + " minute(s).\r\n";
6368 + cmdData.result = "Max is " + parent.parent.config.settings.maxinvalidlogin.count + " bad login(s) in " + parent.parent.config.settings.maxinvalidlogin.time + " minute(s).\r\n";
6369 }
6370 var badLoginCount = 0;
6371 parent.cleanBadLoginTable();
6372 for (var i in parent.badLoginTable) {
6373 badLoginCount++;
6374 if (typeof parent.badLoginTable[i] == 'number') {
6370 - r += "Cooloff for " + Math.floor((parent.badLoginTable[i] - Date.now()) / 60000) + " minute(s)\r\n";
6375 + cmdData.result += "Cooloff for " + Math.floor((parent.badLoginTable[i] - Date.now()) / 60000) + " minute(s)\r\n";
6376 } else {
6377 if (parent.badLoginTable[i].length > 1) {
6373 - r += (i + ' - ' + parent.badLoginTable[i].length + " records\r\n");
6378 + cmdData.result += (i + ' - ' + parent.badLoginTable[i].length + " records\r\n");
6379 } else {
6375 - r += (i + ' - ' + parent.badLoginTable[i].length + " record\r\n");
6380 + cmdData.result += (i + ' - ' + parent.badLoginTable[i].length + " record\r\n");
6381 }
6382 }
6383 }
6379 - if (badLoginCount == 0) { r += 'No bad logins.'; }
6384 + if (badLoginCount == 0) { cmdData.result += 'No bad logins.'; }
6385 } else {
6381 - r = 'Usage: badlogin [reset]';
6386 + cmdData.result = 'Usage: badlogin [reset]';
6387 }
6388 }
6384 - return r;
6389 }
6390
6387 - function serverUserCommandDispatchTable(cmdargs) {
6388 - var r = '';
6389 - for (var i in parent.parent.eventsDispatch) { r += (i + ', ' + parent.parent.eventsDispatch[i].length + '\r\n'); }
6390 - return r;
6391 + function serverUserCommandDispatchTable(cmdData) {
6392 + for (var i in parent.parent.eventsDispatch) {
6393 + cmdData.result += (i + ', ' + parent.parent.eventsDispatch[i].length + '\r\n');
6394 + }
6395 }
6396
6393 - function serverUserCommandDupAgents(cmdargs) {
6394 - var r = '';
6395 - for (var i in parent.duplicateAgentsLog) { r += JSON.stringify(parent.duplicateAgentsLog[i]) + '\r\n'; }
6396 - if (r == '') { r = 'No duplicate agents in log.'; }
6397 - return r;
6397 + function serverUserCommandDupAgents(cmdData) {
6398 + for (var i in parent.duplicateAgentsLog) {
6399 + cmdData.result += JSON.stringify(parent.duplicateAgentsLog[i]) + '\r\n';
6400 + }
6401 + if (cmdData.result == '') { cmdData.result = 'No duplicate agents in log.'; }
6402 }
6403
6400 - function serverUserCommandAgentStats(cmdargs) {
6401 - var r = '', stats = parent.getAgentStats();
6404 + function serverUserCommandAgentStats(cmdData) {
6405 + var stats = parent.getAgentStats();
6406 for (var i in stats) {
6403 - if (typeof stats[i] == 'object') { r += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { r += (i + ': ' + stats[i] + '\r\n'); }
6407 + if (typeof stats[i] == 'object') { cmdData.result += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { cmdData.result += (i + ': ' + stats[i] + '\r\n'); }
6408 }
6405 - return r;
6409 }
6410
6408 - function serverUserCommandAgentIssues(cmdargs) {
6409 - var r = '', stats = parent.getAgentIssues();
6411 + function serverUserCommandAgentIssues(cmdData) {
6412 + var stats = parent.getAgentIssues();
6413 if (stats.length == 0) {
6411 - r = "No agent issues.";
6414 + cmdData.result = "No agent issues.";
6415 } else {
6413 - for (var i in stats) { r += stats[i].join(', ') + '\r\n'; }
6416 + for (var i in stats) { cmdData.result += stats[i].join(', ') + '\r\n'; }
6417 }
6415 - return r;
6418 }
6419
6418 - function serverUserCommandWebStats(cmdargs) {
6419 - var r = '', stats = parent.getStats();
6420 + function serverUserCommandWebStats(cmdData) {
6421 + var stats = parent.getStats();
6422 for (var i in stats) {
6421 - if (typeof stats[i] == 'object') { r += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { r += (i + ': ' + stats[i] + '\r\n'); }
6423 + if (typeof stats[i] == 'object') { cmdData.result += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { cmdData.result += (i + ': ' + stats[i] + '\r\n'); }
6424 }
6423 - return r;
6425 }
6426
6426 - function serverUserCommandTrafficStats(cmdargs) {
6427 - var r = '';
6427 + function serverUserCommandTrafficStats(cmdData) {
6428 var stats = parent.getTrafficStats();
6429 for (var i in stats) {
6430 - if (typeof stats[i] == 'object') { r += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { r += (i + ': ' + stats[i] + '\r\n'); }
6430 + if (typeof stats[i] == 'object') { cmdData.result += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { cmdData.result += (i + ': ' + stats[i] + '\r\n'); }
6431 }
6432 - return r;
6432 }
6433
6435 - function serverUserCommandTrafficDelta(cmdargs) {
6436 - var r = '';
6434 + function serverUserCommandTrafficDelta(cmdData) {
6435 const stats = parent.getTrafficDelta(obj.trafficStats);
6436 obj.trafficStats = stats.current;
6437 for (var i in stats.delta) {
6440 - if (typeof stats.delta[i] == 'object') { r += (i + ': ' + JSON.stringify(stats.delta[i]) + '\r\n'); } else { r += (i + ': ' + stats.delta[i] + '\r\n'); }
6438 + if (typeof stats.delta[i] == 'object') { cmdData.result += (i + ': ' + JSON.stringify(stats.delta[i]) + '\r\n'); } else { cmdData.result += (i + ': ' + stats.delta[i] + '\r\n'); }
6439 }
6442 - return r;
6440 }
6441
6445 - function serverUserCommandWatchdog(cmdargs) {
6446 - var r = '';
6442 + function serverUserCommandWatchdog(cmdData) {
6443 if (parent.parent.watchdog == null) {
6448 - r = 'Server watchdog not active.';
6444 + cmdData.result = 'Server watchdog not active.';
6445 } else {
6450 - r = 'Server watchdog active.\r\n';
6451 - if (parent.parent.watchdogmaxtime != null) { r += 'Largest timeout was ' + parent.parent.watchdogmax + 'ms on ' + parent.parent.watchdogmaxtime + '\r\n'; }
6452 - for (var i in parent.parent.watchdogtable) { r += parent.parent.watchdogtable[i] + '\r\n'; }
6446 + cmdData.result = 'Server watchdog active.\r\n';
6447 + if (parent.parent.watchdogmaxtime != null) { cmdData.result += 'Largest timeout was ' + parent.parent.watchdogmax + 'ms on ' + parent.parent.watchdogmaxtime + '\r\n'; }
6448 + for (var i in parent.parent.watchdogtable) { cmdData.result += parent.parent.watchdogtable[i] + '\r\n'; }
6449 }
6454 - return r;
6450 }
6451
6457 - function serverUserCommandAcceleratorsStats(cmdargs) {
6458 - var r = '', stats = parent.parent.certificateOperations.getAcceleratorStats();
6452 + function serverUserCommandAcceleratorsStats(cmdData) {
6453 + var stats = parent.parent.certificateOperations.getAcceleratorStats();
6454 for (var i in stats) {
6460 - if (typeof stats[i] == 'object') { r += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { r += (i + ': ' + stats[i] + '\r\n'); }
6455 + if (typeof stats[i] == 'object') { cmdData.result += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { cmdData.result += (i + ': ' + stats[i] + '\r\n'); }
6456 }
6462 - return r;
6457 }
6458
6465 - function serverUserCommandMpsStats(cmdargs) {
6466 - var r = '';
6459 + function serverUserCommandMpsStats(cmdData) {
6460 if (parent.parent.mpsserver == null) {
6468 - r = 'MPS not enabled.';
6461 + cmdData.result = 'MPS not enabled.';
6462 } else {
6463 var stats = parent.parent.mpsserver.getStats();
6464 for (var i in stats) {
6472 - if (typeof stats[i] == 'object') { r += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { r += (i + ': ' + stats[i] + '\r\n'); }
6465 + if (typeof stats[i] == 'object') { cmdData.result += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { cmdData.result += (i + ': ' + stats[i] + '\r\n'); }
6466 }
6467 }
6475 - return r;
6468 }
6469
6478 - // List all MPS connections and types.
6479 - function serverUserCommandMps(cmdargs) {
6480 - var r = '';
6470 + function serverUserCommandMps(cmdData) {
6471 if (parent.parent.mpsserver == null) {
6482 - r = 'MPS not enabled.';
6472 + cmdData.result = 'MPS not enabled.';
6473 } else {
6474 const connectionTypes = ['CIRA', 'Relay', 'LMS'];
6475 for (var nodeid in parent.parent.mpsserver.ciraConnections) {
6486 - r += nodeid;
6476 + cmdData.result += nodeid;
6477 var connections = parent.parent.mpsserver.ciraConnections[nodeid];
6488 - for (var i in connections) { r += ', ' + connectionTypes[connections[i].tag.connType]; }
6489 - r += '\r\n';
6478 + for (var i in connections) { cmdData.result += ', ' + connectionTypes[connections[i].tag.connType]; }
6479 + cmdData.result += '\r\n';
6480 }
6491 - if (r == '') { r = 'MPS has not connections.'; }
6481 + if (cmdData.result == '') { cmdData.result = 'MPS has not connections.'; }
6482 }
6493 - return r;
6483 }
6484
6496 - function serverUserCommandDbStats(cmdargs) {
6485 + function serverUserCommandDbStats(cmdData) {
6486 parent.parent.db.getStats(function (stats) {
6487 var r2 = '';
6488 for (var i in stats) { r2 += (i + ': ' + stats[i] + '\r\n'); }
6500 - try { ws.send(JSON.stringify({ action: 'serverconsole', value: r2, tag: command.tag })); } catch (ex) { }
6489 + try { ws.send(JSON.stringify({ action: 'serverconsole', value: r2, tag: cmdData.command.tag })); } catch (ex) { }
6490 });
6491 }
6492
6504 - function serverUserCommandDbCounters(cmdargs) {
6505 - try { ws.send(JSON.stringify({ action: 'serverconsole', value: JSON.stringify(parent.parent.db.dbCounters, null, 2), tag: command.tag })); } catch (ex) { }
6493 + function serverUserCommandDbCounters(cmdData) {
6494 + try { ws.send(JSON.stringify({ action: 'serverconsole', value: JSON.stringify(parent.parent.db.dbCounters, null, 2), tag: cmdData.command.tag })); } catch (ex) { }
6495 }
6496
6508 - function serverUserCommandServerUpdate(cmdargs) {
6509 - var r = 'Performing server update...';
6497 + function serverUserCommandServerUpdate(cmdData) {
6498 + cmdData.result = 'Performing server update...';
6499 var version = null;
6511 - if (cmdargs['_'].length > 0) {
6512 - version = cmdargs['_'][0];
6500 +
6501 + if (cmdData.cmdargs['_'].length > 0) {
6502 + version = cmdData.cmdargs['_'][0];
6503
6504 // This call is SLOW. We only want to validate version if we have to
6505 if (version != 'stable' && version != 'latest') {
@@ -6517,71 +6507,63 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
6507 var versions = JSON.parse(data);
6508
6509 if (versions.includes(version)) {
6520 - if (parent.parent.performServerUpdate(version) == false) {
6521 - try {
6522 - ws.send(JSON.stringify({
6523 - action: 'serverconsole',
6524 - value: 'Server self-update not possible.'
6525 - }));
6510 + if (parent.parent.performServerUpdate(version) == false) {
6511 + try {
6512 + ws.send(JSON.stringify({ action: 'serverconsole',
6513 + value: 'Server self-update not possible.'}));
6514 } catch (ex) { }
6515 }
6516 } else {
6529 - try {
6530 - ws.send(JSON.stringify({
6531 - action: 'serverconsole',
6532 - value: 'Invalid version. Aborting update'
6533 - }));
6517 + try {
6518 + ws.send(JSON.stringify({ action: 'serverconsole',
6519 + value: 'Invalid version. Aborting update'}));
6520 } catch (ex) { }
6521 }
6522 });
6523 } else {
6538 - if (parent.parent.performServerUpdate(version) == false) {
6539 - r = 'Server self-update not possible.';
6524 + if (parent.parent.performServerUpdate(version) == false) {
6525 + cmdData.result = 'Server self-update not possible.';
6526 }
6541 - }
6527 + }
6528 } else {
6543 - if (parent.parent.performServerUpdate(version) == false) {
6544 - r = 'Server self-update not possible.';
6529 + if (parent.parent.performServerUpdate(version) == false) {
6530 + cmdData.result = 'Server self-update not possible.';
6531 }
6532 }
6547 - return r;
6533 }
6534
6550 - function serverUserCommandPrint(cmdargs) {
6551 - console.log(cmdargs['_'][0]);
6535 + function serverUserCommandPrint(cmdData) {
6536 + console.log(cmdData.cmdargs['_'][0]);
6537 }
6538
6554 - function serverUserCommandAmtPasswords(cmdargs) {
6555 - var r = '';
6539 + function serverUserCommandAmtPasswords(cmdData) {
6540 if (parent.parent.amtPasswords == null) {
6557 - r = "No Intel AMT password table."
6541 + cmdData.result = "No Intel AMT password table."
6542 } else {
6559 - for (var i in parent.parent.amtPasswords) { r += (i + ' - ' + parent.parent.amtPasswords[i].join(', ') + '\r\n'); }
6543 + for (var i in parent.parent.amtPasswords) { cmdData.result += (i + ' - ' + parent.parent.amtPasswords[i].join(', ') + '\r\n'); }
6544 }
6561 - return r;
6545 }
6546
6564 - function serverUserCommandUpdateCheck(cmdargs) {
6547 + function serverUserCommandUpdateCheck(cmdData) {
6548 parent.parent.getServerTags(function (tags, error) {
6549 var r2 = '';
6550 if (error != null) { r2 += 'Exception: ' + error + '\r\n'; }
6551 else { for (var i in tags) { r2 += i + ': ' + tags[i] + '\r\n'; } }
6569 - try { ws.send(JSON.stringify({ action: 'serverconsole', value: r2, tag: command.tag })); } catch (ex) { }
6552 + try { ws.send(JSON.stringify({ action: 'serverconsole', value: r2, tag: cmdData.command.tag })); } catch (ex) { }
6553 });
6571 - return "Checking server update...";
6554 + cmdData.result = "Checking server update...";
6555 }
6556
6574 - function serverUserCommandMaintenance(cmdargs) {
6575 - var arg = null, changed = false, r = '';
6576 - if ((cmdargs['_'] != null) && (cmdargs['_'][0] != null)) { arg = cmdargs['_'][0].toLowerCase(); }
6557 + function serverUserCommandMaintenance(cmdData) {
6558 + var arg = null, changed = false;
6559 + if ((cmdData.cmdargs['_'] != null) && (cmdData.cmdargs['_'][0] != null)) { arg = cmdData.cmdargs['_'][0].toLowerCase(); }
6560 if (arg == 'enabled') { parent.parent.config.settings.maintenancemode = 1; changed = true; }
6561 else if (arg == 'disabled') { delete parent.parent.config.settings.maintenancemode; changed = true; }
6579 - r = 'Maintenance mode: ' + ((parent.parent.config.settings.maintenancemode == null) ? 'Disabled' : 'Enabled');
6580 - if (changed == false) { r += '\r\nTo change type: maintenance [enabled|disabled]'; }
6581 - return r;
6562 + cmdData.result = 'Maintenance mode: ' + ((parent.parent.config.settings.maintenancemode == null) ? 'Disabled' : 'Enabled');
6563 + if (changed == false) { cmdData.result += '\r\nTo change type: maintenance [enabled|disabled]'; }
6564 }
6565
6584 - function serverUserCommandInfo(cmdargs) {
6566 + function serverUserCommandInfo(cmdData) {
6567 var info = process.memoryUsage();
6568 info.dbType = ['None', 'NeDB', 'MongoJS', 'MongoDB'][parent.db.databaseType];
6569 try { if (parent.parent.multiServer != null) { info.serverId = parent.parent.multiServer.serverid; } } catch (ex) { }
@@ -6598,50 +6580,47 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
6580 try { info.database = ["Unknown", "NeDB", "MongoJS", "MongoDB", "MariaDB", "MySQL"][parent.parent.db.databaseType]; } catch (ex) { }
6581 try { info.productionMode = ((process.env.NODE_ENV != null) && (process.env.NODE_ENV == 'production')); } catch (ex) { }
6582 try { info.allDevGroupManagers = parent.parent.config.settings.managealldevicegroups; } catch (ex) { }
6601 - return JSON.stringify(info, null, 4);
6583 + cmdData.result = JSON.stringify(info, null, 4);
6584 }
6585
6604 - function serverUserCommandNodeConfig(cmdargs) {
6605 - return JSON.stringify(process.config, null, 4);
6586 + function serverUserCommandNodeConfig(cmdData) {
6587 + cmdData.result = JSON.stringify(process.config, null, 4);
6588 }
6589
6608 - function serverUserCommandVersions(cmdargs) {
6609 - return JSON.stringify(process.versions, null, 4);
6590 + function serverUserCommandVersions(cmdData) {
6591 + cmdData.result = JSON.stringify(process.versions, null, 4);
6592 }
6593
6612 - function serverUserCommandArgs(cmdargs) {
6613 - return cmd + ': ' + JSON.stringify(cmdargs);
6594 + function serverUserCommandArgs(cmdData) {
6595 + cmdData.result = 'args: ' + JSON.stringify(cmdData.cmdargs);
6596 }
6597
6616 - function serverUserCommandUserSessions(cmdargs) {
6617 - var r = '';
6598 + function serverUserCommandUserSessions(cmdData) {
6599 var userSessionCount = 0;
6600 var filter = null;
6620 - var arg = cmdargs['_'][0];
6601 + var arg = cmdData.cmdargs['_'][0];
6602 if (typeof arg == 'string') { if (arg.indexOf('/') >= 0) { filter = arg; } else { filter = ('user/' + domain.id + '/' + arg); } }
6603 for (var i in parent.wssessions) {
6604 if ((filter == null) || (filter == i)) {
6605 userSessionCount++;
6625 - r += (i + ', ' + parent.wssessions[i].length + ' session' + ((parent.wssessions[i].length > 1) ? 's' : '') + '.\r\n');
6606 + cmdData.result += (i + ', ' + parent.wssessions[i].length + ' session' + ((parent.wssessions[i].length > 1) ? 's' : '') + '.\r\n');
6607 for (var j in parent.wssessions[i]) {
6627 - r += ' ' + parent.wssessions[i][j].clientIp + ' --> ' + parent.wssessions[i][j].sessionId + '\r\n';
6608 + cmdData.result += ' ' + parent.wssessions[i][j].clientIp + ' --> ' + parent.wssessions[i][j].sessionId + '\r\n';
6609 }
6610 }
6611 }
6631 - if (userSessionCount == 0) { r = 'None.'; }
6632 - break;
6612 + if (userSessionCount == 0) { cmdData.result = 'None.'; }
6613 }
6614
6635 - function serverUserCommandCloseUserSessions(cmdargs) {
6636 - var r = '';
6615 + function serverUserCommandCloseUserSessions(cmdData) {
6616 var userSessionCount = 0;
6617 var filter = null;
6639 - var arg = cmdargs['_'][0];
6618 + var arg = cmdData.cmdargs['_'][0];
6619 if (typeof arg == 'string') { if (arg.indexOf('/') >= 0) { filter = arg; } else { filter = ('user/' + domain.id + '/' + arg); } }
6620 if (filter == null) {
6642 - r += "Usage: closeusersessions <username>";
6621 + cmdData.result += "Usage: closeusersessions <username>";
6622 } else {
6644 - r += "Closing user sessions for: " + filter + '\r\n';
6623 + cmdData.result += "Closing user sessions for: " + filter + '\r\n';
6624 for (var i in parent.wssessions) {
6625 if (filter == i) {
6626 userSessionCount++;
@@ -6651,137 +6630,119 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
6630 }
6631 }
6632 }
6654 - if (userSessionCount < 2) { r += 'Disconnected ' + userSessionCount + ' session.'; } else { r += 'Disconnected ' + userSessionCount + ' sessions.'; };
6633 + if (userSessionCount < 2) { cmdData.result += 'Disconnected ' + userSessionCount + ' session.'; } else { cmdData.result += 'Disconnected ' + userSessionCount + ' sessions.'; };
6634 }
6656 - break;
6635 }
6636
6659 - function serverUserCommandResetServer(cmdargs) {
6660 - var r = '';
6637 + function serverUserCommandResetServer(cmdData) {
6638 console.log("Server restart...");
6639 process.exit(0);
6663 - break;
6640 }
6641
6666 - function serverUserCommandTaslkLimiter(cmdargs) {
6667 - var r = '';
6642 + function serverUserCommandTaskLimiter(cmdData) {
6643 if (parent.parent.taskLimiter != null) {
6644 //var obj = { maxTasks: maxTasks, maxTaskTime: (maxTaskTime * 1000), nextTaskId: 0, currentCount: 0, current: {}, pending: [[], [], []], timer: null };
6645 const tl = parent.parent.taskLimiter;
6671 - r += 'MaxTasks: ' + tl.maxTasks + ', NextTaskId: ' + tl.nextTaskId + '\r\n';
6672 - r += 'MaxTaskTime: ' + (tl.maxTaskTime / 1000) + ' seconds, Timer: ' + (tl.timer != null) + '\r\n';
6646 + cmdData.result += 'MaxTasks: ' + tl.maxTasks + ', NextTaskId: ' + tl.nextTaskId + '\r\n';
6647 + cmdData.result += 'MaxTaskTime: ' + (tl.maxTaskTime / 1000) + ' seconds, Timer: ' + (tl.timer != null) + '\r\n';
6648 var c = [];
6649 for (var i in tl.current) { c.push(i); }
6675 - r += 'Current (' + tl.currentCount + '): [' + c.join(', ') + ']\r\n';
6676 - r += 'Pending (High/Med/Low): ' + tl.pending[0].length + ', ' + tl.pending[1].length + ', ' + tl.pending[2].length + '\r\n';
6650 + cmdData.result += 'Current (' + tl.currentCount + '): [' + c.join(', ') + ']\r\n';
6651 + cmdData.result += 'Pending (High/Med/Low): ' + tl.pending[0].length + ', ' + tl.pending[1].length + ', ' + tl.pending[2].length + '\r\n';
6652 }
6678 - break;
6653 }
6654
6681 - function serverUserCommandSetMaxTasks(cmdargs) {
6682 - var r = '';
6683 - if ((cmdargs["_"].length != 1) || (parseInt(cmdargs["_"][0]) < 1) || (parseInt(cmdargs["_"][0]) > 1000)) {
6684 - r = 'Usage: setmaxtasks [1 to 1000]';
6655 + function serverUserCommandSetMaxTasks(cmdData) {
6656 + if ((cmdData.cmdargs["_"].length != 1) || (parseInt(cmdData.cmdargs["_"][0]) < 1) || (parseInt(cmdData.cmdargs["_"][0]) > 1000)) {
6657 + cmdData.result = 'Usage: setmaxtasks [1 to 1000]';
6658 } else {
6686 - parent.parent.taskLimiter.maxTasks = parseInt(cmdargs["_"][0]);
6687 - r = 'MaxTasks set to ' + parent.parent.taskLimiter.maxTasks + '.';
6659 + parent.parent.taskLimiter.maxTasks = parseInt(cmdData.cmdargs["_"][0]);
6660 + cmdData.result = 'MaxTasks set to ' + parent.parent.taskLimiter.maxTasks + '.';
6661 }
6689 - break;
6662 }
6663
6692 - function serverUserCommandCores(cmdargs) {
6693 - var r = '';
6694 - if (parent.parent.defaultMeshCores != null) { for (var i in parent.parent.defaultMeshCores) { r += i + ': ' + parent.parent.defaultMeshCores[i].length + ' bytes\r\n'; } }
6695 - break;
6664 + function serverUserCommandCores(cmdData) {
6665 + if (parent.parent.defaultMeshCores != null) {
6666 + for (var i in parent.parent.defaultMeshCores) {
6667 + cmdData.result += i + ': ' + parent.parent.defaultMeshCores[i].length + ' bytes\r\n';
6668 + }
6669 + }
6670 }
6671
6698 - function serverUserCommandShowPaths(cmdargs) {
6699 - var r = '';
6700 - r = 'Parent: ' + parent.parent.parentpath + '\r\n';
6701 - r += 'Data: ' + parent.parent.datapath + '\r\n';
6702 - r += 'Files: ' + parent.parent.filespath + '\r\n';
6703 - r += 'Backup: ' + parent.parent.backuppath + '\r\n';
6704 - r += 'Record: ' + parent.parent.recordpath + '\r\n';
6705 - r += 'WebPublic: ' + parent.parent.webPublicPath + '\r\n';
6706 - r += 'WebViews: ' + parent.parent.webViewsPath + '\r\n';
6707 - if (parent.parent.webViewsOverridePath) { r += 'XWebPublic: ' + parent.parent.webViewsOverridePath + '\r\n'; }
6708 - if (parent.parent.webViewsOverridePath) { r += 'XWebViews: ' + parent.parent.webPublicOverridePath + '\r\n'; }
6709 - break;
6672 + function serverUserCommandShowPaths(cmdData) {
6673 + cmdData.result = 'Parent: ' + parent.parent.parentpath + '\r\n';
6674 + cmdData.result += 'Data: ' + parent.parent.datapath + '\r\n';
6675 + cmdData.result += 'Files: ' + parent.parent.filespath + '\r\n';
6676 + cmdData.result += 'Backup: ' + parent.parent.backuppath + '\r\n';
6677 + cmdData.result += 'Record: ' + parent.parent.recordpath + '\r\n';
6678 + cmdData.result += 'WebPublic: ' + parent.parent.webPublicPath + '\r\n';
6679 + cmdData.result += 'WebViews: ' + parent.parent.webViewsPath + '\r\n';
6680 + if (parent.parent.webViewsOverridePath) { cmdData.result += 'XWebPublic: ' + parent.parent.webViewsOverridePath + '\r\n'; }
6681 + if (parent.parent.webViewsOverridePath) { cmdData.result += 'XWebViews: ' + parent.parent.webPublicOverridePath + '\r\n'; }
6682 }
6683
6712 - function serverUserCommandMigrationAgents(cmdargs) {
6713 - var r = '';
6684 + function serverUserCommandMigrationAgents(cmdData) {
6685 if (parent.parent.swarmserver == null) {
6715 - r = 'Swarm server not running.';
6686 + cmdData.result = 'Swarm server not running.';
6687 } else {
6688 for (var i in parent.parent.swarmserver.migrationAgents) {
6689 var arch = parent.parent.swarmserver.migrationAgents[i];
6719 - for (var j in arch) { var agent = arch[j]; r += 'Arch ' + agent.arch + ', Ver ' + agent.ver + ', Size ' + ((agent.binary == null) ? 0 : agent.binary.length) + '<br />'; }
6690 + for (var j in arch) { var agent = arch[j]; cmdData.result += 'Arch ' + agent.arch + ', Ver ' + agent.ver + ', Size ' + ((agent.binary == null) ? 0 : agent.binary.length) + '<br />'; }
6691 }
6692 }
6722 - break;
6693 }
6694
6725 - function serverUserCommandSwarmStats(cmdargs) {
6726 - var r = '';
6695 + function serverUserCommandSwarmStats(cmdData) {
6696 if (parent.parent.swarmserver == null) {
6728 - r = 'Swarm server not running.';
6697 + cmdData.result = 'Swarm server not running.';
6698 } else {
6699 for (var i in parent.parent.swarmserver.stats) {
6700 if (typeof parent.parent.swarmserver.stats[i] == 'object') {
6732 - r += i + ': ' + JSON.stringify(parent.parent.swarmserver.stats[i]) + '\r\n';
6701 + cmdData.result += i + ': ' + JSON.stringify(parent.parent.swarmserver.stats[i]) + '\r\n';
6702 } else {
6734 - r += i + ': ' + parent.parent.swarmserver.stats[i] + '\r\n';
6703 + cmdData.result += i + ': ' + parent.parent.swarmserver.stats[i] + '\r\n';
6704 }
6705 }
6706 }
6738 - break;
6707 }
6708
6741 - function serverUserCommandRelays(cmdargs) {
6742 - var r = '';
6709 + function serverUserCommandRelays(cmdData) {
6710 for (var i in parent.wsrelays) {
6744 - r += 'id: ' + i + ', ' + ((parent.wsrelays[i].state == 2) ? 'connected' : 'pending');
6711 + cmdData.result += 'id: ' + i + ', ' + ((parent.wsrelays[i].state == 2) ? 'connected' : 'pending');
6712 if (parent.wsrelays[i].peer1 != null) {
6746 - r += ', ' + cleanRemoteAddr(parent.wsrelays[i].peer1.req.clientIp);
6747 - if (parent.wsrelays[i].peer1.user) { r += ' (User:' + parent.wsrelays[i].peer1.user.name + ')' }
6713 + cmdData.result += ', ' + cleanRemoteAddr(parent.wsrelays[i].peer1.req.clientIp);
6714 + if (parent.wsrelays[i].peer1.user) { cmdData.result += ' (User:' + parent.wsrelays[i].peer1.user.name + ')' }
6715 }
6716 if (parent.wsrelays[i].peer2 != null) {
6750 - r += ' to ' + cleanRemoteAddr(parent.wsrelays[i].peer2.req.clientIp);
6751 - if (parent.wsrelays[i].peer2.user) { r += ' (User:' + parent.wsrelays[i].peer2.user.name + ')' }
6717 + cmdData.result += ' to ' + cleanRemoteAddr(parent.wsrelays[i].peer2.req.clientIp);
6718 + if (parent.wsrelays[i].peer2.user) { cmdData.result += ' (User:' + parent.wsrelays[i].peer2.user.name + ')' }
6719 }
6753 - r += '\r\n';
6720 + cmdData.result += '\r\n';
6721 }
6755 - if (r == '') { r = 'No relays.'; }
6756 - break;
6722 + if (cmdData.result == '') { cmdData.result = 'No relays.'; }
6723 }
6724
6759 - function serverUserCommandAutoBackup(cmdargs) {
6760 - var r = '';
6725 + function serverUserCommandAutoBackup(cmdData) {
6726 var backupResult = parent.db.performBackup(function (msg) {
6762 - try { ws.send(JSON.stringify({ action: 'serverconsole', value: msg, tag: command.tag })); } catch (ex) { }
6727 + try { ws.send(JSON.stringify({ action: 'serverconsole', value: msg, tag: cmdData.command.tag })); } catch (ex) { }
6728 });
6764 - if (backupResult == 0) { r = 'Starting auto-backup...'; } else { r = 'Backup alreay in progress.'; }
6765 - break;
6729 + if (backupResult == 0) { cmdData.result = 'Starting auto-backup...'; } else { cmdData.result = 'Backup alreay in progress.'; }
6730 }
6731
6768 - function serverUserCommandBackupConfig(cmdargs) {
6769 - var r = '';
6770 - r = parent.db.getBackupConfig();
6771 - break;
6732 + function serverUserCommandBackupConfig(cmdData) {
6733 + cmdData.result = parent.db.getBackupConfig();
6734 }
6735
6774 - function serverUserCommandFirebase(cmdargs) {
6775 - var r = '';
6736 + function serverUserCommandFirebase(cmdData) {
6737 if (parent.parent.firebase == null) {
6777 - r = "Firebase push messaging not supported";
6738 + cmdData.result = "Firebase push messaging not supported";
6739 } else {
6779 - r = JSON.stringify(parent.parent.firebase.stats, null, 2);
6740 + cmdData.result = JSON.stringify(parent.parent.firebase.stats, null, 2);
6741 }
6781 - break;
6742 }
6743
6744
6745 +
6746 function csvClean(s) { return '\"' + s.split('\"').join('').split(',').join('').split('\r').join('').split('\n').join('') + '\"'; }
6747
6748 // Return detailed information about an array of nodeid's