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');