From b0ed14d8156e611a5f8ee772e69e171bd645820c Mon Sep 17 00:00:00 2001 From: Mathieu Velten Date: Tue, 28 Nov 2023 14:15:26 +0100 Subject: [PATCH] Ignore `encryption_enabled_by_default_for_room_type` for notices room (#16677) --- changelog.d/16677.misc | 1 + synapse/handlers/room.py | 8 +++++++- synapse/server_notices/server_notices_manager.py | 3 +++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 changelog.d/16677.misc diff --git a/changelog.d/16677.misc b/changelog.d/16677.misc new file mode 100644 index 000000000000..20c37851c396 --- /dev/null +++ b/changelog.d/16677.misc @@ -0,0 +1 @@ +Ignore `encryption_enabled_by_default_for_room_type` setting when creating server notices room, since the notices will be send unencrypted anyway. diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py index afd8138caf5b..f865bed1ec2c 100644 --- a/synapse/handlers/room.py +++ b/synapse/handlers/room.py @@ -698,6 +698,7 @@ async def create_room( config: JsonDict, ratelimit: bool = True, creator_join_profile: Optional[JsonDict] = None, + ignore_forced_encryption: bool = False, ) -> Tuple[str, Optional[RoomAlias], int]: """Creates a new room. @@ -714,6 +715,8 @@ async def create_room( derived from the user's profile. If set, should contain the values to go in the body of the 'join' event (typically `avatar_url` and/or `displayname`. + ignore_forced_encryption: + Ignore encryption forced by `encryption_enabled_by_default_for_room_type` setting. Returns: A 3-tuple containing: @@ -1015,6 +1018,7 @@ async def _send_events_for_new_room( room_alias: Optional[RoomAlias] = None, power_level_content_override: Optional[JsonDict] = None, creator_join_profile: Optional[JsonDict] = None, + ignore_forced_encryption: bool = False, ) -> Tuple[int, str, int]: """Sends the initial events into a new room. Sends the room creation, membership, and power level events into the room sequentially, then creates and batches up the @@ -1049,6 +1053,8 @@ async def _send_events_for_new_room( creator_join_profile: Set to override the displayname and avatar for the creating user in this room. + ignore_forced_encryption: + Ignore encryption forced by `encryption_enabled_by_default_for_room_type` setting. Returns: A tuple containing the stream ID, event ID and depth of the last @@ -1251,7 +1257,7 @@ async def create_event( ) events_to_send.append((event, context)) - if config["encrypted"]: + if config["encrypted"] and not ignore_forced_encryption: encryption_event, encryption_context = await create_event( EventTypes.RoomEncryption, {"algorithm": RoomEncryptionAlgorithms.DEFAULT}, diff --git a/synapse/server_notices/server_notices_manager.py b/synapse/server_notices/server_notices_manager.py index c3552d6c73f8..44b999677a1e 100644 --- a/synapse/server_notices/server_notices_manager.py +++ b/synapse/server_notices/server_notices_manager.py @@ -178,6 +178,8 @@ async def get_or_create_notice_room_for_user(self, user_id: str) -> str: "avatar_url": self._config.servernotices.server_notices_mxid_avatar_url, } + # `ignore_forced_encryption` is used to bypass `encryption_enabled_by_default_for_room_type` + # setting if it set, since the server notices will not be encrypted anyway. room_id, _, _ = await self._room_creation_handler.create_room( requester, config={ @@ -187,6 +189,7 @@ async def get_or_create_notice_room_for_user(self, user_id: str) -> str: }, ratelimit=False, creator_join_profile=join_profile, + ignore_forced_encryption=True, ) self.maybe_get_notice_room_for_user.invalidate((user_id,))