Improved MeshCtrl with more support for --group

Ylian Saint-Hilaire committed Apr 8, 2020 at 11:26 UTC e555500240fe8c112fe86c607d4aab0c391d976e
2 files changed +52 -13
meshctrl.js
+18 -12
@@ -59,14 +59,14 @@ if (args['_'].length == 0) {
59 break;
60 }
61 case 'addusertodevicegroup': {
62 - if (args.userid == null) { console.log("Add user to group missing useid, use --userid [userid]"); }
63 - else if (args.id == null) { console.log("Add user to group missing group id, use --id [groupid]"); }
62 + if ((args.id == null) && (args.group == null)) { console.log("Device group identifier missing, use --id [groupid] or --group [groupname]"); }
63 + else if (args.userid == null) { console.log("Add user to group missing useid, use --userid [userid]"); }
64 else { ok = true; }
65 break;
66 }
67 case 'removeuserfromdevicegroup': {
68 - if (args.userid == null) { console.log("Remove user from group missing useid, use --userid [userid]"); }
69 - else if (args.id == null) { console.log("Remove user from group missing group id, use --id [groupid]"); }
68 + if ((args.id == null) && (args.group == null)) { console.log("Device group identifier missing, use --id [groupid] or --group [groupname]"); }
69 + else if (args.userid == null) { console.log("Remove user from group missing useid, use --userid [userid]"); }
70 else { ok = true; }
71 break;
72 }
@@ -88,7 +88,7 @@ if (args['_'].length == 0) {
88 break;
89 }
90 case 'removedevicegroup': {
91 - if (args.id == null) { console.log("Message group identifier, use --id [identifier]"); }
91 + if ((args.id == null) && (args.group == null)) { console.log("Device group identifier missing, use --id [groupid] or --group [groupname]"); }
92 else { ok = true; }
93 break;
94 }
@@ -257,15 +257,17 @@ if (args['_'].length == 0) {
257 console.log("Remove a device group, Example usages:\r\n");
258 console.log(" MeshCtrl RemoveDeviceGroup --id groupid");
259 console.log("\r\nRequired arguments:\r\n");
260 - console.log(" --id [groupid] - The group identifier.");
260 + console.log(" --id [groupid] - Device group identifier (or --group).");
261 + console.log(" --group [groupname] - Device group name (or --id).");
262 break;
263 }
264 case 'addusertodevicegroup': {
265 console.log("Add a user to a device group, Example usages:\r\n");
266 console.log(" MeshCtrl AddUserToDeviceGroup --id groupid --userid userid --fullrights");
266 - console.log(" MeshCtrl AddUserToDeviceGroup --id groupid --userid userid --editgroup --manageusers");
267 + console.log(" MeshCtrl AddUserToDeviceGroup --group groupname --userid userid --editgroup --manageusers");
268 console.log("\r\nRequired arguments:\r\n");
268 - console.log(" --id [groupid] - The group identifier.");
269 + console.log(" --id [groupid] - Device group identifier (or --group).");
270 + console.log(" --group [groupname] - Device group name (or --id).");
271 console.log(" --userid [userid] - The user identifier.");
272 console.log("\r\nOptional arguments:\r\n");
273 console.log(" --fullrights - Allow full rights over this device group.");
@@ -296,7 +298,8 @@ if (args['_'].length == 0) {
298 console.log("Remove a user from a device group, Example usages:\r\n");
299 console.log(" MeshCtrl RemoveuserFromDeviceGroup --id groupid --userid userid");
300 console.log("\r\nRequired arguments:\r\n");
299 - console.log(" --id [groupid] - The group identifier.");
301 + console.log(" --id [groupid] - Device group identifier (or --group).");
302 + console.log(" --group [groupname] - Device group name (or --id).");
303 console.log(" --userid [userid] - The user identifier.");
304 break;
305 }
@@ -572,7 +575,8 @@ function serverConnect() {
575 break;
576 }
577 case 'removedevicegroup': {
575 - var op = { action: 'deletemesh', meshid: args.id, responseid: 'meshctrl' };
578 + var op = { action: 'deletemesh', responseid: 'meshctrl' };
579 + if (args.id) { op.meshid = args.id; } else if (args.group) { op.meshname = args.group; }
580 ws.send(JSON.stringify(op));
581 break;
582 }
@@ -595,12 +599,14 @@ function serverConnect() {
599 if (args.limitedevents) { meshrights |= 8192; }
600 if (args.chatnotify) { meshrights |= 16384; }
601 if (args.uninstall) { meshrights |= 32768; }
598 - var op = { action: 'addmeshuser', meshid: args.id, usernames: [args.userid], meshadmin: meshrights, responseid: 'meshctrl' };
602 + var op = { action: 'addmeshuser', usernames: [args.userid], meshadmin: meshrights, responseid: 'meshctrl' };
603 + if (args.id) { op.meshid = args.id; } else if (args.group) { op.meshname = args.group; }
604 ws.send(JSON.stringify(op));
605 break;
606 }
607 case 'removeuserfromdevicegroup': {
603 - var op = { action: 'removemeshuser', meshid: args.id, userid: args.userid, responseid: 'meshctrl' };
608 + var op = { action: 'removemeshuser', userid: args.userid, responseid: 'meshctrl' };
609 + if (args.id) { op.meshid = args.id; } else if (args.group) { op.meshname = args.group; }
610 ws.send(JSON.stringify(op));
611 break;
612 }
meshuser.js
+34 -1
@@ -2241,6 +2241,17 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
2241 case 'deletemesh':
2242 {
2243 var err = null;
2244 +
2245 + // Resolve the device group name if needed
2246 + if ((typeof command.meshname == 'string') && (command.meshid == null)) {
2247 + for (var i in parent.meshes) {
2248 + var m = parent.meshes[i];
2249 + if ((m.mtype == 2) && (m.name == command.meshname) && parent.IsMeshViewable(user, m)) {
2250 + if (command.meshid == null) { command.meshid = m._id; } else { err = 'Duplicate device groups found'; }
2251 + }
2252 + }
2253 + }
2254 +
2255 try {
2256 // Delete a mesh and all computers within it
2257 if (common.validateString(command.meshid, 1, 1024) == false) { err = 'Invalid group identifier'; } // Check the meshid
@@ -2370,8 +2381,19 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
2381 }
2382 case 'addmeshuser':
2383 {
2373 - if (typeof command.userid == 'string') { command.userids = [ command.userid ]; }
2384 var err = null;
2385 + if (typeof command.userid == 'string') { command.userids = [command.userid]; }
2386 +
2387 + // Resolve the device group name if needed
2388 + if ((typeof command.meshname == 'string') && (command.meshid == null)) {
2389 + for (var i in parent.meshes) {
2390 + var m = parent.meshes[i];
2391 + if ((m.mtype == 2) && (m.name == command.meshname) && parent.IsMeshViewable(user, m)) {
2392 + if (command.meshid == null) { command.meshid = m._id; } else { err = 'Duplicate device groups found'; }
2393 + }
2394 + }
2395 + }
2396 +
2397 try {
2398 if (common.validateString(command.meshid, 1, 1024) == false) { err = 'Invalid groupid'; } // Check the meshid
2399 else if (common.validateInt(command.meshadmin) == false) { err = 'Invalid group rights'; } // Mesh rights must be an integer
@@ -2568,6 +2590,17 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
2590 case 'removemeshuser':
2591 {
2592 var err = null;
2593 +
2594 + // Resolve the device group name if needed
2595 + if ((typeof command.meshname == 'string') && (command.meshid == null)) {
2596 + for (var i in parent.meshes) {
2597 + var m = parent.meshes[i];
2598 + if ((m.mtype == 2) && (m.name == command.meshname) && parent.IsMeshViewable(user, m)) {
2599 + if (command.meshid == null) { command.meshid = m._id; } else { err = 'Duplicate device groups found'; }
2600 + }
2601 + }
2602 + }
2603 +
2604 try {
2605 if (common.validateString(command.userid, 1, 1024) == false) { err = "Invalid userid"; } // Check userid
2606 if (common.validateString(command.meshid, 1, 1024) == false) { err = "Invalid groupid"; } // Check meshid