1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-08-06 12:02:40 +03:00

Use sender instead of content.creator field on m.room.create events (#3675)

* Use sender instead of content.creator field on m.room.create events

* Restore room_version fields in fixtures

* Add test case for undefined sender scenario
This commit is contained in:
Johannes Marbach
2023-08-24 13:58:04 +02:00
committed by GitHub
parent c5245a887b
commit 65cbbaaf01
13 changed files with 44 additions and 56 deletions

View File

@@ -92,9 +92,7 @@ describe("MatrixClient events", function () {
type: "m.room.create", type: "m.room.create",
room: "!erufh:bar", room: "!erufh:bar",
user: "@foo:bar", user: "@foo:bar",
content: { content: {},
creator: "@foo:bar",
},
}), }),
], ],
}, },

View File

@@ -107,9 +107,7 @@ const INITIAL_SYNC_DATA = {
utils.mkEvent({ utils.mkEvent({
type: "m.room.create", type: "m.room.create",
user: userId, user: userId,
content: { content: {},
creator: userId,
},
event: false, event: false,
}), }),
], ],

View File

@@ -1989,7 +1989,6 @@ const buildEventCreate = () =>
new MatrixEvent({ new MatrixEvent({
age: 80126105, age: 80126105,
content: { content: {
creator: "@andybalaam-test1:matrix.org",
room_version: "6", room_version: "6",
}, },
event_id: "$e7j2Gt37k5NPwB6lz2N3V9lO5pUdNK8Ai7i2FPEK-oI", event_id: "$e7j2Gt37k5NPwB6lz2N3V9lO5pUdNK8Ai7i2FPEK-oI",

View File

@@ -57,9 +57,7 @@ describe("MatrixClient opts", function () {
type: "m.room.create", type: "m.room.create",
room: roomId, room: roomId,
user: userId, user: userId,
content: { content: {},
creator: userId,
},
}), }),
], ],
}, },

View File

@@ -85,9 +85,7 @@ describe("MatrixClient room timelines", function () {
type: "m.room.create", type: "m.room.create",
room: roomId, room: roomId,
user: userId, user: userId,
content: { content: {},
creator: userId,
},
}), }),
], ],
}, },

View File

@@ -389,9 +389,7 @@ describe("MatrixClient syncing", () => {
type: "m.room.create", type: "m.room.create",
room: roomOne, room: roomOne,
user: selfUserId, user: selfUserId,
content: { content: {},
creator: selfUserId,
},
}), }),
], ],
}, },
@@ -577,9 +575,7 @@ describe("MatrixClient syncing", () => {
type: "m.room.create", type: "m.room.create",
room: roomOne, room: roomOne,
user: selfUserId, user: selfUserId,
content: { content: {},
creator: selfUserId,
},
}), }),
], ],
}, },
@@ -611,9 +607,7 @@ describe("MatrixClient syncing", () => {
type: "m.room.create", type: "m.room.create",
room: roomTwo, room: roomTwo,
user: selfUserId, user: selfUserId,
content: { content: {},
creator: selfUserId,
},
}), }),
], ],
}, },
@@ -758,7 +752,6 @@ describe("MatrixClient syncing", () => {
room: roomOne, room: roomOne,
user: otherUserId, user: otherUserId,
content: { content: {
creator: otherUserId,
room_version: "9", room_version: "9",
}, },
}); });
@@ -844,7 +837,6 @@ describe("MatrixClient syncing", () => {
room: roomOne, room: roomOne,
user: otherUserId, user: otherUserId,
content: { content: {
creator: otherUserId,
room_version: testMeta.roomVersion, room_version: testMeta.roomVersion,
}, },
}); });
@@ -1372,9 +1364,7 @@ describe("MatrixClient syncing", () => {
type: "m.room.create", type: "m.room.create",
room: roomOne, room: roomOne,
user: selfUserId, user: selfUserId,
content: { content: {},
creator: selfUserId,
},
}), }),
], ],
} as Partial<IJoinedRoom>, } as Partial<IJoinedRoom>,
@@ -1471,9 +1461,7 @@ describe("MatrixClient syncing", () => {
type: "m.room.create", type: "m.room.create",
room: roomOne, room: roomOne,
user: selfUserId, user: selfUserId,
content: { content: {},
creator: selfUserId,
},
}), }),
], ],
}, },
@@ -1629,9 +1617,7 @@ describe("MatrixClient syncing", () => {
type: "m.room.create", type: "m.room.create",
room: roomId, room: roomId,
user: selfUserId, user: selfUserId,
content: { content: {},
creator: selfUserId,
},
}), }),
], ],
}, },

