Server exceptions fixes.

Ylian Saint-Hilaire committed Jan 24, 2021 at 16:09 UTC 6f9f2097a982fd517b46c634595e1b04821d9422
4 files changed +7 -5
meshagent.js
+2 -2
@@ -157,7 +157,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
157
158 // We need to check if the core is current. Figure out what core we need.
159 var corename = null;
160 - if (parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId] != null) {
160 + if ((obj.agentInfo != null) && (parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId] != null)) {
161 if ((obj.agentCoreCheck == 1001) || (obj.agentCoreUpdate == true)) {
162 // If the user asked, use the recovery core.
163 corename = parent.parent.meshAgentsArchitectureNumbers[obj.agentInfo.agentId].rcore;
@@ -1659,7 +1659,7 @@ module.exports.CreateMeshAgent = function (parent, db, ws, req, args, domain) {
1659
1660 // Update the mesh agent tab in the database
1661 function ChangeAgentTag(tag) {
1662 - if (obj.agentInfo.capabilities & 0x40) return;
1662 + if ((obj.agentInfo == null) || (obj.agentInfo.capabilities & 0x40)) return;
1663 if ((tag != null) && (tag.length == 0)) { tag = null; }
1664
1665 // If the device is pending a change, hold.
meshcentral.js
+1
@@ -2621,6 +2621,7 @@ function CreateMeshCentralServer(config, args) {
2621
2622 // Decode a cookie back into an object using a key using AES256-GCM or AES128-CBC/HMAC-SHA384. Return null if it's not a valid cookie. (key must be 32 bytes or more)
2623 obj.decodeCookie = function (cookie, key, timeout) {
2624 + if ((cookie == null) || (key == null)) return null;
2625 var r = obj.decodeCookieAESGCM(cookie, key, timeout);
2626 if (r == null) { r = obj.decodeCookieAESSHA(cookie, key, timeout); }
2627 if ((r == null) && (obj.args.cookieencoding == null) && (cookie.length != 64) && ((cookie == cookie.toLowerCase()) || (cookie == cookie.toUpperCase()))) {
mpsserver.js
+1 -1
@@ -615,7 +615,7 @@ module.exports.CreateMpsServer = function (parent, db, args, certificates) {
615 return;
616 } else {
617 // Node is not in the database, add it. Credentials will be empty until added by the user.
618 - var device = { type: 'node', mtype: 1, _id: socket.tag.nodeid, meshid: socket.tag.meshid, name: socket.tag.name, icon: (socket.tag.meiState.isBatteryPowered) ? 2 : 1, host: socket.remoteAddr, domain: mesh.domain, intelamt: { user: (typeof socket.tag.meiState.amtuser == 'string') ? socket.tag.meiState.amtuser : '', pass: (typeof socket.tag.meiState.amtpass == 'string') ? socket.tag.meiState.amtpass : '', tls: 0, state: 2 } };
618 + var device = { type: 'node', mtype: 1, _id: socket.tag.nodeid, meshid: socket.tag.meshid, name: socket.tag.name, icon: (socket.tag.meiState && socket.tag.meiState.isBatteryPowered) ? 2 : 1, host: socket.remoteAddr, domain: mesh.domain, intelamt: { user: ((socket.tag.meiState) && (typeof socket.tag.meiState.amtuser == 'string')) ? socket.tag.meiState.amtuser : '', pass: ((socket.tag.meiState) && (typeof socket.tag.meiState.amtpass == 'string')) ? socket.tag.meiState.amtpass : '', tls: 0, state: 2 } };
619 if ((typeof socket.tag.meiState.desc == 'string') && (socket.tag.meiState.desc.length > 0) && (socket.tag.meiState.desc.length < 1024)) { device.desc = socket.tag.meiState.desc; }
620 obj.db.Set(device);
621
webserver.js
+3 -2
@@ -2414,9 +2414,10 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
2414 // Fetch the web state
2415 parent.debug('web', 'handleRootRequestEx: success.');
2416 obj.db.Get('ws' + user._id, function (err, states) {
2417 - var webstate = (states.length == 1) ? obj.filterUserWebState(states[0].state) : '';
2417 + var webstate = '';
2418 + if ((err == null) && (states != null) && (Array.isArray(states)) && (states.length == 1) && (states[0].state != null)) { webstate = obj.filterUserWebState(states[0].state); }
2419 if ((webstate == '') && (typeof domain.defaultuserwebstate == 'object')) { webstate = JSON.stringify(domain.defaultuserwebstate); } // User has no web state, use defaults.
2419 - if (typeof domain.forceduserwebstate == 'object') { // Forces initial user web state is present, use it.
2420 + if (typeof domain.forceduserwebstate == 'object') { // Forces initial user web state if present, use it.
2421 var webstate2 = {};
2422 try { if (webstate != '') { webstate2 = JSON.parse(webstate); } } catch (ex) { }
2423 for (var i in domain.forceduserwebstate) { webstate2[i] = domain.forceduserwebstate[i]; }