|
@@ -26,7 +26,12 @@ from typing import Tuple
|
|
|
|
|
|
from six import iteritems, string_types
|
|
|
|
|
|
-from synapse.api.constants import EventTypes, JoinRules, RoomCreationPreset
|
|
|
+from synapse.api.constants import (
|
|
|
+ EventTypes,
|
|
|
+ JoinRules,
|
|
|
+ RoomCreationPreset,
|
|
|
+ RoomEncryptionAlgorithms,
|
|
|
+)
|
|
|
from synapse.api.errors import AuthError, Codes, NotFoundError, StoreError, SynapseError
|
|
|
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS, RoomVersion
|
|
|
from synapse.events.utils import copy_power_levels_contents
|
|
@@ -56,31 +61,6 @@ FIVE_MINUTES_IN_MS = 5 * 60 * 1000
|
|
|
|
|
|
|
|
|
class RoomCreationHandler(BaseHandler):
|
|
|
-
|
|
|
- PRESETS_DICT = {
|
|
|
- RoomCreationPreset.PRIVATE_CHAT: {
|
|
|
- "join_rules": JoinRules.INVITE,
|
|
|
- "history_visibility": "shared",
|
|
|
- "original_invitees_have_ops": False,
|
|
|
- "guest_can_join": True,
|
|
|
- "power_level_content_override": {"invite": 0},
|
|
|
- },
|
|
|
- RoomCreationPreset.TRUSTED_PRIVATE_CHAT: {
|
|
|
- "join_rules": JoinRules.INVITE,
|
|
|
- "history_visibility": "shared",
|
|
|
- "original_invitees_have_ops": True,
|
|
|
- "guest_can_join": True,
|
|
|
- "power_level_content_override": {"invite": 0},
|
|
|
- },
|
|
|
- RoomCreationPreset.PUBLIC_CHAT: {
|
|
|
- "join_rules": JoinRules.PUBLIC,
|
|
|
- "history_visibility": "shared",
|
|
|
- "original_invitees_have_ops": False,
|
|
|
- "guest_can_join": False,
|
|
|
- "power_level_content_override": {},
|
|
|
- },
|
|
|
- }
|
|
|
-
|
|
|
def __init__(self, hs):
|
|
|
super(RoomCreationHandler, self).__init__(hs)
|
|
|
|
|
@@ -89,6 +69,39 @@ class RoomCreationHandler(BaseHandler):
|
|
|
self.room_member_handler = hs.get_room_member_handler()
|
|
|
self.config = hs.config
|
|
|
|
|
|
+ # Room state based off defined presets
|
|
|
+ self._presets_dict = {
|
|
|
+ RoomCreationPreset.PRIVATE_CHAT: {
|
|
|
+ "join_rules": JoinRules.INVITE,
|
|
|
+ "history_visibility": "shared",
|
|
|
+ "original_invitees_have_ops": False,
|
|
|
+ "guest_can_join": True,
|
|
|
+ "power_level_content_override": {"invite": 0},
|
|
|
+ },
|
|
|
+ RoomCreationPreset.TRUSTED_PRIVATE_CHAT: {
|
|
|
+ "join_rules": JoinRules.INVITE,
|
|
|
+ "history_visibility": "shared",
|
|
|
+ "original_invitees_have_ops": True,
|
|
|
+ "guest_can_join": True,
|
|
|
+ "power_level_content_override": {"invite": 0},
|
|
|
+ },
|
|
|
+ RoomCreationPreset.PUBLIC_CHAT: {
|
|
|
+ "join_rules": JoinRules.PUBLIC,
|
|
|
+ "history_visibility": "shared",
|
|
|
+ "original_invitees_have_ops": False,
|
|
|
+ "guest_can_join": False,
|
|
|
+ "power_level_content_override": {},
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ # Modify presets to selectively enable encryption by default per homeserver config
|
|
|
+ for preset_name, preset_config in self._presets_dict.items():
|
|
|
+ encrypted = (
|
|
|
+ preset_name
|
|
|
+ in self.config.encryption_enabled_by_default_for_room_presets
|
|
|
+ )
|
|
|
+ preset_config["encrypted"] = encrypted
|
|
|
+
|
|
|
self._replication = hs.get_replication_data_handler()
|
|
|
|
|
|
# linearizer to stop two upgrades happening at once
|
|
@@ -798,7 +811,7 @@ class RoomCreationHandler(BaseHandler):
|
|
|
)
|
|
|
return last_stream_id
|
|
|
|
|
|
- config = RoomCreationHandler.PRESETS_DICT[preset_config]
|
|
|
+ config = self._presets_dict[preset_config]
|
|
|
|
|
|
creator_id = creator.user.to_string()
|
|
|
|
|
@@ -888,6 +901,13 @@ class RoomCreationHandler(BaseHandler):
|
|
|
etype=etype, state_key=state_key, content=content
|
|
|
)
|
|
|
|
|
|
+ if config["encrypted"]:
|
|
|
+ last_sent_stream_id = await send(
|
|
|
+ etype=EventTypes.RoomEncryption,
|
|
|
+ state_key="",
|
|
|
+ content={"algorithm": RoomEncryptionAlgorithms.DEFAULT},
|
|
|
+ )
|
|
|
+
|
|
|
return last_sent_stream_id
|
|
|
|
|
|
async def _generate_room_id(
|