mirror of
https://github.com/Ylianst/MeshCentral.git
synced 2024-12-25 22:55:52 -05:00
Plugin and meshcmd fixes.
This commit is contained in:
parent
ad2542aa38
commit
5143751954
@ -141,6 +141,7 @@ function run(argv) {
|
|||||||
if ((typeof args.serverid) == 'string') { settings.serverid = args.serverid; }
|
if ((typeof args.serverid) == 'string') { settings.serverid = args.serverid; }
|
||||||
if ((typeof args.serverhttpshash) == 'string') { settings.serverhttpshash = args.serverhttpshash; }
|
if ((typeof args.serverhttpshash) == 'string') { settings.serverhttpshash = args.serverhttpshash; }
|
||||||
if ((typeof args.remoteport) == 'string') { settings.remoteport = parseInt(args.remoteport); }
|
if ((typeof args.remoteport) == 'string') { settings.remoteport = parseInt(args.remoteport); }
|
||||||
|
if ((typeof args.remotetarget) == 'string') { settings.remotetarget = args.remotetarget; }
|
||||||
if ((typeof args.out) == 'string') { settings.output = args.out; }
|
if ((typeof args.out) == 'string') { settings.output = args.out; }
|
||||||
if ((typeof args.output) == 'string') { settings.output = args.output; }
|
if ((typeof args.output) == 'string') { settings.output = args.output; }
|
||||||
if ((typeof args.debug) == 'string') { settings.debuglevel = parseInt(args.debug); }
|
if ((typeof args.debug) == 'string') { settings.debuglevel = parseInt(args.debug); }
|
||||||
@ -2049,10 +2050,10 @@ function startRouter() {
|
|||||||
tcpserver.on('error', function (e) { console.log('ERROR: ' + JSON.stringify(e)); exit(0); return; });
|
tcpserver.on('error', function (e) { console.log('ERROR: ' + JSON.stringify(e)); exit(0); return; });
|
||||||
tcpserver.listen(settings.localport, function () {
|
tcpserver.listen(settings.localport, function () {
|
||||||
// We started listening.
|
// We started listening.
|
||||||
if (settings.remotename == null) {
|
if (settings.remotetarget == null) {
|
||||||
console.log('Redirecting local port ' + settings.localport + ' to remote port ' + settings.remoteport + '.');
|
console.log('Redirecting local port ' + settings.localport + ' to remote port ' + settings.remoteport + '.');
|
||||||
} else {
|
} else {
|
||||||
console.log('Redirecting local port ' + settings.localport + ' to ' + settings.remotename + ':' + settings.remoteport + '.');
|
console.log('Redirecting local port ' + settings.localport + ' to ' + settings.remotetarget + ':' + settings.remoteport + '.');
|
||||||
}
|
}
|
||||||
console.log('Press ctrl-c to exit.');
|
console.log('Press ctrl-c to exit.');
|
||||||
|
|
||||||
@ -2069,7 +2070,7 @@ function OnTcpClientConnected(c) {
|
|||||||
c.on('end', function () { disconnectTunnel(this, this.websocket, 'Client closed'); });
|
c.on('end', function () { disconnectTunnel(this, this.websocket, 'Client closed'); });
|
||||||
c.pause();
|
c.pause();
|
||||||
try {
|
try {
|
||||||
options = http.parseUri(settings.serverurl + '?user=' + settings.username + '&pass=' + settings.password + '&nodeid=' + settings.remotenodeid + '&tcpport=' + settings.remoteport);
|
options = http.parseUri(settings.serverurl + '?user=' + settings.username + '&pass=' + settings.password + '&nodeid=' + settings.remotenodeid + '&tcpport=' + settings.remoteport + (settings.remotetarget == null ? '' : '&tcpaddr=' + settings.remotetarget));
|
||||||
} catch (e) { console.log('Unable to parse \"serverUrl\".'); process.exit(1); return; }
|
} catch (e) { console.log('Unable to parse \"serverUrl\".'); process.exit(1); return; }
|
||||||
options.checkServerIdentity = onVerifyServer;
|
options.checkServerIdentity = onVerifyServer;
|
||||||
options.rejectUnauthorized = false;
|
options.rejectUnauthorized = false;
|
||||||
|
7
agents/meshcmd.min.js
vendored
7
agents/meshcmd.min.js
vendored
@ -141,6 +141,7 @@ function run(argv) {
|
|||||||
if ((typeof args.serverid) == 'string') { settings.serverid = args.serverid; }
|
if ((typeof args.serverid) == 'string') { settings.serverid = args.serverid; }
|
||||||
if ((typeof args.serverhttpshash) == 'string') { settings.serverhttpshash = args.serverhttpshash; }
|
if ((typeof args.serverhttpshash) == 'string') { settings.serverhttpshash = args.serverhttpshash; }
|
||||||
if ((typeof args.remoteport) == 'string') { settings.remoteport = parseInt(args.remoteport); }
|
if ((typeof args.remoteport) == 'string') { settings.remoteport = parseInt(args.remoteport); }
|
||||||
|
if ((typeof args.remotetarget) == 'string') { settings.remotetarget = args.remotetarget; }
|
||||||
if ((typeof args.out) == 'string') { settings.output = args.out; }
|
if ((typeof args.out) == 'string') { settings.output = args.out; }
|
||||||
if ((typeof args.output) == 'string') { settings.output = args.output; }
|
if ((typeof args.output) == 'string') { settings.output = args.output; }
|
||||||
if ((typeof args.debug) == 'string') { settings.debuglevel = parseInt(args.debug); }
|
if ((typeof args.debug) == 'string') { settings.debuglevel = parseInt(args.debug); }
|
||||||
@ -2049,10 +2050,10 @@ function startRouter() {
|
|||||||
tcpserver.on('error', function (e) { console.log('ERROR: ' + JSON.stringify(e)); exit(0); return; });
|
tcpserver.on('error', function (e) { console.log('ERROR: ' + JSON.stringify(e)); exit(0); return; });
|
||||||
tcpserver.listen(settings.localport, function () {
|
tcpserver.listen(settings.localport, function () {
|
||||||
// We started listening.
|
// We started listening.
|
||||||
if (settings.remotename == null) {
|
if (settings.remotetarget == null) {
|
||||||
console.log('Redirecting local port ' + settings.localport + ' to remote port ' + settings.remoteport + '.');
|
console.log('Redirecting local port ' + settings.localport + ' to remote port ' + settings.remoteport + '.');
|
||||||
} else {
|
} else {
|
||||||
console.log('Redirecting local port ' + settings.localport + ' to ' + settings.remotename + ':' + settings.remoteport + '.');
|
console.log('Redirecting local port ' + settings.localport + ' to ' + settings.remotetarget + ':' + settings.remoteport + '.');
|
||||||
}
|
}
|
||||||
console.log('Press ctrl-c to exit.');
|
console.log('Press ctrl-c to exit.');
|
||||||
|
|
||||||
@ -2069,7 +2070,7 @@ function OnTcpClientConnected(c) {
|
|||||||
c.on('end', function () { disconnectTunnel(this, this.websocket, 'Client closed'); });
|
c.on('end', function () { disconnectTunnel(this, this.websocket, 'Client closed'); });
|
||||||
c.pause();
|
c.pause();
|
||||||
try {
|
try {
|
||||||
options = http.parseUri(settings.serverurl + '?user=' + settings.username + '&pass=' + settings.password + '&nodeid=' + settings.remotenodeid + '&tcpport=' + settings.remoteport);
|
options = http.parseUri(settings.serverurl + '?user=' + settings.username + '&pass=' + settings.password + '&nodeid=' + settings.remotenodeid + '&tcpport=' + settings.remoteport + (settings.remotetarget == null ? '' : '&tcpaddr=' + settings.remotetarget));
|
||||||
} catch (e) { console.log('Unable to parse \"serverUrl\".'); process.exit(1); return; }
|
} catch (e) { console.log('Unable to parse \"serverUrl\".'); process.exit(1); return; }
|
||||||
options.checkServerIdentity = onVerifyServer;
|
options.checkServerIdentity = onVerifyServer;
|
||||||
options.rejectUnauthorized = false;
|
options.rejectUnauthorized = false;
|
||||||
|
36
meshuser.js
36
meshuser.js
@ -611,7 +611,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
try { fs.mkdirSync(path); } catch (e) { }
|
try { fs.mkdirSync(path); } catch (e) { }
|
||||||
try { fs.mkdirSync(path + "/" + command.newfolder); } catch (e) { }
|
try { fs.mkdirSync(path + "/" + command.newfolder); } catch (e) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (command.fileop == 'delete') {
|
else if (command.fileop == 'delete') {
|
||||||
// Delete a file
|
// Delete a file
|
||||||
if (common.validateArray(command.delfiles, 1) == false) return;
|
if (common.validateArray(command.delfiles, 1) == false) return;
|
||||||
@ -669,7 +669,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case 'help': {
|
case 'help': {
|
||||||
r = 'Available commands: help, info, versions, args, resetserver, showconfig, usersessions, tasklimiter, setmaxtasks, cores,\r\n'
|
r = 'Available commands: help, info, versions, args, resetserver, showconfig, usersessions, tasklimiter, setmaxtasks, cores,\r\n'
|
||||||
r += 'migrationagents, agentstats, webstats, mpsstats, swarmstats, acceleratorsstats, updatecheck, serverupdate, nodeconfig,\r\n';
|
r += 'migrationagents, agentstats, webstats, mpsstats, swarmstats, acceleratorsstats, updatecheck, serverupdate, nodeconfig,\r\n';
|
||||||
r += 'heapdump, relays, autobackup, backupconfig, dupagents, dispatchtable.';
|
r += 'heapdump, relays, autobackup, backupconfig, dupagents, dispatchtable.';
|
||||||
break;
|
break;
|
||||||
@ -735,7 +735,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
}
|
}
|
||||||
case 'info': {
|
case 'info': {
|
||||||
var info = process.memoryUsage();
|
var info = process.memoryUsage();
|
||||||
info.dbType = ['None','NeDB','MongoJS','MongoDB'][parent.db.databaseType];
|
info.dbType = ['None', 'NeDB', 'MongoJS', 'MongoDB'][parent.db.databaseType];
|
||||||
if (parent.db.databaseType == 3) { info.dbChangeStream = parent.db.changeStream; }
|
if (parent.db.databaseType == 3) { info.dbChangeStream = parent.db.changeStream; }
|
||||||
try { info.platform = process.platform; } catch (ex) { }
|
try { info.platform = process.platform; } catch (ex) { }
|
||||||
try { info.arch = process.arch; } catch (ex) { }
|
try { info.arch = process.arch; } catch (ex) { }
|
||||||
@ -813,7 +813,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
if (config.domains[i].yubikey && config.domains[i].yubikey.secret) { config.domains[i].yubikey.secret = '(present)'; }
|
if (config.domains[i].yubikey && config.domains[i].yubikey.secret) { config.domains[i].yubikey.secret = '(present)'; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
r = JSON.stringify(removeAllUnderScore(config), null, 4);
|
r = JSON.stringify(removeAllUnderScore(config), null, 4);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1335,7 +1335,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
if (command.email != null) { newuser.email = command.email.toLowerCase(); if (command.emailVerified === true) { newuser.emailVerified = true; } } // Email
|
if (command.email != null) { newuser.email = command.email.toLowerCase(); if (command.emailVerified === true) { newuser.emailVerified = true; } } // Email
|
||||||
if (command.resetNextLogin === true) { newuser.passchange = -1; } else { newuser.passchange = Math.floor(Date.now() / 1000); }
|
if (command.resetNextLogin === true) { newuser.passchange = -1; } else { newuser.passchange = Math.floor(Date.now() / 1000); }
|
||||||
if (user.groups) { newuser.groups = user.groups; } // New accounts are automatically part of our groups (Realms).
|
if (user.groups) { newuser.groups = user.groups; } // New accounts are automatically part of our groups (Realms).
|
||||||
|
|
||||||
parent.users[newuserid] = newuser;
|
parent.users[newuserid] = newuser;
|
||||||
|
|
||||||
// Create a user, generate a salt and hash the password
|
// Create a user, generate a salt and hash the password
|
||||||
@ -1862,7 +1862,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
|
|
||||||
if (unknownUsers.length > 0) {
|
if (unknownUsers.length > 0) {
|
||||||
// Send error back, user not found.
|
// Send error back, user not found.
|
||||||
displayNotificationMessage('User' + ((unknownUsers.length > 1)?'s':'') + ' ' + EscapeHtml(unknownUsers.join(', ')) + ' not found.', 'Device Group', 'ServerNotify');
|
displayNotificationMessage('User' + ((unknownUsers.length > 1) ? 's' : '') + ' ' + EscapeHtml(unknownUsers.join(', ')) + ' not found.', 'Device Group', 'ServerNotify');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'addmeshuser', responseid: command.responseid, result: 'ok', removed: removedCount, failed: failCount })); } catch (ex) { } }
|
if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'addmeshuser', responseid: command.responseid, result: 'ok', removed: removedCount, failed: failCount })); } catch (ex) { } }
|
||||||
@ -2483,8 +2483,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
case 'inviteAgent':
|
case 'inviteAgent':
|
||||||
{
|
{
|
||||||
var err = null, mesh = null;
|
var err = null, mesh = null;
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
if ((parent.parent.mailserver == null) || (args.lanonly == true)) { err = 'Unsupported feature'; } // This operation requires the email server
|
if ((parent.parent.mailserver == null) || (args.lanonly == true)) { err = 'Unsupported feature'; } // This operation requires the email server
|
||||||
else if ((parent.parent.certificates.CommonName == null) || (parent.parent.certificates.CommonName.indexOf('.') == -1)) { err = 'Unsupported feature'; } // Server name must be configured
|
else if ((parent.parent.certificates.CommonName == null) || (parent.parent.certificates.CommonName.indexOf('.') == -1)) { err = 'Unsupported feature'; } // Server name must be configured
|
||||||
else if (common.validateString(command.meshid, 1, 1024) == false) { err = 'Invalid group identifier'; } // Check meshid
|
else if (common.validateString(command.meshid, 1, 1024) == false) { err = 'Invalid group identifier'; } // Check meshid
|
||||||
@ -3034,7 +3033,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
db.Get(nodeid, function (err, nodes) {
|
db.Get(nodeid, function (err, nodes) {
|
||||||
if ((nodes == null) || (nodes.length != 1)) { if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'getmqttlogin', responseid: command.responseid, result: 'Invalid node id' })); } catch (ex) { } return; } }
|
if ((nodes == null) || (nodes.length != 1)) { if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'getmqttlogin', responseid: command.responseid, result: 'Invalid node id' })); } catch (ex) { } return; } }
|
||||||
var node = nodes[0];
|
var node = nodes[0];
|
||||||
|
|
||||||
// Get the device group for this node
|
// Get the device group for this node
|
||||||
var mesh = parent.meshes[node.meshid];
|
var mesh = parent.meshes[node.meshid];
|
||||||
if (mesh) {
|
if (mesh) {
|
||||||
@ -3071,11 +3070,11 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
if (common.validateString(command.nodeid, 1, 1024) == false) break; // Check nodeid
|
if (common.validateString(command.nodeid, 1, 1024) == false) break; // Check nodeid
|
||||||
if (common.validateInt(command.mode, 0, 3) == false) break; // Check connection mode
|
if (common.validateInt(command.mode, 0, 3) == false) break; // Check connection mode
|
||||||
// Validate if communication mode is possible
|
// Validate if communication mode is possible
|
||||||
if (command.mode == null || command.mode==0) {
|
if (command.mode == null || command.mode == 0) {
|
||||||
break; //unsupported
|
break; //unsupported
|
||||||
} else if (command.mode == 1) {
|
} else if (command.mode == 1) {
|
||||||
var state = parent.parent.GetConnectivityState(command.nodeid);
|
var state = parent.parent.GetConnectivityState(command.nodeid);
|
||||||
if ( (state == null) || (state.connectivity & 4)==0 ) break;
|
if ((state == null) || (state.connectivity & 4) == 0) break;
|
||||||
} else if (command.mode == 2) {
|
} else if (command.mode == 2) {
|
||||||
if (parent.parent.mpsserver.ciraConnections[command.nodeid] == null) break;
|
if (parent.parent.mpsserver.ciraConnections[command.nodeid] == null) break;
|
||||||
} else if (command.mode == 3) {
|
} else if (command.mode == 3) {
|
||||||
@ -3101,18 +3100,17 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'plugin': {
|
case 'plugin': {
|
||||||
|
if (parent.parent.pluginHandler == null) break; // If the plugin's are not supported, reject this command.
|
||||||
command.userid = user._id;
|
command.userid = user._id;
|
||||||
|
|
||||||
if (command.routeToNode === true) {
|
if (command.routeToNode === true) {
|
||||||
routeCommandToNode(command);
|
routeCommandToNode(command);
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
var pluginHandler = require('./pluginHandler.js').pluginHandler(parent.parent);
|
var pluginHandler = require('./pluginHandler.js').pluginHandler(parent.parent);
|
||||||
pluginHandler.plugins[command.plugin].serveraction(command, obj, parent);
|
pluginHandler.plugins[command.plugin].serveraction(command, obj, parent);
|
||||||
} catch (e) { console.log('Error loading plugin handler (' + e + ')'); }
|
} catch (e) { console.log('Error loading plugin handler (' + e + ')'); }
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
// Unknown user action
|
// Unknown user action
|
||||||
|
@ -4687,7 +4687,7 @@
|
|||||||
var x = '';
|
var x = '';
|
||||||
if (nodeids.length > 1) { x = format("Are you sure you want to uninstall the selected {0} agents?", nodeids.length); } else { x = "Are you sure you want to uninstall selected agent?"; }
|
if (nodeids.length > 1) { x = format("Are you sure you want to uninstall the selected {0} agents?", nodeids.length); } else { x = "Are you sure you want to uninstall selected agent?"; }
|
||||||
x += '<br /><br />';
|
x += '<br /><br />';
|
||||||
if (nodeids.length > 1) { x += "This will not remove the devices from the server, but the devices will not longer be able to connect to the server. All remote access to the devices will be lost. The devices must be connect for this command to work."; } else { x += "This will not remove this device from the server, but the device will not longer be able to connect to the server. All remote access to the device will be lost. The device must be connect for this command to work."; }
|
if (nodeids.length > 1) { x += "This will not remove the devices from the server, but the devices will not longer be able to connect to the server. All remote access to the devices will be lost. The devices must be connected for this command to work."; } else { x += "This will not remove this device from the server, but the device will not longer be able to connect to the server. All remote access to the device will be lost. The device must be connect for this command to work."; }
|
||||||
x += '<br /><br /><label style=color:red><input id=p10check type=checkbox onchange=p10validateDeleteNodeDialog() />' + "Confirm" + '</label>';
|
x += '<br /><br /><label style=color:red><input id=p10check type=checkbox onchange=p10validateDeleteNodeDialog() />' + "Confirm" + '</label>';
|
||||||
setDialogMode(2, "Uninstall agent", 3, p10showSendUninstallAgentDialogEx, x, nodeids);
|
setDialogMode(2, "Uninstall agent", 3, p10showSendUninstallAgentDialogEx, x, nodeids);
|
||||||
p10validateSendUninstallAgentDialog();
|
p10validateSendUninstallAgentDialog();
|
||||||
|
@ -2955,6 +2955,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
|
|||||||
localPort: 1234,
|
localPort: 1234,
|
||||||
remoteName: node.name,
|
remoteName: node.name,
|
||||||
remoteNodeId: node._id,
|
remoteNodeId: node._id,
|
||||||
|
remoteTarget: '',
|
||||||
remotePort: 3389,
|
remotePort: 3389,
|
||||||
username: '',
|
username: '',
|
||||||
password: '',
|
password: '',
|
||||||
|
Loading…
Reference in New Issue
Block a user