123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # Copyright 2020 The Matrix.org Foundation C.I.C.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- import logging
- from typing import Any
- from synapse.api.constants import RoomCreationPreset
- from synapse.types import JsonDict
- from ._base import Config, ConfigError
- logger = logging.Logger(__name__)
- class RoomDefaultEncryptionTypes:
- """Possible values for the encryption_enabled_by_default_for_room_type config option"""
- ALL = "all"
- INVITE = "invite"
- OFF = "off"
- class RoomConfig(Config):
- section = "room"
- def read_config(self, config: JsonDict, **kwargs: Any) -> None:
- # Whether new, locally-created rooms should have encryption enabled
- encryption_for_room_type = config.get(
- "encryption_enabled_by_default_for_room_type",
- RoomDefaultEncryptionTypes.OFF,
- )
- if encryption_for_room_type == RoomDefaultEncryptionTypes.ALL:
- self.encryption_enabled_by_default_for_room_presets = [
- RoomCreationPreset.PRIVATE_CHAT,
- RoomCreationPreset.TRUSTED_PRIVATE_CHAT,
- RoomCreationPreset.PUBLIC_CHAT,
- ]
- elif encryption_for_room_type == RoomDefaultEncryptionTypes.INVITE:
- self.encryption_enabled_by_default_for_room_presets = [
- RoomCreationPreset.PRIVATE_CHAT,
- RoomCreationPreset.TRUSTED_PRIVATE_CHAT,
- ]
- elif (
- encryption_for_room_type == RoomDefaultEncryptionTypes.OFF
- or encryption_for_room_type is False
- ):
- # PyYAML translates "off" into False if it's unquoted, so we also need to
- # check for encryption_for_room_type being False.
- self.encryption_enabled_by_default_for_room_presets = []
- else:
- raise ConfigError(
- "Invalid value for encryption_enabled_by_default_for_room_type"
- )
- self.default_power_level_content_override = config.get(
- "default_power_level_content_override",
- None,
- )
- if self.default_power_level_content_override is not None:
- for preset in self.default_power_level_content_override:
- if preset not in vars(RoomCreationPreset).values():
- raise ConfigError(
- "Unrecognised room preset %s in default_power_level_content_override"
- % preset
- )
- # We validate the actual overrides when we try to apply them.
- # When enabled, users will forget rooms when they leave them, either via a
- # leave, kick or ban.
- self.forget_on_leave = config.get("forget_rooms_on_leave", False)
|