View File

@@ -179,7 +179,6 @@ describe("MatrixClient syncing", () => {
events: [ events: [
{ {
content: { content: {
creator: userB,
room_version: "9", room_version: "9",
}, },
origin_server_ts: 1, origin_server_ts: 1,

View File

@@ -188,7 +188,7 @@ describe("SlidingSyncSdk", () => {
[roomA]: { [roomA]: {
name: "A", name: "A",
required_state: [ required_state: [
mkOwnStateEvent(EventType.RoomCreate, { creator: selfUserId }, ""), mkOwnStateEvent(EventType.RoomCreate, {}, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId), mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId),
mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""), mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""),
mkOwnStateEvent(EventType.RoomName, { name: "A" }, ""), mkOwnStateEvent(EventType.RoomName, { name: "A" }, ""),
@@ -203,7 +203,7 @@ describe("SlidingSyncSdk", () => {
name: "B", name: "B",
required_state: [], required_state: [],
timeline: [ timeline: [
mkOwnStateEvent(EventType.RoomCreate, { creator: selfUserId }, ""), mkOwnStateEvent(EventType.RoomCreate, {}, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId), mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId),
mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""), mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""),
mkOwnEvent(EventType.RoomMessage, { body: "hello B" }), mkOwnEvent(EventType.RoomMessage, { body: "hello B" }),
@@ -215,7 +215,7 @@ describe("SlidingSyncSdk", () => {
name: "C", name: "C",
required_state: [], required_state: [],
timeline: [ timeline: [
mkOwnStateEvent(EventType.RoomCreate, { creator: selfUserId }, ""), mkOwnStateEvent(EventType.RoomCreate, {}, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId), mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId),
mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""), mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""),
mkOwnEvent(EventType.RoomMessage, { body: "hello C" }), mkOwnEvent(EventType.RoomMessage, { body: "hello C" }),
@@ -228,7 +228,7 @@ describe("SlidingSyncSdk", () => {
name: "D", name: "D",
required_state: [], required_state: [],
timeline: [ timeline: [
mkOwnStateEvent(EventType.RoomCreate, { creator: selfUserId }, ""), mkOwnStateEvent(EventType.RoomCreate, {}, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId), mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId),
mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""), mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""),
mkOwnEvent(EventType.RoomMessage, { body: "hello D" }), mkOwnEvent(EventType.RoomMessage, { body: "hello D" }),
@@ -264,7 +264,7 @@ describe("SlidingSyncSdk", () => {
[roomF]: { [roomF]: {
name: "#foo:localhost", name: "#foo:localhost",
required_state: [ required_state: [
mkOwnStateEvent(EventType.RoomCreate, { creator: selfUserId }, ""), mkOwnStateEvent(EventType.RoomCreate, {}, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId), mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId),
mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""), mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""),
mkOwnStateEvent(EventType.RoomCanonicalAlias, { alias: "#foo:localhost" }, ""), mkOwnStateEvent(EventType.RoomCanonicalAlias, { alias: "#foo:localhost" }, ""),
@@ -280,7 +280,7 @@ describe("SlidingSyncSdk", () => {
name: "G", name: "G",
required_state: [], required_state: [],
timeline: [ timeline: [
mkOwnStateEvent(EventType.RoomCreate, { creator: selfUserId }, ""), mkOwnStateEvent(EventType.RoomCreate, {}, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId), mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId),
mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""), mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""),
], ],
@@ -292,7 +292,7 @@ describe("SlidingSyncSdk", () => {
name: "H", name: "H",
required_state: [], required_state: [],
timeline: [ timeline: [
mkOwnStateEvent(EventType.RoomCreate, { creator: selfUserId }, ""), mkOwnStateEvent(EventType.RoomCreate, {}, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId), mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId),
mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""), mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""),
mkOwnEvent(EventType.RoomMessage, { body: "live event" }), mkOwnEvent(EventType.RoomMessage, { body: "live event" }),
@@ -602,7 +602,7 @@ describe("SlidingSyncSdk", () => {
name: "Room with Invite", name: "Room with Invite",
required_state: [], required_state: [],
timeline: [ timeline: [
mkOwnStateEvent(EventType.RoomCreate, { creator: selfUserId }, ""), mkOwnStateEvent(EventType.RoomCreate, {}, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId), mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId),
mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""), mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "invite" }, invitee), mkOwnStateEvent(EventType.RoomMember, { membership: "invite" }, invitee),
@@ -718,7 +718,7 @@ describe("SlidingSyncSdk", () => {
name: "Room with account data", name: "Room with account data",
required_state: [], required_state: [],
timeline: [ timeline: [
mkOwnStateEvent(EventType.RoomCreate, { creator: selfUserId }, ""), mkOwnStateEvent(EventType.RoomCreate, {}, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId), mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId),
mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""), mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""),
mkOwnEvent(EventType.RoomMessage, { body: "hello" }), mkOwnEvent(EventType.RoomMessage, { body: "hello" }),
@@ -922,7 +922,7 @@ describe("SlidingSyncSdk", () => {
name: "Room with typing", name: "Room with typing",
required_state: [], required_state: [],
timeline: [ timeline: [
mkOwnStateEvent(EventType.RoomCreate, { creator: selfUserId }, ""), mkOwnStateEvent(EventType.RoomCreate, {}, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId), mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId),
mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""), mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""),
mkOwnEvent(EventType.RoomMessage, { body: "hello" }), mkOwnEvent(EventType.RoomMessage, { body: "hello" }),
@@ -963,7 +963,7 @@ describe("SlidingSyncSdk", () => {
name: "Room with typing", name: "Room with typing",
required_state: [], required_state: [],
timeline: [ timeline: [
mkOwnStateEvent(EventType.RoomCreate, { creator: selfUserId }, ""), mkOwnStateEvent(EventType.RoomCreate, {}, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId), mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId),
mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""), mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""),
mkOwnEvent(EventType.RoomMessage, { body: "hello" }), mkOwnEvent(EventType.RoomMessage, { body: "hello" }),
@@ -1049,7 +1049,7 @@ describe("SlidingSyncSdk", () => {
name: "Room with receipts", name: "Room with receipts",
required_state: [], required_state: [],
timeline: [ timeline: [
mkOwnStateEvent(EventType.RoomCreate, { creator: selfUserId }, ""), mkOwnStateEvent(EventType.RoomCreate, {}, ""),
mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId), mkOwnStateEvent(EventType.RoomMember, { membership: "join" }, selfUserId),
mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""), mkOwnStateEvent(EventType.RoomPowerLevels, { users: { [selfUserId]: 100 } }, ""),
{ {

View File

@@ -2266,7 +2266,6 @@ describe("MatrixClient", function () {
function roomCreateEvent(newRoomId: string, predecessorRoomId: string): MatrixEvent { function roomCreateEvent(newRoomId: string, predecessorRoomId: string): MatrixEvent {
return new MatrixEvent({ return new MatrixEvent({
content: { content: {
"creator": "@daryl:alexandria.example.com",
"m.federate": true, "m.federate": true,
"predecessor": { "predecessor": {
event_id: "id_of_last_event", event_id: "id_of_last_event",

View File

@@ -70,9 +70,7 @@ describe("RoomState", function () {
user: userA, user: userA,
room: roomId, room: roomId,
event: true, event: true,
content: { content: {},
creator: userA,
},
}), }),
]); ]);
}); });

View File

@@ -228,7 +228,7 @@ describe("Room", function () {
}); });
describe("getCreator", () => { describe("getCreator", () => {
it("should return the creator from m.room.create", function () { it("should return the sender from m.room.create", function () {
// @ts-ignore - mocked doesn't handle overloads sanely // @ts-ignore - mocked doesn't handle overloads sanely
mocked(room.currentState.getStateEvents).mockImplementation(function (type, key) { mocked(room.currentState.getStateEvents).mockImplementation(function (type, key) {
if (type === EventType.RoomCreate && key === "") { if (type === EventType.RoomCreate && key === "") {
@@ -239,7 +239,7 @@ describe("Room", function () {
room: roomId, room: roomId,
user: userA, user: userA,
content: { content: {
creator: userA, creator: userB, // The creator field was dropped in room version 11 but a malicious client might still send it
}, },
}); });
} }
@@ -247,6 +247,24 @@ describe("Room", function () {
const roomCreator = room.getCreator(); const roomCreator = room.getCreator();
expect(roomCreator).toStrictEqual(userA); expect(roomCreator).toStrictEqual(userA);
}); });
it("should return null if the sender is undefined", function () {
// @ts-ignore - mocked doesn't handle overloads sanely
mocked(room.currentState.getStateEvents).mockImplementation(function (type, key) {
if (type === EventType.RoomCreate && key === "") {
return utils.mkEvent({
event: true,
type: EventType.RoomCreate,
skey: "",
room: roomId,
user: undefined,
content: {},
});
}
});
const roomCreator = room.getCreator();
expect(roomCreator).toBeNull();
});
}); });
describe("getAvatarUrl", function () { describe("getAvatarUrl", function () {
@@ -3471,12 +3489,10 @@ describe("Room", function () {
function roomCreateEvent(newRoomId: string, predecessorRoomId: string | null): MatrixEvent { function roomCreateEvent(newRoomId: string, predecessorRoomId: string | null): MatrixEvent {
const content: { const content: {
creator: string;
["m.federate"]: boolean; ["m.federate"]: boolean;
room_version: string; room_version: string;
predecessor: { event_id: string; room_id: string } | undefined; predecessor: { event_id: string; room_id: string } | undefined;
} = { } = {
"creator": "@daryl:alexandria.example.com",
"predecessor": undefined, "predecessor": undefined,
"m.federate": true, "m.federate": true,
"room_version": "9", "room_version": "9",

View File

@@ -1684,7 +1684,6 @@ const REDACT_KEEP_KEYS = new Set([
// a map from state event type to the .content keys we keep when an event is redacted // a map from state event type to the .content keys we keep when an event is redacted
const REDACT_KEEP_CONTENT_MAP: Record<string, Record<string, 1>> = { const REDACT_KEEP_CONTENT_MAP: Record<string, Record<string, 1>> = {
[EventType.RoomMember]: { membership: 1 }, [EventType.RoomMember]: { membership: 1 },
[EventType.RoomCreate]: { creator: 1 },
[EventType.RoomJoinRules]: { join_rule: 1 }, [EventType.RoomJoinRules]: { join_rule: 1 },
[EventType.RoomPowerLevels]: { [EventType.RoomPowerLevels]: {
ban: 1, ban: 1,

View File

@@ -569,7 +569,7 @@ export class Room extends ReadReceipt<RoomEmittedEvents, RoomEventHandlerMap> {
*/ */
public getCreator(): string | null { public getCreator(): string | null {
const createEvent = this.currentState.getStateEvents(EventType.RoomCreate, ""); const createEvent = this.currentState.getStateEvents(EventType.RoomCreate, "");
return createEvent?.getContent()["creator"] ?? null; return createEvent?.getSender() ?? null;
} }
/** /**