Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions packages/federation-sdk/src/services/federation.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
2 changes: 1 addition & 1 deletion packages/federation-sdk/src/services/room.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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],
);

Expand Down
4 changes: 2 additions & 2 deletions packages/room/src/authorizartion-rules/rules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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,
Expand Down
12 changes: 10 additions & 2 deletions packages/room/src/manager/event-wrapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ export type PduWithHashesAndSignaturesOptional<T extends Pdu = Pdu> = Prettify<
MakeOptional<T, 'hashes' | 'signatures'>
>;

type PduWithFederationOrigin = PduWithHashesAndSignaturesOptional & {
origin?: string;
};

export const REDACT_ALLOW_ALL_KEYS: unique symbol = Symbol.for('all');

export interface State extends Map<StateMapKey, PersistentEventBase> {
Expand All @@ -67,7 +71,7 @@ export abstract class PersistentEventBase<

private signatures: Signature = {};

protected rawEvent: PduWithHashesAndSignaturesOptional;
protected rawEvent: PduWithFederationOrigin;

private authEventsIds: Set<EventID> = new Set();
private prevEventsIds: Set<EventID> = new Set();
Expand Down Expand Up @@ -118,14 +122,18 @@ 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');
}
return domain;
}

get origin() {
return this.rawEvent.origin;
}

get residentServer() {
const residentServer = extractDomainFromId(this.rawEvent.room_id);
if (!residentServer) {
Expand Down
8 changes: 1 addition & 7 deletions packages/room/src/manager/room-state.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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, {
Expand All @@ -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() {
Expand Down