diff --git a/bun.lock b/bun.lock index 0a6f88c81..bcaabd7de 100644 --- a/bun.lock +++ b/bun.lock @@ -1,5 +1,6 @@ { "lockfileVersion": 1, + "configVersion": 0, "workspaces": { "": { "name": "homeserver", diff --git a/packages/federation-sdk/src/services/federation.service.ts b/packages/federation-sdk/src/services/federation.service.ts index fc7e7f860..b1d141918 100644 --- a/packages/federation-sdk/src/services/federation.service.ts +++ b/packages/federation-sdk/src/services/federation.service.ts @@ -313,9 +313,9 @@ export class FederationService { } for (const server of servers) { - if (server === event.origin) { + if (server === event.senderDomain) { this.logger.info( - `Skipping transaction to event origin: ${event.origin}`, + `Skipping transaction to event origin: ${event.senderDomain}`, ); continue; } diff --git a/packages/federation-sdk/src/services/room.service.ts b/packages/federation-sdk/src/services/room.service.ts index cdc320669..debcd2c56 100644 --- a/packages/federation-sdk/src/services/room.service.ts +++ b/packages/federation-sdk/src/services/room.service.ts @@ -1112,7 +1112,7 @@ export class RoomService { // try to persist the join event now, should succeed with state in place void this.eventService.processIncomingPDUs( - residentServer || joinEventFinal.origin, + residentServer, [...state, joinEventFinal.event], ); diff --git a/packages/room/src/authorizartion-rules/rules.ts b/packages/room/src/authorizartion-rules/rules.ts index 16d84f3bd..5a94d45e3 100644 --- a/packages/room/src/authorizartion-rules/rules.ts +++ b/packages/room/src/authorizartion-rules/rules.ts @@ -83,7 +83,7 @@ function isRoomAliasAllowed( } // If sender’s domain doesn’t matches state_key, reject. - if (roomAliasEvent.origin !== roomAliasEvent.stateKey) { + if (roomAliasEvent.senderDomain !== roomAliasEvent.stateKey) { throw new StateResolverAuthorizationError(RejectCodes.AuthError, { rejectedEvent: roomAliasEvent, reason: @@ -799,7 +799,7 @@ export async function checkEventAuthWithState( // If the content of the m.room.create event in the room state has the property m.federate set to false, and the sender domain of the event does not match the sender domain of the create event, reject. if ( roomCreateEvent.getContent()['m.federate'] === false && - event.origin !== roomCreateEvent.origin + event.senderDomain !== roomCreateEvent.senderDomain ) { throw new StateResolverAuthorizationError(RejectCodes.AuthError, { rejectedEvent: event, diff --git a/packages/room/src/manager/event-wrapper.ts b/packages/room/src/manager/event-wrapper.ts index d24c76542..883ebc9a7 100644 --- a/packages/room/src/manager/event-wrapper.ts +++ b/packages/room/src/manager/event-wrapper.ts @@ -42,6 +42,10 @@ export type PduWithHashesAndSignaturesOptional = Prettify< MakeOptional >; +type PduWithFederationOrigin = PduWithHashesAndSignaturesOptional & { + origin?: string; +}; + export const REDACT_ALLOW_ALL_KEYS: unique symbol = Symbol.for('all'); export interface State extends Map { @@ -67,7 +71,7 @@ export abstract class PersistentEventBase< private signatures: Signature = {}; - protected rawEvent: PduWithHashesAndSignaturesOptional; + protected rawEvent: PduWithFederationOrigin; private authEventsIds: Set = new Set(); private prevEventsIds: Set = new Set(); @@ -118,7 +122,7 @@ export abstract class PersistentEventBase< // TODO: This should be removed or different name used instead? - get origin() { + get senderDomain() { const domain = extractDomainFromId(this.rawEvent.sender); if (!domain) { throw new Error('Invalid sender, no domain found'); @@ -126,6 +130,10 @@ export abstract class PersistentEventBase< return domain; } + get origin() { + return this.rawEvent.origin; + } + get residentServer() { const residentServer = extractDomainFromId(this.rawEvent.room_id); if (!residentServer) { diff --git a/packages/room/src/manager/room-state.ts b/packages/room/src/manager/room-state.ts index e7107ef85..d2ced662c 100644 --- a/packages/room/src/manager/room-state.ts +++ b/packages/room/src/manager/room-state.ts @@ -108,7 +108,6 @@ export class RoomState { return topicEvent.getContent().topic; } - // origin is the origin of the room gotten from the room id get origin() { const createEvent = getStateByMapKey(this.stateMap, { @@ -119,12 +118,7 @@ export class RoomState { throw new Error('Room create event not found'); } - const origin = createEvent.origin; - if (!origin) { - throw new Error('Room create event has no origin'); - } - - return origin; + return createEvent.residentServer; } get powerLevels() {