Skip to content

Commit a3a71cd

Browse files
authored
fix: receive invite_room_state as invite param (#286)
1 parent 6614719 commit a3a71cd

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

packages/federation-sdk/src/services/invite.service.ts

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -150,26 +150,24 @@ export class InviteService {
150150
}
151151

152152
private async shouldProcessInvite(
153-
event: PduForType<'m.room.member'>,
153+
strippedStateEvents: PduForType<
154+
| 'm.room.create'
155+
| 'm.room.name'
156+
| 'm.room.avatar'
157+
| 'm.room.topic'
158+
| 'm.room.join_rules'
159+
| 'm.room.canonical_alias'
160+
| 'm.room.encryption'
161+
>[],
154162
): Promise<void> {
155-
const isRoomNonPrivate = event.unsigned.invite_room_state.some(
156-
(
157-
stateEvent: PersistentEventBase<
158-
RoomVersion,
159-
'm.room.join_rules'
160-
>['event'],
161-
) =>
163+
const isRoomNonPrivate = strippedStateEvents.some(
164+
(stateEvent) =>
162165
stateEvent.type === 'm.room.join_rules' &&
163166
stateEvent.content.join_rule === 'public',
164167
);
165168

166-
const isRoomEncrypted = event.unsigned.invite_room_state.some(
167-
(
168-
stateEvent: PersistentEventBase<
169-
RoomVersion,
170-
'm.room.encryption'
171-
>['event'],
172-
) => stateEvent.type === 'm.room.encryption',
169+
const isRoomEncrypted = strippedStateEvents.some(
170+
(stateEvent) => stateEvent.type === 'm.room.encryption',
173171
);
174172

175173
const { allowedEncryptedRooms, allowedNonPrivateRooms } =
@@ -191,9 +189,18 @@ export class InviteService {
191189
eventId: EventID,
192190
roomVersion: RoomVersion,
193191
authenticatedServer: string,
192+
strippedStateEvents: PduForType<
193+
| 'm.room.create'
194+
| 'm.room.name'
195+
| 'm.room.avatar'
196+
| 'm.room.topic'
197+
| 'm.room.join_rules'
198+
| 'm.room.canonical_alias'
199+
| 'm.room.encryption'
200+
>[],
194201
) {
195202
// SPEC: when a user invites another user on a different homeserver, a request to that homeserver to have the event signed and verified must be made
196-
await this.shouldProcessInvite(event);
203+
await this.shouldProcessInvite(strippedStateEvents);
197204

198205
const residentServer = roomId.split(':').pop();
199206
if (!residentServer) {

packages/homeserver/src/controllers/federation/invite.controller.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export const invitePlugin = (app: Elysia) => {
3232
eventId as EventID,
3333
body.room_version,
3434
authenticatedServer,
35+
body.invite_room_state,
3536
);
3637
} catch (error) {
3738
if (error instanceof NotAllowedError) {

0 commit comments

Comments
 (0)