Skip to content

Commit 6c43a10

Browse files
fix: use invite_room_state from payload (#37249)
Co-authored-by: Rodrigo Nascimento <rodrigoknascimento@gmail.com>
1 parent 148485a commit 6c43a10

File tree

4 files changed

+26
-10
lines changed

4 files changed

+26
-10
lines changed

ee/packages/federation-matrix/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"@rocket.chat/core-services": "workspace:^",
3939
"@rocket.chat/core-typings": "workspace:^",
4040
"@rocket.chat/emitter": "^0.31.25",
41-
"@rocket.chat/federation-sdk": "0.1.31",
41+
"@rocket.chat/federation-sdk": "0.1.32",
4242
"@rocket.chat/http-router": "workspace:^",
4343
"@rocket.chat/license": "workspace:^",
4444
"@rocket.chat/models": "workspace:^",

ee/packages/federation-matrix/src/api/_matrix/invite.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import type {
1010
} from '@rocket.chat/federation-sdk';
1111
import { eventIdSchema, roomIdSchema, NotAllowedError } from '@rocket.chat/federation-sdk';
1212
import { Router } from '@rocket.chat/http-router';
13+
import { Logger } from '@rocket.chat/logger';
1314
import { Rooms, Users } from '@rocket.chat/models';
1415
import { ajv } from '@rocket.chat/rest-typings/dist/v1/Ajv';
1516

@@ -323,6 +324,8 @@ export const acceptInvite = async (
323324
export const getMatrixInviteRoutes = (services: HomeserverServices) => {
324325
const { invite, state, room, federationAuth } = services;
325326

327+
const logger = new Logger('matrix-invite');
328+
326329
return new Router('/federation').put(
327330
'/v2/invite/:roomId/:eventId',
328331
{
@@ -337,14 +340,24 @@ export const getMatrixInviteRoutes = (services: HomeserverServices) => {
337340
isAuthenticatedMiddleware(federationAuth),
338341
async (c) => {
339342
const { roomId, eventId } = c.req.param();
340-
const { event, room_version: roomVersion } = await c.req.json();
343+
const { event, room_version: roomVersion, invite_room_state: strippedStateEvents } = await c.req.json();
341344

342345
const userToCheck = event.state_key as string;
343346

344347
if (!userToCheck) {
345348
throw new Error('join event has missing state key, unable to determine user to join');
346349
}
347350

351+
if (!strippedStateEvents?.some((e: any) => e.type === 'm.room.create')) {
352+
return {
353+
body: {
354+
errcode: 'M_MISSING_PARAM',
355+
error: 'Missing invite_room_state: m.room.create event is required',
356+
},
357+
statusCode: 400,
358+
};
359+
}
360+
348361
const [username /* domain */] = userToCheck.split(':');
349362

350363
// TODO: check domain
@@ -362,6 +375,7 @@ export const getMatrixInviteRoutes = (services: HomeserverServices) => {
362375
eventIdSchema.parse(eventId),
363376
roomVersion,
364377
c.get('authenticatedServer'),
378+
strippedStateEvents,
365379
);
366380

367381
setTimeout(
@@ -393,6 +407,8 @@ export const getMatrixInviteRoutes = (services: HomeserverServices) => {
393407
};
394408
}
395409

410+
logger.error({ msg: 'Error processing invite', err: error });
411+
396412
return {
397413
body: {
398414
errcode: 'M_UNKNOWN',

packages/core-services/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
},
3636
"dependencies": {
3737
"@rocket.chat/core-typings": "workspace:^",
38-
"@rocket.chat/federation-sdk": "0.1.31",
38+
"@rocket.chat/federation-sdk": "0.1.32",
3939
"@rocket.chat/http-router": "workspace:^",
4040
"@rocket.chat/icons": "^0.43.0",
4141
"@rocket.chat/media-signaling": "workspace:^",

yarn.lock

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7279,7 +7279,7 @@ __metadata:
72797279
"@rocket.chat/apps-engine": "workspace:^"
72807280
"@rocket.chat/core-typings": "workspace:^"
72817281
"@rocket.chat/eslint-config": "workspace:^"
7282-
"@rocket.chat/federation-sdk": "npm:0.1.31"
7282+
"@rocket.chat/federation-sdk": "npm:0.1.32"
72837283
"@rocket.chat/http-router": "workspace:^"
72847284
"@rocket.chat/icons": "npm:^0.43.0"
72857285
"@rocket.chat/jest-presets": "workspace:~"
@@ -7490,7 +7490,7 @@ __metadata:
74907490
"@rocket.chat/core-typings": "workspace:^"
74917491
"@rocket.chat/emitter": "npm:^0.31.25"
74927492
"@rocket.chat/eslint-config": "workspace:^"
7493-
"@rocket.chat/federation-sdk": "npm:0.1.31"
7493+
"@rocket.chat/federation-sdk": "npm:0.1.32"
74947494
"@rocket.chat/http-router": "workspace:^"
74957495
"@rocket.chat/license": "workspace:^"
74967496
"@rocket.chat/models": "workspace:^"
@@ -7515,9 +7515,9 @@ __metadata:
75157515
languageName: unknown
75167516
linkType: soft
75177517

7518-
"@rocket.chat/federation-sdk@npm:0.1.31":
7519-
version: 0.1.31
7520-
resolution: "@rocket.chat/federation-sdk@npm:0.1.31"
7518+
"@rocket.chat/federation-sdk@npm:0.1.32":
7519+
version: 0.1.32
7520+
resolution: "@rocket.chat/federation-sdk@npm:0.1.32"
75217521
dependencies:
75227522
"@datastructures-js/priority-queue": "npm:^6.3.3"
75237523
"@noble/ed25519": "npm:^3.0.0"
@@ -7530,7 +7530,7 @@ __metadata:
75307530
zod: "npm:^3.22.4"
75317531
peerDependencies:
75327532
typescript: ~5.9.2
7533-
checksum: 10/0ff00144d91313b403e91b1556f4e0fad2661d1d3708929fc96377909adab8fc7fe41f88871bb1ae429a0181c243111189eb98384f809b530f06b1382a617b88
7533+
checksum: 10/ced9db0f0c032860e2773cedcaa449d79eb7e2db3efb276123e4d932664127692eb2988c28c682af8c960a45fe69c69c7f4f3ddeea15a597c0c7eb6cee36c0e1
75347534
languageName: node
75357535
linkType: hard
75367536

@@ -9696,7 +9696,7 @@ __metadata:
96969696
peerDependencies:
96979697
"@rocket.chat/layout": "*"
96989698
"@rocket.chat/tools": 0.2.3
9699-
"@rocket.chat/ui-contexts": 23.0.0-rc.4
9699+
"@rocket.chat/ui-contexts": 23.0.0-rc.5
97009700
"@tanstack/react-query": "*"
97019701
react: "*"
97029702
react-hook-form: "*"

0 commit comments

Comments
 (0)