Skip to content

Commit 3d413f6

Browse files
committed
add middlewares on each route due to params visibility
1 parent 7b63fcb commit 3d413f6

File tree

6 files changed

+18
-8
lines changed

6 files changed

+18
-8
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ export const acceptInvite = async (
319319
export const getMatrixInviteRoutes = (services: HomeserverServices) => {
320320
const { invite, state, room, federationAuth } = services;
321321

322-
return new Router('/federation').use(canAccessResourceMiddleware(federationAuth, 'room')).put(
322+
return new Router('/federation').put(
323323
'/v2/invite/:roomId/:eventId',
324324
{
325325
body: ajv.compile({ type: 'object' }), // TODO: add schema from room package.
@@ -330,6 +330,7 @@ export const getMatrixInviteRoutes = (services: HomeserverServices) => {
330330
tags: ['Federation'],
331331
license: ['federation'],
332332
},
333+
canAccessResourceMiddleware(federationAuth, 'room'),
333334
async (c) => {
334335
const { roomId, eventId } = c.req.param();
335336
const { event, room_version: roomVersion } = await c.req.json();

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ async function getMediaFile(mediaId: string, serverName: string): Promise<{ file
7676
export const getMatrixMediaRoutes = (homeserverServices: HomeserverServices) => {
7777
const { config, federationAuth } = homeserverServices;
7878
return new Router('/federation')
79-
.use(canAccessResourceMiddleware(federationAuth, 'media'))
8079
.get(
8180
'/v1/media/download/:mediaId',
8281
{
@@ -91,6 +90,7 @@ export const getMatrixMediaRoutes = (homeserverServices: HomeserverServices) =>
9190
},
9291
tags: ['Federation', 'Media'],
9392
},
93+
canAccessResourceMiddleware(federationAuth, 'media'),
9494
async (c) => {
9595
try {
9696
const { mediaId } = c.req.param();
@@ -138,7 +138,8 @@ export const getMatrixMediaRoutes = (homeserverServices: HomeserverServices) =>
138138
},
139139
tags: ['Federation', 'Media'],
140140
},
141-
async () => ({
141+
canAccessResourceMiddleware(federationAuth, 'media'),
142+
async (_c) => ({
142143
statusCode: 404,
143144
body: {
144145
errcode: 'M_UNRECOGNIZED',

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,6 @@ export const getMatrixProfilesRoutes = (services: HomeserverServices) => {
428428
};
429429
},
430430
)
431-
.use(canAccessResourceMiddleware(federationAuth, 'room'))
432431
.get(
433432
'/v1/make_join/:roomId/:userId',
434433
{
@@ -440,6 +439,7 @@ export const getMatrixProfilesRoutes = (services: HomeserverServices) => {
440439
tags: ['Federation'],
441440
license: ['federation'],
442441
},
442+
canAccessResourceMiddleware(federationAuth, 'room'),
443443
async (c) => {
444444
const { roomId, userId } = c.req.param();
445445
const url = new URL(c.req.url);
@@ -471,6 +471,7 @@ export const getMatrixProfilesRoutes = (services: HomeserverServices) => {
471471
tags: ['Federation'],
472472
license: ['federation'],
473473
},
474+
canAccessResourceMiddleware(federationAuth, 'room'),
474475
async (c) => {
475476
const { roomId } = c.req.param();
476477
const body = await c.req.json();
@@ -493,6 +494,7 @@ export const getMatrixProfilesRoutes = (services: HomeserverServices) => {
493494
tags: ['Federation'],
494495
license: ['federation'],
495496
},
497+
canAccessResourceMiddleware(federationAuth, 'room'),
496498
async (c) => {
497499
const { roomId, eventId } = c.req.param();
498500

ee/packages/federation-matrix/src/api/_matrix/send-join.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ const isSendJoinResponseProps = ajv.compile(SendJoinResponseSchema);
226226
export const getMatrixSendJoinRoutes = (services: HomeserverServices) => {
227227
const { sendJoin, federationAuth } = services;
228228

229-
return new Router('/federation').use(canAccessResourceMiddleware(federationAuth, 'room')).put(
229+
return new Router('/federation').put(
230230
'/v2/send_join/:roomId/:stateKey',
231231
{
232232
params: isSendJoinParamsProps,
@@ -237,6 +237,7 @@ export const getMatrixSendJoinRoutes = (services: HomeserverServices) => {
237237
tags: ['Federation'],
238238
license: ['federation'],
239239
},
240+
canAccessResourceMiddleware(federationAuth, 'room'),
240241
async (c) => {
241242
const { roomId, stateKey } = c.req.param();
242243
const body = await c.req.json();

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,6 @@ export const getMatrixTransactionsRoutes = (services: HomeserverServices) => {
367367
)
368368

369369
// GET /_matrix/federation/v1/state_ids/{roomId}
370-
.use(canAccessResourceMiddleware(federationAuth, 'room'))
371370
.get(
372371
'/v1/state_ids/:roomId',
373372
{
@@ -376,6 +375,7 @@ export const getMatrixTransactionsRoutes = (services: HomeserverServices) => {
376375
200: isGetStateIdsResponseProps,
377376
},
378377
},
378+
canAccessResourceMiddleware(federationAuth, 'room'),
379379
async (c) => {
380380
const roomId = c.req.param('roomId');
381381
const eventId = c.req.query('event_id');
@@ -406,6 +406,7 @@ export const getMatrixTransactionsRoutes = (services: HomeserverServices) => {
406406
200: isGetStateResponseProps,
407407
},
408408
},
409+
canAccessResourceMiddleware(federationAuth, 'room'),
409410
async (c) => {
410411
const roomId = c.req.param('roomId');
411412
const eventId = c.req.query('event_id');
@@ -427,7 +428,6 @@ export const getMatrixTransactionsRoutes = (services: HomeserverServices) => {
427428
},
428429
)
429430
// GET /_matrix/federation/v1/event/{eventId}
430-
.use(canAccessResourceMiddleware(federationAuth, 'event'))
431431
.get(
432432
'/v1/event/:eventId',
433433
{
@@ -438,6 +438,7 @@ export const getMatrixTransactionsRoutes = (services: HomeserverServices) => {
438438
tags: ['Federation'],
439439
license: ['federation'],
440440
},
441+
canAccessResourceMiddleware(federationAuth, 'event'),
441442
async (c) => {
442443
const eventData = await event.getEventById(c.req.param('eventId') as EventID);
443444
if (!eventData) {

ee/packages/federation-matrix/src/api/middlewares/canAccessResource.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,13 @@ const canAccessResource = (federationAuth: EventAuthorizationService, entityType
4444
return c.json({ errcode: 'M_UNAUTHORIZED', error: 'Missing Authorization header' }, 401);
4545
}
4646

47+
const mediaId = c.req.param('mediaId');
48+
const eventId = c.req.param('eventId');
49+
const roomId = c.req.param('roomId');
50+
4751
const resourceAccess = await federationAuth.canAccessResource(
4852
entityType,
49-
extractEntityId(c.req.param(), entityType),
53+
extractEntityId({ mediaId, eventId, roomId }, entityType),
5054
authenticatedServer,
5155
);
5256
if (!resourceAccess) {

0 commit comments

Comments
 (0)