Skip to content

Commit 65ca437

Browse files
committed
validate creator for federated DMs
1 parent 03e628f commit 65ca437

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

apps/meteor/app/lib/server/functions/createDirectRoom.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -155,19 +155,22 @@ export async function createDirectRoom(
155155
{ projection: { 'username': 1, 'settings.preferences': 1 } },
156156
).toArray();
157157

158-
const creatorUser = options?.creator ? roomMembers.find((member) => member._id === options?.creator) : undefined;
159-
160-
// TODO wtf creatorUser can be undefined here?
158+
const creatorUser = roomMembers.find((member) => member._id === options?.creator);
159+
if (roomExtraData.federated && !creatorUser) {
160+
throw new Meteor.Error('error-creator-not-in-room', 'The creator user must be part of the direct room');
161+
}
161162

162163
for await (const member of membersWithPreferences) {
163164
const otherMembers = sortedMembers.filter(({ _id }) => _id !== member._id);
164165

165166
const subscriptionStatus: Partial<ISubscription> =
166-
roomExtraData.federated && options?.creator !== member._id
167+
roomExtraData.federated && options.creator !== member._id && creatorUser
167168
? {
168169
status: 'INVITED',
169170
inviter: {
170-
_id: creatorUser?._id,
171+
_id: creatorUser._id,
172+
username: creatorUser.username,
173+
name: creatorUser.name,
171174
},
172175
open: true,
173176
unread: 1,

apps/meteor/app/lib/server/functions/createRoom.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { isRoomNativeFederated } from '@rocket.chat/core-typings';
77
import { Rooms, Subscriptions, Users } from '@rocket.chat/models';
88
import { Meteor } from 'meteor/meteor';
99

10-
import { performAddUserToRoom } from './addUserToRoom';
1110
import { createDirectRoom } from './createDirectRoom';
1211
import { callbacks } from '../../../../lib/callbacks';
1312
import { beforeAddUserToRoom } from '../../../../lib/callbacks/beforeAddUserToRoom';
@@ -203,7 +202,7 @@ export const createRoom = async <T extends RoomType>(
203202
}
204203

205204
if (type === 'd') {
206-
return createDirectRoom(members as IUser[], extraData, { ...options, creator: options?.creator || owner?.username });
205+
return createDirectRoom(members as IUser[], extraData, { ...options, creator: options?.creator || owner?._id });
207206
}
208207

209208
if (!onlyUsernames(members)) {

0 commit comments

Comments
 (0)