diff --git a/synapse/handlers/federation_event.py b/synapse/handlers/federation_event.py
index 982c8d3b2f..8d5be81a92 100644
--- a/synapse/handlers/federation_event.py
+++ b/synapse/handlers/federation_event.py
@@ -1515,7 +1515,10 @@ class FederationEventHandler:
# support it or the event is not from the room creator.
room_version = await self._store.get_room_version(marker_event.room_id)
create_event = await self._store.get_create_event_for_room(marker_event.room_id)
- room_creator = create_event.content.get(EventContentFields.ROOM_CREATOR)
+ if not room_version.msc2175_implicit_room_creator:
+ room_creator = create_event.content.get(EventContentFields.ROOM_CREATOR)
+ else:
+ room_creator = create_event.sender
if not room_version.msc2716_historical and (
not self._config.experimental.msc2716_enabled
or marker_event.sender != room_creator
diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py
index 4c75433a63..a17fe3bf53 100644
--- a/synapse/handlers/message.py
+++ b/synapse/handlers/message.py
@@ -1909,7 +1909,12 @@ class EventCreationHandler:
room_version_obj = KNOWN_ROOM_VERSIONS[room_version]
create_event = await self.store.get_create_event_for_room(event.room_id)
- room_creator = create_event.content.get(EventContentFields.ROOM_CREATOR)
+ if not room_version_obj.msc2175_implicit_room_creator:
+ room_creator = create_event.content.get(
+ EventContentFields.ROOM_CREATOR
+ )
+ else:
+ room_creator = create_event.sender
# Only check an insertion event if the room version
# supports it or the event is from the room creator.
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index be120cb12f..2d69cabf43 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -567,6 +567,7 @@ class RoomCreationHandler:
await self._send_events_for_new_room(
requester,
new_room_id,
+ new_room_version,
# we expect to override all the presets with initial_state, so this is
# somewhat arbitrary.
room_config={"preset": RoomCreationPreset.PRIVATE_CHAT},
@@ -922,6 +923,7 @@ class RoomCreationHandler:
) = await self._send_events_for_new_room(
requester,
room_id,
+ room_version,
room_config=config,
invite_list=invite_list,
initial_state=initial_state,
@@ -998,6 +1000,7 @@ class RoomCreationHandler:
self,
creator: Requester,
room_id: str,
+ room_version: RoomVersion,
room_config: JsonDict,
invite_list: List[str],
initial_state: MutableStateMap,
@@ -1020,6 +1023,8 @@ class RoomCreationHandler:
the user requesting the room creation
room_id:
room id for the room being created
+ room_version:
+ The room version of the new room.
room_config:
A dict of configuration options. This will be the body of
a /createRoom request; see
@@ -1053,14 +1058,6 @@ class RoomCreationHandler:
# (as this info can't be pulled from the db)
state_map: MutableStateMap[str] = {}
- def create_event_dict(etype: str, content: JsonDict, **kwargs: Any) -> JsonDict:
- e = {"type": etype, "content": content}
-
- e.update(event_keys)
- e.update(kwargs)
-
- return e
-
async def create_event(
etype: str,
content: JsonDict,
@@ -1083,7 +1080,10 @@ class RoomCreationHandler:
nonlocal depth
nonlocal prev_event
- event_dict = create_event_dict(etype, content, **kwargs)
+ # Create the event dictionary.
+ event_dict = {"type": etype, "content": content}
+ event_dict.update(event_keys)
+ event_dict.update(kwargs)
(
new_event,
@@ -1120,7 +1120,9 @@ class RoomCreationHandler:
400, f"'{preset_config}' is not a valid preset", errcode=Codes.BAD_JSON
)
- creation_content.update({"creator": creator_id})
+ # MSC2175 removes the creator field from the create event.
+ if not room_version.msc2175_implicit_room_creator:
+ creation_content["creator"] = creator_id
creation_event, unpersisted_creation_context = await create_event(
EventTypes.Create, creation_content, False
)
|