Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 21 additions & 12 deletions apps/meteor/server/methods/addAllUserToRoom.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Message } from '@rocket.chat/core-services';
import type { IRoom } from '@rocket.chat/core-typings';
import type { IRoom, IUser } from '@rocket.chat/core-typings';
import type { ServerMethods } from '@rocket.chat/ddp-client';
import { Subscriptions, Rooms, Users } from '@rocket.chat/models';
import { check } from 'meteor/check';
Expand Down Expand Up @@ -36,30 +36,39 @@ export const addAllUserToRoomFn = async (userId: string, rid: IRoom['_id'], acti
if (activeUsersOnly === true) {
userFilter.active = true;
}

const users = await Users.find(userFilter).toArray();
if (users.length > settings.get<number>('API_User_Limit')) {
throw new Meteor.Error('error-user-limit-exceeded', 'User Limit Exceeded', {
const room = await Rooms.findOneById(rid);
if (!room) {
throw new Meteor.Error('error-invalid-room', 'Invalid room', {
method: 'addAllToRoom',
});
}

const room = await Rooms.findOneById(rid);
if (!room) {
throw new Meteor.Error('error-invalid-room', 'Invalid room', {
const count = await Users.countDocuments(userFilter);
if (count > settings.get<number>('API_User_Limit')) {
throw new Meteor.Error('error-user-limit-exceeded', 'User Limit Exceeded', {
method: 'addAllToRoom',
});
}
const usersCursor = Users.find(userFilter).batchSize(100)

const collectedUsers: IUser[] = [];
const usernames: string[] = [];
for await(const user of usersCursor){
collectedUsers.push(user);
if(user.username){
usernames.push(user.username)
}
}
await beforeAddUserToRoom(
users.map((u) => u.username!),
room,
usernames,
room
);

const now = new Date();
for await (const user of users) {
for (const user of collectedUsers) {
const subscription = await Subscriptions.findOneByRoomIdAndUserId(rid, user._id);
if (subscription != null) {
if (subscription) {
continue;
}
await callbacks.run('beforeJoinRoom', user, room);
Expand Down