Skip to content

Commit 6ee1c1b

Browse files
committed
feat(callbacks): add beforeAddUsersToRoom callback for batch user additions to rooms
1 parent f3e14c3 commit 6ee1c1b

File tree

3 files changed

+12
-1
lines changed

3 files changed

+12
-1
lines changed

apps/meteor/app/lib/server/methods/addUsersToRoom.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { Subscriptions, Users, Rooms } from '@rocket.chat/models';
55
import { Match } from 'meteor/check';
66
import { Meteor } from 'meteor/meteor';
77

8+
import { beforeAddUsersToRoom } from '../../../../lib/callbacks/beforeAddUserToRoom';
89
import { i18n } from '../../../../server/lib/i18n';
910
import { hasPermissionAsync } from '../../../authorization/server/functions/hasPermission';
1011
import { addUserToRoom } from '../functions/addUserToRoom';
@@ -77,6 +78,8 @@ export const addUsersToRoomMethod = async (userId: string, data: { rid: string;
7778
});
7879
}
7980

81+
await beforeAddUsersToRoom.run({ usernames: data.users, inviter: user }, room);
82+
8083
await Promise.all(
8184
data.users.map(async (username) => {
8285
const newUser = await Users.findOneByUsernameIgnoringCase(username);

apps/meteor/ee/server/hooks/federation/index.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Rooms } from '@rocket.chat/models';
55
import { callbacks } from '../../../../lib/callbacks';
66
import { afterLeaveRoomCallback } from '../../../../lib/callbacks/afterLeaveRoomCallback';
77
import { afterRemoveFromRoomCallback } from '../../../../lib/callbacks/afterRemoveFromRoomCallback';
8-
import { beforeAddUserToRoom } from '../../../../lib/callbacks/beforeAddUserToRoom';
8+
import { beforeAddUsersToRoom, beforeAddUserToRoom } from '../../../../lib/callbacks/beforeAddUserToRoom';
99
import { beforeChangeRoomRole } from '../../../../lib/callbacks/beforeChangeRoomRole';
1010
import { FederationActions } from '../../../../server/services/room/hooks/BeforeFederationActions';
1111

@@ -70,6 +70,12 @@ callbacks.add(
7070
'native-federation-after-delete-message',
7171
);
7272

73+
beforeAddUsersToRoom.add(async ({ usernames }, room) => {
74+
if (FederationActions.shouldPerformFederationAction(room)) {
75+
await FederationMatrix.ensureFederatedUsersExistLocally(usernames);
76+
}
77+
});
78+
7379
beforeAddUserToRoom.add(
7480
async ({ user, inviter }, room) => {
7581
if (!user.username || !inviter) {

apps/meteor/lib/callbacks/beforeAddUserToRoom.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@ import type { IUser, IRoom } from '@rocket.chat/core-typings';
33
import { Callbacks } from './callbacksBase';
44

55
export const beforeAddUserToRoom = Callbacks.create<(args: { user: IUser; inviter?: IUser }, room: IRoom) => void>('beforeAddUserToRoom');
6+
export const beforeAddUsersToRoom =
7+
Callbacks.create<(args: { usernames: string[]; inviter?: IUser }, room: IRoom) => void>('beforeAddUsersToRoom');

0 commit comments

Comments
 (0)