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]; }