Factorize removeuserfromusergroup
Noah Zalev committed
Dec 7, 2021 at 22:00 UTC
92c53d98541d1749a0ca69c04490113494beef33
1 file changed
+69
-70
meshuser.js
+69
-70
@@ -1771,76 +1771,6 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
1771
parent.parent.DispatchEvent(['*', group._id, user._id], obj, event);
1772
}
1773
}
1774
- break;
1775
- }
1776
- case 'removeuserfromusergroup':
1777
- {
1778
- var err = null;
1779
- try {
1780
- if ((user.siteadmin & SITERIGHT_USERGROUPS) == 0) { err = 'Permission denied'; }
1781
- else if (common.validateString(command.ugrpid, 1, 1024) == false) { err = 'Invalid groupid'; }
1782
- else if (common.validateString(command.userid, 1, 256) == false) { err = 'Invalid userid'; }
1783
- else {
1784
- var ugroupidsplit = command.ugrpid.split('/');
1785
- if ((ugroupidsplit.length != 3) || (ugroupidsplit[0] != 'ugrp') || ((obj.crossDomain !== true) && (ugroupidsplit[1] != domain.id))) { err = 'Invalid groupid'; }
1786
- }
1787
- } catch (ex) { err = 'Validation exception: ' + ex; }
1788
-
1789
- // Fetch the domain
1790
- var removeUserDomain = domain;
1791
- if (obj.crossDomain !== true) { removeUserDomain = parent.parent.config.domains[ugroupidsplit[1]]; }
1792
- if (removeUserDomain == null) { err = 'Invalid domain'; }
1793
-
1794
- // Handle any errors
1795
- if (err != null) {
1796
- if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'removeuserfromusergroup', responseid: command.responseid, result: err })); } catch (ex) { } }
1797
- break;
1798
- }
1799
-
1800
- // Check if the user exists
1801
- if (command.userid.startsWith('user/') == false) {
1802
- if (parent.users['user/' + removeUserDomain.id + '/' + command.userid.toLowerCase()] != null) { command.userid = 'user/' + removeUserDomain.id + '/' + command.userid.toLowerCase(); }
1803
- else if (parent.users['user/' + removeUserDomain.id + '/' + command.userid] != null) { command.userid = 'user/' + removeUserDomain.id + '/' + command.userid; }
1804
- }
1805
-
1806
- var chguser = parent.users[command.userid];
1807
- if (chguser != null) {
1808
- var change = false;
1809
- if ((chguser.links != null) && (chguser.links[command.ugrpid] != null)) {
1810
- change = true;
1811
- delete chguser.links[command.ugrpid];
1812
-
1813
- // Notify user change
1814
- var targets = ['*', 'server-users', user._id, chguser._id];
1815
- 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: removeUserDomain.id };
1816
- if (db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to change the user. Another event will come.
1817
- parent.parent.DispatchEvent(targets, obj, event);
1818
-
1819
- db.SetUser(chguser);
1820
- parent.parent.DispatchEvent([chguser._id], obj, 'resubscribe');
1821
- }
1822
-
1823
- // Get the user group
1824
- var group = parent.userGroups[command.ugrpid];
1825
- if (group != null) {
1826
- // Remove the user from the group
1827
- if ((group.links != null) && (group.links[command.userid] != null)) {
1828
- change = true;
1829
- delete group.links[command.userid];
1830
- db.Set(group);
1831
-
1832
- // Notify user group change
1833
- if (change) {
1834
- 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: 72, msgArgs: [chguser.name, group.name], msg: 'Removed user ' + chguser.name + ' from user group ' + group.name, domain: removeUserDomain.id };
1835
- 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.
1836
- parent.parent.DispatchEvent(['*', group._id, user._id, chguser._id], obj, event);
1837
- }
1838
- }
1839
- }
1840
- }
1841
-
1842
- if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'removeuserfromusergroup', responseid: command.responseid, result: 'ok', added: addedCount, failed: failCount })); } catch (ex) { } }
1843
-
1774
break;
1775
}
1776
case 'changemeshnotify':
@@ -5554,6 +5484,7 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
5484
'pong': serverCommandPong,
5485
'powertimeline': serverCommandPowerTimeline,
5486
'print': serverCommandPrint,
5487
+ 'removeuserfromusergroup': serverCommandRemoveUserFromUserGroup,
5488
'serverclearerrorlog': serverCommandServerClearErrorLog,
5489
'serverconsole': serverCommandServerConsole,
5490
'servererrors': serverCommandServerErrors,
@@ -6053,6 +5984,74 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
5984
5985
function serverCommandPrint(command) { console.log(command.value); }
5986
5987
+ function serverCommandRemoveUserFromUserGroup(command) {
5988
+ var err = null;
5989
+ try {
5990
+ if ((user.siteadmin & SITERIGHT_USERGROUPS) == 0) { err = 'Permission denied'; }
5991
+ else if (common.validateString(command.ugrpid, 1, 1024) == false) { err = 'Invalid groupid'; }
5992
+ else if (common.validateString(command.userid, 1, 256) == false) { err = 'Invalid userid'; }
5993
+ else {
5994
+ var ugroupidsplit = command.ugrpid.split('/');
5995
+ if ((ugroupidsplit.length != 3) || (ugroupidsplit[0] != 'ugrp') || ((obj.crossDomain !== true) && (ugroupidsplit[1] != domain.id))) { err = 'Invalid groupid'; }
5996
+ }
5997
+ } catch (ex) { err = 'Validation exception: ' + ex; }
5998
+
5999
+ // Fetch the domain
6000
+ var removeUserDomain = domain;
6001
+ if (obj.crossDomain !== true) { removeUserDomain = parent.parent.config.domains[ugroupidsplit[1]]; }
6002
+ if (removeUserDomain == null) { err = 'Invalid domain'; }
6003
+
6004
+ // Handle any errors
6005
+ if (err != null) {
6006
+ if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'removeuserfromusergroup', responseid: command.responseid, result: err })); } catch (ex) { } }
6007
+ return;
6008
+ }
6009
+
6010
+ // Check if the user exists
6011
+ if (command.userid.startsWith('user/') == false) {
6012
+ if (parent.users['user/' + removeUserDomain.id + '/' + command.userid.toLowerCase()] != null) { command.userid = 'user/' + removeUserDomain.id + '/' + command.userid.toLowerCase(); }
6013
+ else if (parent.users['user/' + removeUserDomain.id + '/' + command.userid] != null) { command.userid = 'user/' + removeUserDomain.id + '/' + command.userid; }
6014
+ }
6015
+
6016
+ var chguser = parent.users[command.userid];
6017
+ if (chguser != null) {
6018
+ var change = false;
6019
+ if ((chguser.links != null) && (chguser.links[command.ugrpid] != null)) {
6020
+ change = true;
6021
+ delete chguser.links[command.ugrpid];
6022
+
6023
+ // Notify user change
6024
+ var targets = ['*', 'server-users', user._id, chguser._id];
6025
+ 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: removeUserDomain.id };
6026
+ if (db.changeStream) { event.noact = 1; } // If DB change stream is active, don't use this event to change the user. Another event will come.
6027
+ parent.parent.DispatchEvent(targets, obj, event);
6028
+
6029
+ db.SetUser(chguser);
6030
+ parent.parent.DispatchEvent([chguser._id], obj, 'resubscribe');
6031
+ }
6032
+
6033
+ // Get the user group
6034
+ var group = parent.userGroups[command.ugrpid];
6035
+ if (group != null) {
6036
+ // Remove the user from the group
6037
+ if ((group.links != null) && (group.links[command.userid] != null)) {
6038
+ change = true;
6039
+ delete group.links[command.userid];
6040
+ db.Set(group);
6041
+
6042
+ // Notify user group change
6043
+ if (change) {
6044
+ 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: 72, msgArgs: [chguser.name, group.name], msg: 'Removed user ' + chguser.name + ' from user group ' + group.name, domain: removeUserDomain.id };
6045
+ 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.
6046
+ parent.parent.DispatchEvent(['*', group._id, user._id, chguser._id], obj, event);
6047
+ }
6048
+ }
6049
+ }
6050
+ }
6051
+
6052
+ if (command.responseid != null) { try { ws.send(JSON.stringify({ action: 'removeuserfromusergroup', responseid: command.responseid, result: 'ok' })); } catch (ex) { } }
6053
+ }
6054
+
6055
function serverCommandServerClearErrorLog(command) {
6056
// Clear the server error log if user has site update permissions
6057
if (userHasSiteUpdate()) { fs.unlink(parent.parent.getConfigFilePath('mesherrors.txt'), function (err) { }); }