Fix bug in addusertousergroup

Fix obscure bug when the last user added in list of addusertousergroup was an unknown user causing the server to crash. Also updated the group update message of same to display all users added, rather than only the last one in the list.

Josiah Baldwin committed Nov 11, 2021 at 15:47 UTC c50b3c0d262c0d91a510c6c58607a562461a3eeb
1 file changed +3 -2
meshuser.js
+3 -2
@@ -2006,7 +2006,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
2006 if (group != null) {
2007 if (group.links == null) { group.links = {}; }
2008
2009 - var unknownUsers = [], addedCount = 0, failCount = 0;
2009 + var unknownUsers = [], addedCount = 0, failCount = 0, knownUsers;
2010 for (var i in command.usernames) {
2011 // Check if the user exists
2012 var chguserid = 'user/' + addUserDomain.id + '/' + command.usernames[i].toLowerCase();
@@ -2019,6 +2019,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
2019 db.SetUser(chguser);
2020 parent.parent.DispatchEvent([chguser._id], obj, 'resubscribe');
2021
2022 + knownUsers.push(chguser)
2023 // Notify user change
2024 var targets = ['*', 'server-users', user._id, chguser._id];
2025 var event = { etype: 'user', userid: user._id, username: user.name, account: parent.CloneSafeUser(chguser), action: 'accountchange', msgid: 67, msgArgs: [chguser.name], msg: 'User group membership changed: ' + chguser.name, domain: addUserDomain.id };
@@ -2039,7 +2040,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
2040 db.Set(group);
2041
2042 // Notify user group change
2042 - var event = { etype: 'ugrp', userid: user._id, username: user.name, ugrpid: group._id, name: group.name, desc: group.desc, action: 'usergroupchange', links: group.links, msgid: 71, msgArgs: [chguser.name, group.name], msg: 'Added user ' + chguser.name + ' to user group ' + group.name, addUserDomain: domain.id };
2043 + var event = { etype: 'ugrp', userid: user._id, username: user.name, ugrpid: group._id, name: group.name, desc: group.desc, action: 'usergroupchange', links: group.links, msgid: 71, msgArgs: [knownUsers.map((u)=>u.name), group.name], msg: 'Added user(s) ' + knownUsers.map((u)=>u.name) + ' to user group ' + group.name, addUserDomain: domain.id };
2044 if (db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to change the user group. Another event will come.
2045 parent.parent.DispatchEvent(['*', group._id, user._id, chguserid], obj, event);
2046 }