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