Refactor meshuser - console command obj
Noah Zalev committed
Jul 7, 2021 at 21:26 UTC
809f6ab74da44e2461a5c4fa64fc7b6c3227f842
1 file changed
+198
-280
meshuser.js
+198
-280
@@ -597,114 +597,100 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
597
consoleCommands['firebase'] = firebaseConsoleCommand;
598
599
600
- function helpConsoleCommand(cmdargs) {
601
- var r = '', fin = '', f = '', availcommands = 'help,maintenance,info,versions,resetserver,usersessions,closeusersessions,tasklimiter,setmaxtasks,cores,migrationagents,agentstats,agentissues,webstats,trafficstats,trafficdelta,mpsstats,swarmstats,acceleratorsstats,updatecheck,serverupdate,nodeconfig,heapdump,relays,autobackup,backupconfig,dupagents,dispatchtable,badlogins,showpaths,le,lecheck,leevents,dbstats,dbcounters,sms,amtacm,certhashes,watchdog,amtmanager,amtpasswords,certexpire,email';
600
+ function helpConsoleCommand(cmdData) {
601
+ var fin = '', f = '', availcommands = 'help,maintenance,info,versions,resetserver,usersessions,closeusersessions,tasklimiter,setmaxtasks,cores,migrationagents,agentstats,agentissues,webstats,trafficstats,trafficdelta,mpsstats,swarmstats,acceleratorsstats,updatecheck,serverupdate,nodeconfig,heapdump,relays,autobackup,backupconfig,dupagents,dispatchtable,badlogins,showpaths,le,lecheck,leevents,dbstats,dbcounters,sms,amtacm,certhashes,watchdog,amtmanager,amtpasswords,certexpire,email';
602
if (parent.parent.config.settings.heapdump === true) { availcommands += ',heapdump'; }
603
availcommands = availcommands.split(',').sort();
604
while (availcommands.length > 0) { if (f.length > 80) { fin += (f + ',\r\n'); f = ''; } f += (((f != '') ? ', ' : ' ') + availcommands.shift()); }
605
if (f != '') { fin += f; }
606
- if (cmdargs['_'].length == 0) {
607
- r = 'Available commands: \r\n' + fin + '\r\nType help <command> for details.';
606
+ if (cmdData.cmdargs['_'].length == 0) {
607
+ cmdData.result = 'Available commands: \r\n' + fin + '\r\nType help <command> for details.';
608
} else {
609
- var cmd2 = cmdargs['_'][0].toLowerCase();
609
+ var cmd2 = cmdData.cmdargs['_'][0].toLowerCase();
610
switch (cmd2) {
611
- case 'info': { r = "info: Returns the most immidiatly useful information about this server, including MeshCentral and NodeJS versions. This is often information required to file a bug."; break; }
612
- case 'versions': { r = "versions: Returns all internal versions for NodeJS running this server."; break; }
613
- case 'resetserver': { r = "resetserver: Causes the server to reset, this is sometimes useful is the config.json file was changed."; break; }
614
- case 'usersessions': { r = "usersessions: Returns a list of active sessions grouped by user."; break; }
615
- case 'closeusersessions': { r = "closeusersessions: Disconnects all sessions for a specified user."; break; }
616
- case 'tasklimiter': { r = "tasklimiter: 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."; break; }
617
- case 'serverupdate': { r = "serverupdate: Updates server to latest version. Optional version argument to install specific version. Example: serverupdate 0.8.49"; break; }
618
- default: { r = 'No help information about this command.'; break; }
611
+ case 'info': { cmdData.result = "info: Returns the most immidiatly useful information about this server, including MeshCentral and NodeJS versions. This is often information required to file a bug."; break; }
612
+ case 'versions': { cmdData.result = "versions: Returns all internal versions for NodeJS running this server."; break; }
613
+ case 'resetserver': { cmdData.result = "resetserver: Causes the server to reset, this is sometimes useful is the config.json file was changed."; break; }
614
+ case 'usersessions': { cmdData.result = "usersessions: Returns a list of active sessions grouped by user."; break; }
615
+ case 'closeusersessions': { cmdData.result = "closeusersessions: Disconnects all sessions for a specified user."; break; }
616
+ case 'tasklimiter': { cmdData.result = "tasklimiter: 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."; break; }
617
+ case 'serverupdate': { cmdData.result = "serverupdate: Updates server to latest version. Optional version argument to install specific version. Example: serverupdate 0.8.49"; break; }
618
+ default: { cmdData.result = 'No help information about this command.'; break; }
619
}
620
}
621
- return r;
621
}
622
624
- function certexpireConsoleCommand(command, cmdargs) {
625
- var r = '';
623
+ function certexpireConsoleCommand(cmdData) {
624
const now = Date.now();
625
for (var i in parent.webCertificateExpire) {
626
const domainName = (i == '') ? '[Default]' : i;
629
- r += domainName + ', expires in ' + Math.floor((parent.webCertificateExpire[i] - now) / 86400000) + ' day(s)\r\n';
627
+ cmdData.result += domainName + ', expires in ' + Math.floor((parent.webCertificateExpire[i] - now) / 86400000) + ' day(s)\r\n';
628
}
631
- return r;
629
}
630
634
- function webpushConsoleCommand(command, cmdargs) {
635
- var r = '';
631
+ function webpushConsoleCommand(cmdData) {
632
if (parent.parent.webpush == null) {
637
- r = "Web push not supported.";
633
+ cmdData.result = "Web push not supported.";
634
} else {
639
- if (cmdargs['_'].length != 1) {
640
- r = "Usage: WebPush \"Message\"";
635
+ if (cmdData.cmdargs['_'].length != 1) {
636
+ cmdData.result = "Usage: WebPush \"Message\"";
637
} else {
638
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" } }
643
- parent.parent.webpush.sendNotification(pushSubscription, cmdargs['_'][0]).then(
644
- function (value) { try { ws.send(JSON.stringify({ action: 'OK', value: r, tag: command.tag })); } catch (ex) { } },
645
- function (error) { try { ws.send(JSON.stringify({ action: 'Error', value: r, tag: command.tag })); } catch (ex) { } }
639
+ parent.parent.webpush.sendNotification(pushSubscription, cmdData.cmdargs['_'][0]).then(
640
+ function (value) { try { ws.send(JSON.stringify({ action: 'OK', value: cmdData.result, tag: cmdData.command.tag })); } catch (ex) { } },
641
+ function (error) { try { ws.send(JSON.stringify({ action: 'Error', value: cmdData.result, tag: cmdData.command.tag })); } catch (ex) { } }
642
);
643
}
644
}
649
- return r;
645
}
646
652
- function amtmanagerConsoleCommand(command, cmdargs) {
653
- var r = '';
647
+ function amtmanagerConsoleCommand(cmdData) {
648
if (parent.parent.amtManager == null) {
655
- r = 'Intel AMT Manager not active.';
649
+ cmdData.result = 'Intel AMT Manager not active.';
650
} else {
657
- r = parent.parent.amtManager.getStatusString();
651
+ cmdData.result = parent.parent.amtManager.getStatusString();
652
}
659
- return r;
653
}
654
662
- function certhashesConsoleCommand(command, cmdargs) {
663
- var r = '';
664
- r += 'AgentCertHash: ' + parent.agentCertificateHashHex;
665
- for (var i in parent.webCertificateHashs) { r += '\r\nwebCertificateHash (' + i + '): ' + common.rstr2hex(parent.webCertificateHashs[i]); }
666
- for (var i in parent.webCertificateFullHashs) { r += '\r\nwebCertificateFullHash (' + i + '): ' + common.rstr2hex(parent.webCertificateFullHashs[i]); }
667
- r += '\r\ndefaultWebCertificateHash: ' + common.rstr2hex(parent.defaultWebCertificateHash);
668
- r += '\r\ndefaultWebCertificateFullHash: ' + common.rstr2hex(parent.defaultWebCertificateFullHash);
669
- return r;
655
+ function certhashesConsoleCommand(cmdData) {
656
+ cmdData.result += 'AgentCertHash: ' + parent.agentCertificateHashHex;
657
+ for (var i in parent.webCertificateHashs) { cmdData.result += '\r\nwebCertificateHash (' + i + '): ' + common.rstr2hex(parent.webCertificateHashs[i]); }
658
+ for (var i in parent.webCertificateFullHashs) { cmdData.result += '\r\nwebCertificateFullHash (' + i + '): ' + common.rstr2hex(parent.webCertificateFullHashs[i]); }
659
+ cmdData.result += '\r\ndefaultWebCertificateHash: ' + common.rstr2hex(parent.defaultWebCertificateHash);
660
+ cmdData.result += '\r\ndefaultWebCertificateFullHash: ' + common.rstr2hex(parent.defaultWebCertificateFullHash);
661
}
662
672
- function amtacmConsoleCommand(command, cmdargs) {
673
- var r = '';
663
+ function amtacmConsoleCommand(cmdData) {
664
if ((domain.amtacmactivation == null) || (domain.amtacmactivation.acmmatch == null) || (domain.amtacmactivation.acmmatch.length == 0)) {
675
- r = 'No Intel AMT activation certificates.';
665
+ cmdData.result = 'No Intel AMT activation certificates.';
666
} else {
677
- if (domain.amtacmactivation.log != null) { r += '--- Activation Log ---\r\nFile : ' + domain.amtacmactivation.log + '\r\n'; }
667
+ if (domain.amtacmactivation.log != null) { cmdData.result += '--- Activation Log ---\r\nFile : ' + domain.amtacmactivation.log + '\r\n'; }
668
for (var i in domain.amtacmactivation.acmmatch) {
669
var acmcert = domain.amtacmactivation.acmmatch[i];
680
- r += '--- Activation Certificate ' + (parseInt(i) + 1) + ' ---\r\nName : ' + acmcert.cn + '\r\nSHA1 : ' + acmcert.sha1 + '\r\nSHA256: ' + acmcert.sha256 + '\r\n';
670
+ cmdData.result += '--- Activation Certificate ' + (parseInt(i) + 1) + ' ---\r\nName : ' + acmcert.cn + '\r\nSHA1 : ' + acmcert.sha1 + '\r\nSHA256: ' + acmcert.sha256 + '\r\n';
671
}
672
}
683
- return r;
673
}
674
686
- function heapdumpConsoleCommand(command, cmdargs) {
687
- var r = '';
675
+ function heapdumpConsoleCommand(cmdData) {
676
// Heapdump support, see example at:
677
// https://www.arbazsiddiqui.me/a-practical-guide-to-memory-leaks-in-nodejs/
678
if (parent.parent.config.settings.heapdump === true) {
679
var dumpFileName = parent.path.join(parent.parent.datapath, `heapDump-${Date.now()}.heapsnapshot`);
692
- try { ws.send(JSON.stringify({ action: 'serverconsole', value: "Generating dump file at: " + dumpFileName, tag: command.tag })); } catch (ex) { }
680
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: "Generating dump file at: " + dumpFileName, tag: cmdData.command.tag })); } catch (ex) { }
681
require('heapdump').writeSnapshot(dumpFileName, (err, filename) => {
694
- try { ws.send(JSON.stringify({ action: 'serverconsole', value: "Done.", tag: command.tag })); } catch (ex) { }
682
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: "Done.", tag: cmdData.command.tag })); } catch (ex) { }
683
});
684
} else {
697
- r = "Heapdump not supported, add \"heapdump\":true to settings section of config.json.";
685
+ cmdData.result = "Heapdump not supported, add \"heapdump\":true to settings section of config.json.";
686
}
699
- return r;
687
}
688
702
- function heapdump2ConsoleCommand(command, cmdargs) {
703
- var r = '';
689
+ function heapdump2ConsoleCommand(cmdData) {
690
var heapdump = null;
691
try { heapdump = require('heapdump'); } catch (ex) { }
692
if (heapdump == null) {
707
- r = 'Heapdump module not installed, run "npm install heapdump".';
693
+ cmdData.result = 'Heapdump module not installed, run "npm install heapdump".';
694
} else {
695
heapdump.writeSnapshot(function (err, filename) {
696
if (err != null) {
@@ -714,248 +700,212 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
700
}
701
});
702
}
717
- return r;
703
}
704
720
- function smsConsoleCommand(command, cmdargs) {
721
- var r = '';
705
+ function smsConsoleCommand(cmdData) {
706
if (parent.parent.smsserver == null) {
723
- r = "No SMS gateway in use.";
707
+ cmdData.result = "No SMS gateway in use.";
708
} else {
725
- if (cmdargs['_'].length != 2) {
726
- r = "Usage: SMS \"PhoneNumber\" \"Message\".";
709
+ if (cmdData.cmdargs['_'].length != 2) {
710
+ cmdData.result = "Usage: SMS \"PhoneNumber\" \"Message\".";
711
} else {
728
- parent.parent.smsserver.sendSMS(cmdargs['_'][0], cmdargs['_'][1], function (status, msg) {
712
+ parent.parent.smsserver.sendSMS(cmdData.cmdargs['_'][0], cmdData.cmdargs['_'][1], function (status, msg) {
713
if (typeof msg == 'string') {
730
- try { ws.send(JSON.stringify({ action: 'serverconsole', value: status ? ('Success: ' + msg) : ('Failed: ' + msg), tag: command.tag })); } catch (ex) { }
714
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: status ? ('Success: ' + msg) : ('Failed: ' + msg), tag: cmdData.command.tag })); } catch (ex) { }
715
} else {
732
- try { ws.send(JSON.stringify({ action: 'serverconsole', value: status ? 'Success' : 'Failed', tag: command.tag })); } catch (ex) { }
716
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: status ? 'Success' : 'Failed', tag: cmdData.command.tag })); } catch (ex) { }
717
}
718
});
719
}
720
}
737
- return r;
721
}
722
740
- function emailConsoleCommand(command, cmdargs) {
741
- var r = '';
723
+ function emailConsoleCommand(cmdData) {
724
if (domain.mailserver == null) {
743
- r = "No email service enabled.";
725
+ cmdData.result = "No email service enabled.";
726
} else {
745
- if (cmdargs['_'].length != 3) {
746
- r = "Usage: email \"user@sample.com\" \"Subject\" \"Message\".";
727
+ if (cmdData.cmdargs['_'].length != 3) {
728
+ cmdData.result = "Usage: email \"user@sample.com\" \"Subject\" \"Message\".";
729
} else {
748
- domain.mailserver.sendMail(cmdargs['_'][0], cmdargs['_'][1], cmdargs['_'][2]);
749
- r = "Done.";
730
+ domain.mailserver.sendMail(cmdData.cmdargs['_'][0], cmdData.cmdargs['_'][1], cmdData.cmdargs['_'][2]);
731
+ cmdData.result = "Done.";
732
}
733
}
752
- return r;
734
}
735
755
- function leConsoleCommand(command, cmdargs) {
756
- var r = '';
736
+ function leConsoleCommand(cmdData) {
737
if (parent.parent.letsencrypt == null) {
758
- r = "Let's Encrypt not in use.";
738
+ cmdData.result = "Let's Encrypt not in use.";
739
} else {
760
- r = JSON.stringify(parent.parent.letsencrypt.getStats(), null, 4);
740
+ cmdData.result = JSON.stringify(parent.parent.letsencrypt.getStats(), null, 4);
741
}
762
- return r;
742
}
743
765
- function lecheckConsoleCommand(command, cmdargs) {
766
- var r = '';
744
+ function lecheckConsoleCommand(cmdData) {
745
if (parent.parent.letsencrypt == null) {
768
- r = "Let's Encrypt not in use.";
746
+ cmdData.result = "Let's Encrypt not in use.";
747
} else {
770
- r = ["CertOK", "Request:NoCert", "Request:Expire", "Request:MissingNames"][parent.parent.letsencrypt.checkRkenewCertificate()];
748
+ cmdData.result = ["CertOK", "Request:NoCert", "Request:Expire", "Request:MissingNames"][parent.parent.letsencrypt.checkRkenewCertificate()];
749
}
772
- return r;
750
}
751
775
- function leeventsConsoleCommand(command, cmdargs) {
776
- var r = '';
752
+ function leeventsConsoleCommand(cmdData) {
753
if (parent.parent.letsencrypt == null) {
778
- r = "Let's Encrypt not in use.";
754
+ cmdData.result = "Let's Encrypt not in use.";
755
} else {
780
- r = parent.parent.letsencrypt.events.join('\r\n');
756
+ cmdData.result = parent.parent.letsencrypt.events.join('\r\n');
757
}
782
- return r;
758
}
759
785
- function badloginsConsoleCommand(command, cmdargs) {
786
- var r = '';
760
+ function badloginsConsoleCommand(cmdData) {
761
if (parent.parent.config.settings.maxinvalidlogin == false) {
788
- r = 'Bad login filter is disabled.';
762
+ cmdData.result = 'Bad login filter is disabled.';
763
} else {
790
- if (cmdargs['_'] == 'reset') {
764
+ if (cmdData.cmdargs['_'] == 'reset') {
765
// Reset bad login table
766
parent.badLoginTable = {};
767
parent.badLoginTableLastClean = 0;
794
- r = 'Done.'
795
- } else if (cmdargs['_'] == '') {
768
+ cmdData.result = 'Done.'
769
+ } else if (cmdData.cmdargs['_'] == '') {
770
// Show current bad login table
771
if (typeof parent.parent.config.settings.maxinvalidlogin.coolofftime == 'number') {
798
- 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";
772
+ 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";
773
} else {
800
- r = "Max is " + parent.parent.config.settings.maxinvalidlogin.count + " bad login(s) in " + parent.parent.config.settings.maxinvalidlogin.time + " minute(s).\r\n";
774
+ cmdData.result = "Max is " + parent.parent.config.settings.maxinvalidlogin.count + " bad login(s) in " + parent.parent.config.settings.maxinvalidlogin.time + " minute(s).\r\n";
775
}
776
var badLoginCount = 0;
777
parent.cleanBadLoginTable();
778
for (var i in parent.badLoginTable) {
779
badLoginCount++;
780
if (typeof parent.badLoginTable[i] == 'number') {
807
- r += "Cooloff for " + Math.floor((parent.badLoginTable[i] - Date.now()) / 60000) + " minute(s)\r\n";
781
+ cmdData.result += "Cooloff for " + Math.floor((parent.badLoginTable[i] - Date.now()) / 60000) + " minute(s)\r\n";
782
} else {
783
if (parent.badLoginTable[i].length > 1) {
810
- r += (i + ' - ' + parent.badLoginTable[i].length + " records\r\n");
784
+ cmdData.result += (i + ' - ' + parent.badLoginTable[i].length + " records\r\n");
785
} else {
812
- r += (i + ' - ' + parent.badLoginTable[i].length + " record\r\n");
786
+ cmdData.result += (i + ' - ' + parent.badLoginTable[i].length + " record\r\n");
787
}
788
}
789
}
816
- if (badLoginCount == 0) { r += 'No bad logins.'; }
790
+ if (badLoginCount == 0) { cmdData.result += 'No bad logins.'; }
791
} else {
818
- r = 'Usage: badlogin [reset]';
792
+ cmdData.result = 'Usage: badlogin [reset]';
793
}
794
}
821
- return r;
795
}
796
824
- function dispatchtableConsoleCommand(command, cmdargs) {
825
- var r = '';
797
+ function dispatchtableConsoleCommand(cmdData) {
798
for (var i in parent.parent.eventsDispatch) {
827
- r += (i + ', ' + parent.parent.eventsDispatch[i].length + '\r\n');
799
+ cmdData.result += (i + ', ' + parent.parent.eventsDispatch[i].length + '\r\n');
800
}
829
- return r;
801
}
802
832
- function dupagentsConsoleCommand(command, cmdargs) {
833
- var r = '';
803
+ function dupagentsConsoleCommand(cmdData) {
804
for (var i in parent.duplicateAgentsLog) {
835
- r += JSON.stringify(parent.duplicateAgentsLog[i]) + '\r\n';
805
+ cmdData.result += JSON.stringify(parent.duplicateAgentsLog[i]) + '\r\n';
806
}
837
- if (r == '') { r = 'No duplicate agents in log.'; }
838
- return r;
807
+ if (cmdData.result == '') { cmdData.result = 'No duplicate agents in log.'; }
808
}
809
841
- function agentstatsConsoleCommand(command, cmdargs) {
842
- var r = '';
810
+ function agentstatsConsoleCommand(cmdData) {
811
var stats = parent.getAgentStats();
812
for (var i in stats) {
845
- if (typeof stats[i] == 'object') { r += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { r += (i + ': ' + stats[i] + '\r\n'); }
813
+ if (typeof stats[i] == 'object') { cmdData.result += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { cmdData.result += (i + ': ' + stats[i] + '\r\n'); }
814
}
847
- return r;
815
}
816
850
- function agentissuesConsoleCommand(command, cmdargs) {
851
- var r = '';
817
+ function agentissuesConsoleCommand(cmdData) {
818
var stats = parent.getAgentIssues();
819
if (stats.length == 0) {
854
- r = "No agent issues.";
820
+ cmdData.result = "No agent issues.";
821
} else {
856
- for (var i in stats) { r += stats[i].join(', ') + '\r\n'; }
822
+ for (var i in stats) { cmdData.result += stats[i].join(', ') + '\r\n'; }
823
}
858
- return r;
824
}
825
861
- function webstatsConsoleCommand(command, cmdargs) {
862
- var r = '';
826
+ function webstatsConsoleCommand(cmdData) {
827
var stats = parent.getStats();
828
for (var i in stats) {
865
- if (typeof stats[i] == 'object') { r += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { r += (i + ': ' + stats[i] + '\r\n'); }
829
+ if (typeof stats[i] == 'object') { cmdData.result += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { cmdData.result += (i + ': ' + stats[i] + '\r\n'); }
830
}
867
- return r;
831
}
832
870
- function trafficstatsConsoleCommand(command, cmdargs) {
871
- var r = '';
833
+ function trafficstatsConsoleCommand(cmdData) {
834
var stats = parent.getTrafficStats();
835
for (var i in stats) {
874
- if (typeof stats[i] == 'object') { r += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { r += (i + ': ' + stats[i] + '\r\n'); }
836
+ if (typeof stats[i] == 'object') { cmdData.result += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { cmdData.result += (i + ': ' + stats[i] + '\r\n'); }
837
}
876
- return r;
838
}
839
879
- function trafficdeltaConsoleCommand(command, cmdargs) {
880
- var r = '';
840
+ function trafficdeltaConsoleCommand(cmdData) {
841
const stats = parent.getTrafficDelta(obj.trafficStats);
842
obj.trafficStats = stats.current;
843
for (var i in stats.delta) {
884
- if (typeof stats.delta[i] == 'object') { r += (i + ': ' + JSON.stringify(stats.delta[i]) + '\r\n'); } else { r += (i + ': ' + stats.delta[i] + '\r\n'); }
844
+ 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'); }
845
}
886
- return r;
846
}
847
889
- function watchdogConsoleCommand(command, cmdargs) {
890
- var r = '';
848
+ function watchdogConsoleCommand(cmdData) {
849
if (parent.parent.watchdog == null) {
892
- r = 'Server watchdog not active.';
850
+ cmdData.result = 'Server watchdog not active.';
851
} else {
894
- r = 'Server watchdog active.\r\n';
895
- if (parent.parent.watchdogmaxtime != null) { r += 'Largest timeout was ' + parent.parent.watchdogmax + 'ms on ' + parent.parent.watchdogmaxtime + '\r\n'; }
896
- for (var i in parent.parent.watchdogtable) { r += parent.parent.watchdogtable[i] + '\r\n'; }
852
+ cmdData.result = 'Server watchdog active.\r\n';
853
+ if (parent.parent.watchdogmaxtime != null) { cmdData.result += 'Largest timeout was ' + parent.parent.watchdogmax + 'ms on ' + parent.parent.watchdogmaxtime + '\r\n'; }
854
+ for (var i in parent.parent.watchdogtable) { cmdData.result += parent.parent.watchdogtable[i] + '\r\n'; }
855
}
898
- return r;
856
}
857
901
- function acceleratorsstatsConsoleCommand(command, cmdargs) {
902
- var r = '';
858
+ function acceleratorsstatsConsoleCommand(cmdData) {
859
var stats = parent.parent.certificateOperations.getAcceleratorStats();
860
for (var i in stats) {
905
- if (typeof stats[i] == 'object') { r += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { r += (i + ': ' + stats[i] + '\r\n'); }
861
+ if (typeof stats[i] == 'object') { cmdData.result += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { cmdData.result += (i + ': ' + stats[i] + '\r\n'); }
862
}
907
- return r;
863
}
864
910
- function mpsstatsConsoleCommand(command, cmdargs) {
911
- var r = '';
865
+ function mpsstatsConsoleCommand(cmdData) {
866
if (parent.parent.mpsserver == null) {
913
- r = 'MPS not enabled.';
867
+ cmdData.result = 'MPS not enabled.';
868
} else {
869
var stats = parent.parent.mpsserver.getStats();
870
for (var i in stats) {
917
- if (typeof stats[i] == 'object') { r += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { r += (i + ': ' + stats[i] + '\r\n'); }
871
+ if (typeof stats[i] == 'object') { cmdData.result += (i + ': ' + JSON.stringify(stats[i]) + '\r\n'); } else { cmdData.result += (i + ': ' + stats[i] + '\r\n'); }
872
}
873
}
920
- return r;
874
}
875
923
- function mpsConsoleCommand(command, cmdargs) {
924
- var r = '';
876
+ function mpsConsoleCommand(cmdData) {
877
if (parent.parent.mpsserver == null) {
926
- r = 'MPS not enabled.';
878
+ cmdData.result = 'MPS not enabled.';
879
} else {
880
const connectionTypes = ['CIRA', 'Relay', 'LMS'];
881
for (var nodeid in parent.parent.mpsserver.ciraConnections) {
930
- r += nodeid;
882
+ cmdData.result += nodeid;
883
var connections = parent.parent.mpsserver.ciraConnections[nodeid];
932
- for (var i in connections) { r += ', ' + connectionTypes[connections[i].tag.connType]; }
933
- r += '\r\n';
884
+ for (var i in connections) { cmdData.result += ', ' + connectionTypes[connections[i].tag.connType]; }
885
+ cmdData.result += '\r\n';
886
}
935
- if (r == '') { r = 'MPS has not connections.'; }
887
+ if (cmdData.result == '') { cmdData.result = 'MPS has not connections.'; }
888
}
937
- return r;
889
}
890
940
- function dbstatsConsoleCommand(command, cmdargs) {
891
+ function dbstatsConsoleCommand(cmdData) {
892
parent.parent.db.getStats(function (stats) {
893
var r2 = '';
894
for (var i in stats) { r2 += (i + ': ' + stats[i] + '\r\n'); }
944
- try { ws.send(JSON.stringify({ action: 'serverconsole', value: r2, tag: command.tag })); } catch (ex) { }
895
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: r2, tag: cmdData.command.tag })); } catch (ex) { }
896
});
897
}
898
948
- function dbcountersConsoleCommand(command, cmdargs) {
949
- try { ws.send(JSON.stringify({ action: 'serverconsole', value: JSON.stringify(parent.parent.db.dbCounters, null, 2), tag: command.tag })); } catch (ex) { }
899
+ function dbcountersConsoleCommand(cmdData) {
900
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: JSON.stringify(parent.parent.db.dbCounters, null, 2), tag: cmdData.command.tag })); } catch (ex) { }
901
}
902
952
- function serverupdateConsoleCommand(command, cmdargs) {
953
- var r = '';
954
- r = 'Performing server update...';
903
+ function serverupdateConsoleCommand(cmdData) {
904
+ cmdData.result = 'Performing server update...';
905
var version = null;
906
957
- if (cmdargs['_'].length > 0) {
958
- version = cmdargs['_'][0];
907
+ if (cmdData.cmdargs['_'].length > 0) {
908
+ version = cmdData.cmdargs['_'][0];
909
910
// This call is SLOW. We only want to validate version if we have to
911
if (version != 'stable' && version != 'latest') {
@@ -978,56 +928,48 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
928
});
929
} else {
930
if (parent.parent.performServerUpdate(version) == false) {
981
- r = 'Server self-update not possible.';
931
+ cmdData.result = 'Server self-update not possible.';
932
}
933
}
934
} else {
935
if (parent.parent.performServerUpdate(version) == false) {
986
- r = 'Server self-update not possible.';
936
+ cmdData.result = 'Server self-update not possible.';
937
}
938
}
989
- return r;
939
}
940
992
- function printConsoleCommand(command, cmdargs) {
993
- console.log(cmdargs['_'][0]);
941
+ function printConsoleCommand(cmdData) {
942
+ console.log(cmdData.cmdargs['_'][0]);
943
}
944
996
- function amtpasswordsConsoleCommand(command, cmdargs) {
997
- var r = '';
945
+ function amtpasswordsConsoleCommand(cmdData) {
946
if (parent.parent.amtPasswords == null) {
999
- r = "No Intel AMT password table."
947
+ cmdData.result = "No Intel AMT password table."
948
} else {
1001
- for (var i in parent.parent.amtPasswords) { r += (i + ' - ' + parent.parent.amtPasswords[i].join(', ') + '\r\n'); }
949
+ for (var i in parent.parent.amtPasswords) { cmdData.result += (i + ' - ' + parent.parent.amtPasswords[i].join(', ') + '\r\n'); }
950
}
1003
- return r;
951
}
952
1006
- function updatecheckConsoleCommand(command, cmdargs) {
1007
- var r = '';
953
+ function updatecheckConsoleCommand(cmdData) {
954
parent.parent.getServerTags(function (tags, error) {
955
var r2 = '';
956
if (error != null) { r2 += 'Exception: ' + error + '\r\n'; }
957
else { for (var i in tags) { r2 += i + ': ' + tags[i] + '\r\n'; } }
1012
- try { ws.send(JSON.stringify({ action: 'serverconsole', value: r2, tag: command.tag })); } catch (ex) { }
958
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: r2, tag: cmdData.command.tag })); } catch (ex) { }
959
});
1014
- r = "Checking server update...";
1015
- return r;
960
+ cmdData.result = "Checking server update...";
961
}
962
1018
- function maintenanceConsoleCommand(command, cmdargs) {
1019
- var r = '';
963
+ function maintenanceConsoleCommand(cmdData) {
964
var arg = null, changed = false;
1021
- if ((cmdargs['_'] != null) && (cmdargs['_'][0] != null)) { arg = cmdargs['_'][0].toLowerCase(); }
965
+ if ((cmdData.cmdargs['_'] != null) && (cmdData.cmdargs['_'][0] != null)) { arg = cmdData.cmdargs['_'][0].toLowerCase(); }
966
if (arg == 'enabled') { parent.parent.config.settings.maintenancemode = 1; changed = true; }
967
else if (arg == 'disabled') { delete parent.parent.config.settings.maintenancemode; changed = true; }
1024
- r = 'Maintenance mode: ' + ((parent.parent.config.settings.maintenancemode == null) ? 'Disabled' : 'Enabled');
1025
- if (changed == false) { r += '\r\nTo change type: maintenance [enabled|disabled]'; }
1026
- return r;
968
+ cmdData.result = 'Maintenance mode: ' + ((parent.parent.config.settings.maintenancemode == null) ? 'Disabled' : 'Enabled');
969
+ if (changed == false) { cmdData.result += '\r\nTo change type: maintenance [enabled|disabled]'; }
970
}
971
1029
- function infoConsoleCommand(command, cmdargs) {
1030
- var r = '';
972
+ function infoConsoleCommand(cmdData) {
973
var info = process.memoryUsage();
974
info.dbType = ['None', 'NeDB', 'MongoJS', 'MongoDB'][parent.db.databaseType];
975
try { if (parent.parent.multiServer != null) { info.serverId = parent.parent.multiServer.serverid; } } catch (ex) { }
@@ -1044,51 +986,47 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
986
try { info.database = ["Unknown", "NeDB", "MongoJS", "MongoDB", "MariaDB", "MySQL"][parent.parent.db.databaseType]; } catch (ex) { }
987
try { info.productionMode = ((process.env.NODE_ENV != null) && (process.env.NODE_ENV == 'production')); } catch (ex) { }
988
try { info.allDevGroupManagers = parent.parent.config.settings.managealldevicegroups; } catch (ex) { }
1047
- r = JSON.stringify(info, null, 4);
1048
- return r;
989
+ cmdData.result = JSON.stringify(info, null, 4);
990
}
991
1051
- function nodeconfigConsoleCommand(command, cmdargs) {
1052
- return JSON.stringify(process.config, null, 4);
992
+ function nodeconfigConsoleCommand(cmdData) {
993
+ cmdData.result = JSON.stringify(process.config, null, 4);
994
}
995
1055
- function versionsConsoleCommand(command, cmdargs) {
1056
- return JSON.stringify(process.versions, null, 4);
996
+ function versionsConsoleCommand(cmdData) {
997
+ cmdData.result = JSON.stringify(process.versions, null, 4);
998
}
999
1059
- function argsConsoleCommand(command, cmdargs) {
1060
- return 'args: ' + JSON.stringify(cmdargs);
1000
+ function argsConsoleCommand(cmdData) {
1001
+ cmdData.result = 'args: ' + JSON.stringify(cmdData.cmdargs);
1002
}
1003
1063
- function usersessionsConsoleCommand(command, cmdargs) {
1064
- var r = '';
1004
+ function usersessionsConsoleCommand(cmdData) {
1005
var userSessionCount = 0;
1006
var filter = null;
1067
- var arg = cmdargs['_'][0];
1007
+ var arg = cmdData.cmdargs['_'][0];
1008
if (typeof arg == 'string') { if (arg.indexOf('/') >= 0) { filter = arg; } else { filter = ('user/' + domain.id + '/' + arg); } }
1009
for (var i in parent.wssessions) {
1010
if ((filter == null) || (filter == i)) {
1011
userSessionCount++;
1072
- r += (i + ', ' + parent.wssessions[i].length + ' session' + ((parent.wssessions[i].length > 1) ? 's' : '') + '.\r\n');
1012
+ cmdData.result += (i + ', ' + parent.wssessions[i].length + ' session' + ((parent.wssessions[i].length > 1) ? 's' : '') + '.\r\n');
1013
for (var j in parent.wssessions[i]) {
1074
- r += ' ' + parent.wssessions[i][j].clientIp + ' --> ' + parent.wssessions[i][j].sessionId + '\r\n';
1014
+ cmdData.result += ' ' + parent.wssessions[i][j].clientIp + ' --> ' + parent.wssessions[i][j].sessionId + '\r\n';
1015
}
1016
}
1017
}
1078
- if (userSessionCount == 0) { r = 'None.'; }
1079
- return r;
1018
+ if (userSessionCount == 0) { cmdData.result = 'None.'; }
1019
}
1020
1082
- function closeusersessionsConsoleCommand(command, cmdargs) {
1083
- var r = '';
1021
+ function closeusersessionsConsoleCommand(cmdData) {
1022
var userSessionCount = 0;
1023
var filter = null;
1086
- var arg = cmdargs['_'][0];
1024
+ var arg = cmdData.cmdargs['_'][0];
1025
if (typeof arg == 'string') { if (arg.indexOf('/') >= 0) { filter = arg; } else { filter = ('user/' + domain.id + '/' + arg); } }
1026
if (filter == null) {
1089
- r += "Usage: closeusersessions <username>";
1027
+ cmdData.result += "Usage: closeusersessions <username>";
1028
} else {
1091
- r += "Closing user sessions for: " + filter + '\r\n';
1029
+ cmdData.result += "Closing user sessions for: " + filter + '\r\n';
1030
for (var i in parent.wssessions) {
1031
if (filter == i) {
1032
userSessionCount++;
@@ -1098,134 +1036,115 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1036
}
1037
}
1038
}
1101
- if (userSessionCount < 2) { r += 'Disconnected ' + userSessionCount + ' session.'; } else { r += 'Disconnected ' + userSessionCount + ' sessions.'; };
1039
+ if (userSessionCount < 2) { cmdData.result += 'Disconnected ' + userSessionCount + ' session.'; } else { cmdData.result += 'Disconnected ' + userSessionCount + ' sessions.'; };
1040
}
1103
- return r;
1041
}
1042
1106
- function resetserverConsoleCommand(command, cmdargs) {
1043
+ function resetserverConsoleCommand(cmdData) {
1044
console.log("Server restart...");
1045
process.exit(0);
1046
}
1047
1111
- function tasklimiterConsoleCommand(command, cmdargs) {
1112
- var r = '';
1048
+ function tasklimiterConsoleCommand(cmdData) {
1049
if (parent.parent.taskLimiter != null) {
1050
//var obj = { maxTasks: maxTasks, maxTaskTime: (maxTaskTime * 1000), nextTaskId: 0, currentCount: 0, current: {}, pending: [[], [], []], timer: null };
1051
const tl = parent.parent.taskLimiter;
1116
- r += 'MaxTasks: ' + tl.maxTasks + ', NextTaskId: ' + tl.nextTaskId + '\r\n';
1117
- r += 'MaxTaskTime: ' + (tl.maxTaskTime / 1000) + ' seconds, Timer: ' + (tl.timer != null) + '\r\n';
1052
+ cmdData.result += 'MaxTasks: ' + tl.maxTasks + ', NextTaskId: ' + tl.nextTaskId + '\r\n';
1053
+ cmdData.result += 'MaxTaskTime: ' + (tl.maxTaskTime / 1000) + ' seconds, Timer: ' + (tl.timer != null) + '\r\n';
1054
var c = [];
1055
for (var i in tl.current) { c.push(i); }
1120
- r += 'Current (' + tl.currentCount + '): [' + c.join(', ') + ']\r\n';
1121
- r += 'Pending (High/Med/Low): ' + tl.pending[0].length + ', ' + tl.pending[1].length + ', ' + tl.pending[2].length + '\r\n';
1056
+ cmdData.result += 'Current (' + tl.currentCount + '): [' + c.join(', ') + ']\r\n';
1057
+ cmdData.result += 'Pending (High/Med/Low): ' + tl.pending[0].length + ', ' + tl.pending[1].length + ', ' + tl.pending[2].length + '\r\n';
1058
}
1123
- return r;
1059
}
1060
1126
- function setmaxtasksConsoleCommand(command, cmdargs) {
1127
- var r = '';
1128
- if ((cmdargs["_"].length != 1) || (parseInt(cmdargs["_"][0]) < 1) || (parseInt(cmdargs["_"][0]) > 1000)) {
1129
- r = 'Usage: setmaxtasks [1 to 1000]';
1061
+ function setmaxtasksConsoleCommand(cmdData) {
1062
+ if ((cmdData.cmdargs["_"].length != 1) || (parseInt(cmdData.cmdargs["_"][0]) < 1) || (parseInt(cmdData.cmdargs["_"][0]) > 1000)) {
1063
+ cmdData.result = 'Usage: setmaxtasks [1 to 1000]';
1064
} else {
1131
- parent.parent.taskLimiter.maxTasks = parseInt(cmdargs["_"][0]);
1132
- r = 'MaxTasks set to ' + parent.parent.taskLimiter.maxTasks + '.';
1065
+ parent.parent.taskLimiter.maxTasks = parseInt(cmdData.cmdargs["_"][0]);
1066
+ cmdData.result = 'MaxTasks set to ' + parent.parent.taskLimiter.maxTasks + '.';
1067
}
1134
- return r;
1068
}
1069
1137
- function coresConsoleCommand(command, cmdargs) {
1138
- var r = '';
1070
+ function coresConsoleCommand(cmdData) {
1071
if (parent.parent.defaultMeshCores != null) {
1072
for (var i in parent.parent.defaultMeshCores) {
1141
- r += i + ': ' + parent.parent.defaultMeshCores[i].length + ' bytes\r\n';
1073
+ cmdData.result += i + ': ' + parent.parent.defaultMeshCores[i].length + ' bytes\r\n';
1074
}
1075
}
1144
- return r;
1076
}
1077
1147
- function showpathsConsoleCommand(command, cmdargs) {
1148
- var r = '';
1149
- r = 'Parent: ' + parent.parent.parentpath + '\r\n';
1150
- r += 'Data: ' + parent.parent.datapath + '\r\n';
1151
- r += 'Files: ' + parent.parent.filespath + '\r\n';
1152
- r += 'Backup: ' + parent.parent.backuppath + '\r\n';
1153
- r += 'Record: ' + parent.parent.recordpath + '\r\n';
1154
- r += 'WebPublic: ' + parent.parent.webPublicPath + '\r\n';
1155
- r += 'WebViews: ' + parent.parent.webViewsPath + '\r\n';
1156
- if (parent.parent.webViewsOverridePath) { r += 'XWebPublic: ' + parent.parent.webViewsOverridePath + '\r\n'; }
1157
- if (parent.parent.webViewsOverridePath) { r += 'XWebViews: ' + parent.parent.webPublicOverridePath + '\r\n'; }
1158
- return r;
1078
+ function showpathsConsoleCommand(cmdData) {
1079
+ cmdData.result = 'Parent: ' + parent.parent.parentpath + '\r\n';
1080
+ cmdData.result += 'Data: ' + parent.parent.datapath + '\r\n';
1081
+ cmdData.result += 'Files: ' + parent.parent.filespath + '\r\n';
1082
+ cmdData.result += 'Backup: ' + parent.parent.backuppath + '\r\n';
1083
+ cmdData.result += 'Record: ' + parent.parent.recordpath + '\r\n';
1084
+ cmdData.result += 'WebPublic: ' + parent.parent.webPublicPath + '\r\n';
1085
+ cmdData.result += 'WebViews: ' + parent.parent.webViewsPath + '\r\n';
1086
+ if (parent.parent.webViewsOverridePath) { cmdData.result += 'XWebPublic: ' + parent.parent.webViewsOverridePath + '\r\n'; }
1087
+ if (parent.parent.webViewsOverridePath) { cmdData.result += 'XWebViews: ' + parent.parent.webPublicOverridePath + '\r\n'; }
1088
}
1089
1161
- function migrationagentsConsoleCommand(command, cmdargs) {
1162
- var r = '';
1090
+ function migrationagentsConsoleCommand(cmdData) {
1091
if (parent.parent.swarmserver == null) {
1164
- r = 'Swarm server not running.';
1092
+ cmdData.result = 'Swarm server not running.';
1093
} else {
1094
for (var i in parent.parent.swarmserver.migrationAgents) {
1095
var arch = parent.parent.swarmserver.migrationAgents[i];
1168
- 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 />'; }
1096
+ 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 />'; }
1097
}
1098
}
1171
- return r;
1099
}
1100
1174
- function swarmstatsConsoleCommand(command, cmdargs) {
1175
- var r = '';
1101
+ function swarmstatsConsoleCommand(cmdData) {
1102
if (parent.parent.swarmserver == null) {
1177
- r = 'Swarm server not running.';
1103
+ cmdData.result = 'Swarm server not running.';
1104
} else {
1105
for (var i in parent.parent.swarmserver.stats) {
1106
if (typeof parent.parent.swarmserver.stats[i] == 'object') {
1181
- r += i + ': ' + JSON.stringify(parent.parent.swarmserver.stats[i]) + '\r\n';
1107
+ cmdData.result += i + ': ' + JSON.stringify(parent.parent.swarmserver.stats[i]) + '\r\n';
1108
} else {
1183
- r += i + ': ' + parent.parent.swarmserver.stats[i] + '\r\n';
1109
+ cmdData.result += i + ': ' + parent.parent.swarmserver.stats[i] + '\r\n';
1110
}
1111
}
1112
}
1187
- return r;
1113
}
1114
1190
- function relaysConsoleCommand(command, cmdargs) {
1191
- var r = '';
1115
+ function relaysConsoleCommand(cmdData) {
1116
for (var i in parent.wsrelays) {
1193
- r += 'id: ' + i + ', ' + ((parent.wsrelays[i].state == 2) ? 'connected' : 'pending');
1117
+ cmdData.result += 'id: ' + i + ', ' + ((parent.wsrelays[i].state == 2) ? 'connected' : 'pending');
1118
if (parent.wsrelays[i].peer1 != null) {
1195
- r += ', ' + cleanRemoteAddr(parent.wsrelays[i].peer1.req.clientIp);
1196
- if (parent.wsrelays[i].peer1.user) { r += ' (User:' + parent.wsrelays[i].peer1.user.name + ')' }
1119
+ cmdData.result += ', ' + cleanRemoteAddr(parent.wsrelays[i].peer1.req.clientIp);
1120
+ if (parent.wsrelays[i].peer1.user) { cmdData.result += ' (User:' + parent.wsrelays[i].peer1.user.name + ')' }
1121
}
1122
if (parent.wsrelays[i].peer2 != null) {
1199
- r += ' to ' + cleanRemoteAddr(parent.wsrelays[i].peer2.req.clientIp);
1200
- if (parent.wsrelays[i].peer2.user) { r += ' (User:' + parent.wsrelays[i].peer2.user.name + ')' }
1123
+ cmdData.result += ' to ' + cleanRemoteAddr(parent.wsrelays[i].peer2.req.clientIp);
1124
+ if (parent.wsrelays[i].peer2.user) { cmdData.result += ' (User:' + parent.wsrelays[i].peer2.user.name + ')' }
1125
}
1202
- r += '\r\n';
1126
+ cmdData.result += '\r\n';
1127
}
1204
- if (r == '') { r = 'No relays.'; }
1205
- return r;
1128
+ if (cmdData.result == '') { cmdData.result = 'No relays.'; }
1129
}
1130
1208
- function autobackupConsoleCommand(command, cmdargs) {
1209
- var r = '';
1131
+ function autobackupConsoleCommand(cmdData) {
1132
var backupResult = parent.db.performBackup(function (msg) {
1211
- try { ws.send(JSON.stringify({ action: 'serverconsole', value: msg, tag: command.tag })); } catch (ex) { }
1133
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: msg, tag: cmdData.command.tag })); } catch (ex) { }
1134
});
1213
- if (backupResult == 0) { r = 'Starting auto-backup...'; } else { r = 'Backup alreay in progress.'; }
1214
- return r;
1135
+ if (backupResult == 0) { cmdData.result = 'Starting auto-backup...'; } else { cmdData.result = 'Backup alreay in progress.'; }
1136
}
1137
1217
- function backupconfigConsoleCommand(command, cmdargs) {
1218
- return parent.db.getBackupConfig();
1138
+ function backupconfigConsoleCommand(cmdData) {
1139
+ cmdData.result = parent.db.getBackupConfig();
1140
}
1141
1221
- function firebaseConsoleCommand(command, cmdargs) {
1222
- var r = '';
1142
+ function firebaseConsoleCommand(cmdData) {
1143
if (parent.parent.firebase == null) {
1224
- r = "Firebase push messaging not supported";
1144
+ cmdData.result = "Firebase push messaging not supported";
1145
} else {
1226
- r = JSON.stringify(parent.parent.firebase.stats, null, 2);
1146
+ cmdData.result = JSON.stringify(parent.parent.firebase.stats, null, 2);
1147
}
1228
- return r;
1148
}
1149
1150
// Process incoming web socket data from the browser
@@ -1582,29 +1501,28 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1501
{
1502
// Do not allow this command when logged in using a login token
1503
if (req.session.loginToken != null) break;
1585
-
1504
// This is a server console message, only process this if full administrator
1505
if (user.siteadmin != SITERIGHT_ADMIN) break;
1588
-
1506
// Only accept if the console is allowed for this domain
1507
if ((domain.myserver === false) || ((domain.myserver != null) && (domain.myserver !== true) && (domain.myserver.console !== true))) break;
1508
1592
- var r = '';
1509
var cmdargs = splitArgs(command.value);
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
try {
1599
- r = consoleCommands[cmd](command, cmdargs);
1516
+ consoleCommands[cmd](cmdData, command, cmdargs);
1517
} catch (e) {
1518
if (consoleCommands[cmd] == null)
1602
- r = 'Unknown command \"' + cmd + '\", type \"help\" for list of available commands.';
1519
+ cmdData.result = 'Unknown command \"' + cmd + '\", type \"help\" for list of available commands.';
1520
else
1521
console.log(e);
1522
}
1523
1607
- if (r != null && r != '') { try { ws.send(JSON.stringify({ action: 'serverconsole', value: r, tag: command.tag })); } catch (ex) { } }
1524
+ if (cmdData.result != null && cmdData.result != '') {
1525
+ try { ws.send(JSON.stringify({ action: 'serverconsole', value: cmdData.result, tag: command.tag })); } catch (ex) { } }
1526
break;
1527
}
1528
case 'msg':