Fixed create account dialog, improved meshctrl.js

Ylian Saint-Hilaire committed Dec 12, 2019 at 11:44 UTC 055190187d48a3f9577521f4afc1b68f2a94e4c1
12 files changed +45 -31
meshctrl.js
+15
@@ -163,9 +163,11 @@ if (args['_'].length == 0) {
163 console.log(" MeshCtrl ListUsers");
164 console.log(" MeshCtrl ListUsers --json");
165 console.log(" MeshCtrl ListUsers --nameexists \"bob\"");
166 + console.log(" MeshCtrl ListUsers --filter 2fa");
167 console.log("\r\nOptional arguments:\r\n");
168 console.log(" --idexists [id] - Return 1 if id exists, 0 if not.");
169 console.log(" --nameexists [name] - Return id if name exists.");
170 + console.log(" --filter [filter1,...] - Filter user names: 2FA, NO2FA.");
171 console.log(" --json - Show result as JSON.");
172 break;
173 }
@@ -301,6 +303,7 @@ function performConfigOperations(args) {
303 var fs = require('fs');
304 var path = require('path');
305 var configFile = path.join(__dirname, 'config.json');
306 + if (fs.existsSync(configFile) == false) { configFile = path.join('meshcentral-data', 'config.json'); }
307 if (fs.existsSync(configFile) == false) { configFile = path.join(__dirname, 'meshcentral-data', 'config.json'); }
308 if (fs.existsSync(configFile) == false) { configFile = path.join(__dirname, '..', 'meshcentral-data', 'config.json'); }
309 if (fs.existsSync(configFile) == false) { console.log("Unable to find config.json."); return; }
@@ -554,6 +557,18 @@ function serverConnect() {
557 }
558 break;
559 case 'users': { // LISTUSERS
560 + if (args.filter) {
561 + // Filter the list of users
562 + var filters = args.filter.toLowerCase().split(',');
563 + var filteredusers = [];
564 + for (var i in data.users) {
565 + var ok = false;
566 + if ((filters.indexOf('2fa') >= 0) && ((data.users[i].otphkeys != null) || (data.users[i].otpkeys != null) || (data.users[i].otpsecret != null))) { ok = true; }
567 + if ((filters.indexOf('no2fa') >= 0) && ((data.users[i].otphkeys == null) && (data.users[i].otpkeys == null) && (data.users[i].otpsecret == null))) { ok = true; }
568 + if (ok == true) { filteredusers.push(data.users[i]); }
569 + }
570 + data.users = filteredusers;
571 + }
572 if (args.json) {
573 console.log(JSON.stringify(data.users, ' ', 2));
574 } else {
views/default-min.handlebars
+2 -3
@@ -7462,14 +7462,13 @@
7462
7463 if ((x == null) && (Q('p4email').value.length > 0) && (ve == false)) { QE('idx_dlgOkButton', false); return; }
7464 var ok = true;
7465 - if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); }
7465 + if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); } // Username is not email address
7466 if (Q('p4randomPassword').checked == false) { ok &= (Q('p4pass1').value.length > 0 && Q('p4pass1').value == Q('p4pass2').value && checkPasswordRequirements(Q('p4pass1').value, passRequirements)); }
7467 - if (ok && passRequirements) { if (checkPasswordRequirements(Q('p4pass1').value, passRequirements) == false) { ok = false; } }
7467 QE('idx_dlgOkButton', ok);
7468 }
7469
7470 function showCreateNewAccountDialogEx() {
7472 - var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value;
7471 + var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value; // Username is email address
7472 var x = { action: 'adduser', username: username, email: Q('p4email').value, pass: Q('p4pass1').value, resetNextLogin: Q('p4resetNextLogin').checked, randomPassword: Q('p4randomPassword').checked };
7473 if (serverinfo.emailcheck) {
7474 x.emailVerified = Q('p4verifiedEmail').checked;
views/default.handlebars
+2 -3
@@ -8473,14 +8473,13 @@
8473
8474 if ((x == null) && (Q('p4email').value.length > 0) && (ve == false)) { QE('idx_dlgOkButton', false); return; }
8475 var ok = true;
8476 - if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); }
8476 + if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); } // Username is not email address
8477 if (Q('p4randomPassword').checked == false) { ok &= (Q('p4pass1').value.length > 0 && Q('p4pass1').value == Q('p4pass2').value && checkPasswordRequirements(Q('p4pass1').value, passRequirements)); }
8478 - if (ok && passRequirements) { if (checkPasswordRequirements(Q('p4pass1').value, passRequirements) == false) { ok = false; } }
8478 QE('idx_dlgOkButton', ok);
8479 }
8480
8481 function showCreateNewAccountDialogEx() {
8483 - var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value;
8482 + var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value; // Username is email address
8483 var x = { action: 'adduser', username: username, email: Q('p4email').value, pass: Q('p4pass1').value, resetNextLogin: Q('p4resetNextLogin').checked, randomPassword: Q('p4randomPassword').checked };
8484 if (serverinfo.emailcheck) {
8485 x.emailVerified = Q('p4verifiedEmail').checked;
views/translations/default-min_cs.handlebars
+2 -3
@@ -7462,14 +7462,13 @@
7462
7463 if ((x == null) && (Q('p4email').value.length > 0) && (ve == false)) { QE('idx_dlgOkButton', false); return; }
7464 var ok = true;
7465 - if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); }
7465 + if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); } // Username is not email address
7466 if (Q('p4randomPassword').checked == false) { ok &= (Q('p4pass1').value.length > 0 && Q('p4pass1').value == Q('p4pass2').value && checkPasswordRequirements(Q('p4pass1').value, passRequirements)); }
7467 - if (ok && passRequirements) { if (checkPasswordRequirements(Q('p4pass1').value, passRequirements) == false) { ok = false; } }
7467 QE('idx_dlgOkButton', ok);
7468 }
7469
7470 function showCreateNewAccountDialogEx() {
7472 - var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value;
7471 + var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value; // Username is email address
7472 var x = { action: 'adduser', username: username, email: Q('p4email').value, pass: Q('p4pass1').value, resetNextLogin: Q('p4resetNextLogin').checked, randomPassword: Q('p4randomPassword').checked };
7473 if (serverinfo.emailcheck) {
7474 x.emailVerified = Q('p4verifiedEmail').checked;
views/translations/default-min_fr.handlebars
+2 -3
@@ -7462,14 +7462,13 @@
7462
7463 if ((x == null) && (Q('p4email').value.length > 0) && (ve == false)) { QE('idx_dlgOkButton', false); return; }
7464 var ok = true;
7465 - if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); }
7465 + if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); } // Username is not email address
7466 if (Q('p4randomPassword').checked == false) { ok &= (Q('p4pass1').value.length > 0 && Q('p4pass1').value == Q('p4pass2').value && checkPasswordRequirements(Q('p4pass1').value, passRequirements)); }
7467 - if (ok && passRequirements) { if (checkPasswordRequirements(Q('p4pass1').value, passRequirements) == false) { ok = false; } }
7467 QE('idx_dlgOkButton', ok);
7468 }
7469
7470 function showCreateNewAccountDialogEx() {
7472 - var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value;
7471 + var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value; // Username is email address
7472 var x = { action: 'adduser', username: username, email: Q('p4email').value, pass: Q('p4pass1').value, resetNextLogin: Q('p4resetNextLogin').checked, randomPassword: Q('p4randomPassword').checked };
7473 if (serverinfo.emailcheck) {
7474 x.emailVerified = Q('p4verifiedEmail').checked;
views/translations/default-min_ja.handlebars
+2 -3
@@ -7462,14 +7462,13 @@
7462
7463 if ((x == null) && (Q('p4email').value.length > 0) && (ve == false)) { QE('idx_dlgOkButton', false); return; }
7464 var ok = true;
7465 - if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); }
7465 + if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); } // Username is not email address
7466 if (Q('p4randomPassword').checked == false) { ok &= (Q('p4pass1').value.length > 0 && Q('p4pass1').value == Q('p4pass2').value && checkPasswordRequirements(Q('p4pass1').value, passRequirements)); }
7467 - if (ok && passRequirements) { if (checkPasswordRequirements(Q('p4pass1').value, passRequirements) == false) { ok = false; } }
7467 QE('idx_dlgOkButton', ok);
7468 }
7469
7470 function showCreateNewAccountDialogEx() {
7472 - var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value;
7471 + var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value; // Username is email address
7472 var x = { action: 'adduser', username: username, email: Q('p4email').value, pass: Q('p4pass1').value, resetNextLogin: Q('p4resetNextLogin').checked, randomPassword: Q('p4randomPassword').checked };
7473 if (serverinfo.emailcheck) {
7474 x.emailVerified = Q('p4verifiedEmail').checked;
views/translations/default-min_pt.handlebars
+2 -3
@@ -7462,14 +7462,13 @@
7462
7463 if ((x == null) && (Q('p4email').value.length > 0) && (ve == false)) { QE('idx_dlgOkButton', false); return; }
7464 var ok = true;
7465 - if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); }
7465 + if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); } // Username is not email address
7466 if (Q('p4randomPassword').checked == false) { ok &= (Q('p4pass1').value.length > 0 && Q('p4pass1').value == Q('p4pass2').value && checkPasswordRequirements(Q('p4pass1').value, passRequirements)); }
7467 - if (ok && passRequirements) { if (checkPasswordRequirements(Q('p4pass1').value, passRequirements) == false) { ok = false; } }
7467 QE('idx_dlgOkButton', ok);
7468 }
7469
7470 function showCreateNewAccountDialogEx() {
7472 - var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value;
7471 + var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value; // Username is email address
7472 var x = { action: 'adduser', username: username, email: Q('p4email').value, pass: Q('p4pass1').value, resetNextLogin: Q('p4resetNextLogin').checked, randomPassword: Q('p4randomPassword').checked };
7473 if (serverinfo.emailcheck) {
7474 x.emailVerified = Q('p4verifiedEmail').checked;
views/translations/default_cs.handlebars
+2 -3
@@ -8471,14 +8471,13 @@
8471
8472 if ((x == null) && (Q('p4email').value.length > 0) && (ve == false)) { QE('idx_dlgOkButton', false); return; }
8473 var ok = true;
8474 - if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); }
8474 + if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); } // Username is not email address
8475 if (Q('p4randomPassword').checked == false) { ok &= (Q('p4pass1').value.length > 0 && Q('p4pass1').value == Q('p4pass2').value && checkPasswordRequirements(Q('p4pass1').value, passRequirements)); }
8476 - if (ok && passRequirements) { if (checkPasswordRequirements(Q('p4pass1').value, passRequirements) == false) { ok = false; } }
8476 QE('idx_dlgOkButton', ok);
8477 }
8478
8479 function showCreateNewAccountDialogEx() {
8481 - var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value;
8480 + var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value; // Username is email address
8481 var x = { action: 'adduser', username: username, email: Q('p4email').value, pass: Q('p4pass1').value, resetNextLogin: Q('p4resetNextLogin').checked, randomPassword: Q('p4randomPassword').checked };
8482 if (serverinfo.emailcheck) {
8483 x.emailVerified = Q('p4verifiedEmail').checked;
views/translations/default_fr.handlebars
+2 -3
@@ -8471,14 +8471,13 @@
8471
8472 if ((x == null) && (Q('p4email').value.length > 0) && (ve == false)) { QE('idx_dlgOkButton', false); return; }
8473 var ok = true;
8474 - if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); }
8474 + if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); } // Username is not email address
8475 if (Q('p4randomPassword').checked == false) { ok &= (Q('p4pass1').value.length > 0 && Q('p4pass1').value == Q('p4pass2').value && checkPasswordRequirements(Q('p4pass1').value, passRequirements)); }
8476 - if (ok && passRequirements) { if (checkPasswordRequirements(Q('p4pass1').value, passRequirements) == false) { ok = false; } }
8476 QE('idx_dlgOkButton', ok);
8477 }
8478
8479 function showCreateNewAccountDialogEx() {
8481 - var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value;
8480 + var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value; // Username is email address
8481 var x = { action: 'adduser', username: username, email: Q('p4email').value, pass: Q('p4pass1').value, resetNextLogin: Q('p4resetNextLogin').checked, randomPassword: Q('p4randomPassword').checked };
8482 if (serverinfo.emailcheck) {
8483 x.emailVerified = Q('p4verifiedEmail').checked;
views/translations/default_ja.handlebars
+2 -3
@@ -8471,14 +8471,13 @@
8471
8472 if ((x == null) && (Q('p4email').value.length > 0) && (ve == false)) { QE('idx_dlgOkButton', false); return; }
8473 var ok = true;
8474 - if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); }
8474 + if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); } // Username is not email address
8475 if (Q('p4randomPassword').checked == false) { ok &= (Q('p4pass1').value.length > 0 && Q('p4pass1').value == Q('p4pass2').value && checkPasswordRequirements(Q('p4pass1').value, passRequirements)); }
8476 - if (ok && passRequirements) { if (checkPasswordRequirements(Q('p4pass1').value, passRequirements) == false) { ok = false; } }
8476 QE('idx_dlgOkButton', ok);
8477 }
8478
8479 function showCreateNewAccountDialogEx() {
8481 - var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value;
8480 + var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value; // Username is email address
8481 var x = { action: 'adduser', username: username, email: Q('p4email').value, pass: Q('p4pass1').value, resetNextLogin: Q('p4resetNextLogin').checked, randomPassword: Q('p4randomPassword').checked };
8482 if (serverinfo.emailcheck) {
8483 x.emailVerified = Q('p4verifiedEmail').checked;
views/translations/default_pt.handlebars
+2 -3
@@ -8471,14 +8471,13 @@
8471
8472 if ((x == null) && (Q('p4email').value.length > 0) && (ve == false)) { QE('idx_dlgOkButton', false); return; }
8473 var ok = true;
8474 - if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); }
8474 + if ((features & 0x200000) == 0) { ok &= (!Q('p4name') || ((Q('p4name').value.length > 0) && (Q('p4name').value.indexOf(' ') == -1))); } // Username is not email address
8475 if (Q('p4randomPassword').checked == false) { ok &= (Q('p4pass1').value.length > 0 && Q('p4pass1').value == Q('p4pass2').value && checkPasswordRequirements(Q('p4pass1').value, passRequirements)); }
8476 - if (ok && passRequirements) { if (checkPasswordRequirements(Q('p4pass1').value, passRequirements) == false) { ok = false; } }
8476 QE('idx_dlgOkButton', ok);
8477 }
8478
8479 function showCreateNewAccountDialogEx() {
8481 - var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value;
8480 + var username = ((features & 0x200000) == 0) ? Q('p4name').value : Q('p4email').value; // Username is email address
8481 var x = { action: 'adduser', username: username, email: Q('p4email').value, pass: Q('p4pass1').value, resetNextLogin: Q('p4resetNextLogin').checked, randomPassword: Q('p4randomPassword').checked };
8482 if (serverinfo.emailcheck) {
8483 x.emailVerified = Q('p4verifiedEmail').checked;
webserver.js
+10 -1
@@ -1470,7 +1470,16 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
1470 // Figure out the minimal password requirement
1471 var passRequirements = null;
1472 if (domain.passwordrequirements != null) {
1473 - if (domain.passrequirementstr == null) { domain.passwordrequirementsstr = encodeURIComponent(JSON.stringify(domain.passwordrequirements)); }
1473 + if (domain.passrequirementstr == null) {
1474 + var passRequirements = {};
1475 + if (typeof domain.passwordrequirements.min == 'number') { passRequirements.min = domain.passwordrequirements.min; }
1476 + if (typeof domain.passwordrequirements.max == 'number') { passRequirements.max = domain.passwordrequirements.max; }
1477 + if (typeof domain.passwordrequirements.upper == 'number') { passRequirements.upper = domain.passwordrequirements.upper; }
1478 + if (typeof domain.passwordrequirements.lower == 'number') { passRequirements.lower = domain.passwordrequirements.lower; }
1479 + if (typeof domain.passwordrequirements.numeric == 'number') { passRequirements.numeric = domain.passwordrequirements.numeric; }
1480 + if (typeof domain.passwordrequirements.nonalpha == 'number') { passRequirements.nonalpha = domain.passwordrequirements.nonalpha; }
1481 + domain.passwordrequirementsstr = encodeURIComponent(JSON.stringify(passRequirements));
1482 + }
1483 passRequirements = domain.passwordrequirementsstr;
1484 }
1485