You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-07-31 15:24:23 +03:00
Prefix the user+device state key if needed (#4262)
* Prefix the user+device state key if needed No need to prefix it for rooms that use MSC3779. Otherwise, prefix it to bypass the auth rule for state events with keys starting with @. * Use RegExp.exec() method instead Sonar typescript:S6594 * Split nested ternary operator into method Sonar typescript:S3358 * Add test coverage
This commit is contained in:
committed by
GitHub
parent
78b6b878bd
commit
25a7c9e140
@ -399,6 +399,42 @@ describe("MatrixRTCSession", () => {
|
|||||||
jest.useRealTimers();
|
jest.useRealTimers();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("non-legacy calls", () => {
|
||||||
|
const activeFocusConfig = { type: "livekit", livekit_service_url: "https://active.url" };
|
||||||
|
const activeFocus = { type: "livekit", focus_selection: "oldest_membership" };
|
||||||
|
|
||||||
|
function testJoin(useOwnedStateEvents: boolean): void {
|
||||||
|
if (useOwnedStateEvents) {
|
||||||
|
mockRoom.getVersion = jest.fn().mockReturnValue("org.matrix.msc3779.default");
|
||||||
|
}
|
||||||
|
|
||||||
|
jest.useFakeTimers();
|
||||||
|
sess!.joinRoomSession([activeFocusConfig], activeFocus, { useLegacyMemberEvents: false });
|
||||||
|
expect(client.sendStateEvent).toHaveBeenCalledWith(
|
||||||
|
mockRoom!.roomId,
|
||||||
|
EventType.GroupCallMemberPrefix,
|
||||||
|
{
|
||||||
|
application: "m.call",
|
||||||
|
scope: "m.room",
|
||||||
|
call_id: "",
|
||||||
|
device_id: "AAAAAAA",
|
||||||
|
foci_preferred: [activeFocusConfig],
|
||||||
|
focus_active: activeFocus,
|
||||||
|
} satisfies SessionMembershipData,
|
||||||
|
`${!useOwnedStateEvents ? "_" : ""}@alice:example.org_AAAAAAA`,
|
||||||
|
);
|
||||||
|
jest.useRealTimers();
|
||||||
|
}
|
||||||
|
|
||||||
|
it("sends a membership event with session payload when joining a non-legacy call", () => {
|
||||||
|
testJoin(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("does not prefix the state key with _ for rooms that support user-owned state events", () => {
|
||||||
|
testJoin(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it("does nothing if join called when already joined", () => {
|
it("does nothing if join called when already joined", () => {
|
||||||
sess!.joinRoomSession([mockFocus], mockFocus);
|
sess!.joinRoomSession([mockFocus], mockFocus);
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ export function makeMockRoom(membershipData: MembershipData, localAge: number |
|
|||||||
getLiveTimeline: jest.fn().mockReturnValue({
|
getLiveTimeline: jest.fn().mockReturnValue({
|
||||||
getState: jest.fn().mockReturnValue(roomState),
|
getState: jest.fn().mockReturnValue(roomState),
|
||||||
}),
|
}),
|
||||||
|
getVersion: jest.fn().mockReturnValue("default"),
|
||||||
} as unknown as Room;
|
} as unknown as Room;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -869,7 +869,7 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
|
|||||||
this.room.roomId,
|
this.room.roomId,
|
||||||
EventType.GroupCallMemberPrefix,
|
EventType.GroupCallMemberPrefix,
|
||||||
newContent,
|
newContent,
|
||||||
legacy ? localUserId : `${localUserId}_${localDeviceId}`,
|
legacy ? localUserId : this.makeMembershipStateKey(localUserId, localDeviceId),
|
||||||
);
|
);
|
||||||
logger.info(`Sent updated call member event.`);
|
logger.info(`Sent updated call member event.`);
|
||||||
|
|
||||||
@ -899,6 +899,15 @@ export class MatrixRTCSession extends TypedEventEmitter<MatrixRTCSessionEvent, M
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private makeMembershipStateKey(localUserId: string, localDeviceId: string): string {
|
||||||
|
const stateKey = `${localUserId}_${localDeviceId}`;
|
||||||
|
if (/^org\.matrix\.msc3779\b/.exec(this.room.getVersion())) {
|
||||||
|
return stateKey;
|
||||||
|
} else {
|
||||||
|
return `_${stateKey}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private onRotateKeyTimeout = (): void => {
|
private onRotateKeyTimeout = (): void => {
|
||||||
if (!this.manageMediaKeys) return;
|
if (!this.manageMediaKeys) return;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user