Fix for MongoDB change stream exception (#4429)

Ylian Saint-Hilaire committed Aug 22, 2022 at 10:42 UTC 0ce946bd900a792b24bae8cd4893a23c4b1cfc0c
1 file changed +25 -7
db.js
+25 -7
@@ -3236,8 +3236,14 @@ module.exports.CreateDB = function (parent, func) {
3236
3237 // Update the mesh object in memory
3238 const mmesh = parent.webserver.meshes[mesh._id];
3239 - for (var i in mesh) { mmesh[i] = mesh[i]; }
3240 - for (var i in mmesh) { if (mesh[i] == null) { delete mmesh[i]; } }
3239 + if (mmesh != null) {
3240 + // Update an existing device group
3241 + for (var i in mesh) { mmesh[i] = mesh[i]; }
3242 + for (var i in mmesh) { if (mesh[i] == null) { delete mmesh[i]; } }
3243 + } else {
3244 + // Device group not present, create it.
3245 + parent.webserver.meshes[mesh._id] = mesh;
3246 + }
3247
3248 // Send the mesh update
3249 if (mesh.deleted) { mesh.action = 'deletemesh'; } else { mesh.action = (added ? 'createmesh' : 'meshchange'); }
@@ -3253,11 +3259,17 @@ module.exports.CreateDB = function (parent, func) {
3259 if (parent.webserver == null) return;
3260 common.unEscapeLinksFieldName(userChange.fullDocument);
3261 const user = performTypedRecordDecrypt([userChange.fullDocument])[0];
3256 -
3262 +
3263 // Update the user object in memory
3264 const muser = parent.webserver.users[user._id];
3259 - for (var i in user) { muser[i] = user[i]; }
3260 - for (var i in muser) { if (user[i] == null) { delete muser[i]; } }
3265 + if (muser != null) {
3266 + // Update an existing user
3267 + for (var i in user) { muser[i] = user[i]; }
3268 + for (var i in muser) { if (user[i] == null) { delete muser[i]; } }
3269 + } else {
3270 + // User not present, create it.
3271 + parent.webserver.users[user._id] = user;
3272 + }
3273
3274 // Send the user update
3275 var targets = ['*', 'server-users', user._id];
@@ -3273,8 +3285,14 @@ module.exports.CreateDB = function (parent, func) {
3285
3286 // Update the user group object in memory
3287 const uusergroup = parent.webserver.userGroups[usergroup._id];
3276 - for (var i in usergroup) { uusergroup[i] = usergroup[i]; }
3277 - for (var i in uusergroup) { if (usergroup[i] == null) { delete uusergroup[i]; } }
3288 + if (uusergroup != null) {
3289 + // Update an existing user group
3290 + for (var i in usergroup) { uusergroup[i] = usergroup[i]; }
3291 + for (var i in uusergroup) { if (usergroup[i] == null) { delete uusergroup[i]; } }
3292 + } else {
3293 + // Usergroup not present, create it.
3294 + parent.webserver.userGroups[usergroup._id] = usergroup;
3295 + }
3296
3297 // Send the user group update
3298 usergroup.action = (added ? 'createusergroup' : 'usergroupchange');