Added newAccountEmailDomains, more server fixes.

Ylian Saint-Hilaire committed Feb 25, 2019 at 16:07 UTC c7adcebded04458725b282cd4bb242dfc3fca9fe
4 files changed +37 -8
meshagent.js
+3
@@ -37,6 +37,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
37 obj.agentCoreCheck = 0;
38 obj.agentInfo = null;
39 obj.agentUpdate = null;
40 + obj.agentCoreUpdatePending = false;
41 const agentUpdateBlockSize = 65520;
42 obj.remoteaddr = req.ip;
43 if (obj.remoteaddr.startsWith('::ffff:')) { obj.remoteaddr = obj.remoteaddr.substring(7); }
@@ -149,7 +150,9 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
150 //obj.parent.parent.debug(1, 'Updating code ' + corename);
151
152 // Update new core with task limiting so not to flood the server. This is a high priority task.
153 + obj.agentCoreUpdatePending = true;
154 obj.parent.parent.taskLimiter.launch(function (argument, taskid, taskLimiterQueue) {
155 + obj.agentCoreUpdatePending = false;
156 obj.send(obj.common.ShortToStr(10) + obj.common.ShortToStr(0) + argument.hash + argument.core, function () { obj.parent.parent.taskLimiter.completed(taskid); }); // MeshCommand_CoreModule, start core update
157 obj.parent.parent.debug(1, 'Updating code ' + argument.name);
158 agentCoreIsStable();
meshuser.js
+13 -7
@@ -462,7 +462,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
462
463 switch (cmd) {
464 case 'help': {
465 - r = 'Available commands: help, args, resetserver, showconfig, usersessions, tasklimiter, cores.';
465 + r = 'Available commands: help, args, resetserver, showconfig, usersessions, tasklimiter, setmaxtasks, cores.';
466 break;
467 }
468 case 'args': {
@@ -489,15 +489,21 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
489 if (obj.parent.parent.taskLimiter != null) {
490 //var obj = { maxTasks: maxTasks, maxTaskTime: (maxTaskTime * 1000), nextTaskId: 0, currentCount: 0, current: {}, pending: [[], [], []], timer: null };
491 const tl = obj.parent.parent.taskLimiter;
492 - r += 'MaxTasks: ' + tl.maxTasks + '<br />';
493 - r += 'MaxTaskTime: ' + (tl.maxTaskTime / 1000) + ' seconds<br />';
494 - r += 'NextTaskId: ' + tl.nextTaskId + '<br />';
495 - r += 'CurrentCount: ' + tl.currentCount + '<br />';
492 + r += 'MaxTasks: ' + tl.maxTasks + ', NextTaskId: ' + tl.nextTaskId + '<br />';
493 + r += 'MaxTaskTime: ' + (tl.maxTaskTime / 1000) + ' seconds, Timer: ' + (tl.timer != null) + '<br />';
494 var c = [];
495 for (var i in tl.current) { c.push(i); }
498 - r += 'Current: [' + c.join(', ') + ']<br />';
496 + r += 'Current (' + tl.currentCount + '): [' + c.join(', ') + ']<br />';
497 r += 'Pending (High/Med/Low): ' + tl.pending[0].length + ', ' + tl.pending[1].length + ', ' + tl.pending[2].length + '<br />';
500 - r += 'Timer: ' + (tl.timer != null) + '<br />';
498 + }
499 + break;
500 + }
501 + case 'setmaxtasks': {
502 + if ((args["_"].length != 1) || (parseInt(args["_"][0]) < 1) || (parseInt(args["_"][0]) > 1000)) {
503 + r = 'Usage: setmaxtasks [1 to 1000]';
504 + } else {
505 + obj.parent.parent.taskLimiter.maxTasks = parseInt(args["_"][0]);
506 + r = 'MaxTasks set to ' + obj.parent.parent.taskLimiter.maxTasks + '.';
507 }
508 break;
509 }
package.json
+1 -1
@@ -1,6 +1,6 @@
1 {
2 "name": "meshcentral",
3 - "version": "0.2.9-a",
3 + "version": "0.2.9-b",
4 "keywords": [
5 "Remote Management",
6 "Intel AMT",
webserver.js
+20
@@ -516,6 +516,26 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
516
517 if ((domain.newaccounts === 0) || (domain.newaccounts === false)) { res.sendStatus(401); return; }
518
519 + // Check if this request is for an allows email domain
520 + if ((domain.newaccountemaildomains != null) && Array.isArray(domain.newaccountemaildomains)) {
521 + var i = -1;
522 + if (typeof req.body.email == 'string') { i = req.body.email.indexOf('@'); }
523 + if (i == -1) {
524 + req.session.loginmode = 2;
525 + req.session.error = '<b style=color:#8C001A>Unable to create account.</b>';
526 + res.redirect(domain.url);
527 + return;
528 + }
529 + var emailok = false, emaildomain = req.body.email.substring(i + 1).toLowerCase();
530 + for (var i in domain.newaccountemaildomains) { if (emaildomain == domain.newaccountemaildomains[i].toLowerCase()) { emailok = true; } }
531 + if (emailok == false) {
532 + req.session.loginmode = 2;
533 + req.session.error = '<b style=color:#8C001A>Unable to create account.</b>';
534 + res.redirect(domain.url);
535 + return;
536 + }
537 + }
538 +
539 // Check if we exceed the maximum number of user accounts
540 obj.db.isMaxType(domain.limits.maxuseraccounts, 'user', domain.id, function (maxExceed) {
541 if (maxExceed) {