mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-29 07:28:55 +03:00
Require direct references to configuration variables. (#10985)
This removes the magic allowing accessing configurable variables directly from the config object. It is now required that a specific configuration class is used (e.g. `config.foo` must be replaced with `config.server.foo`).
This commit is contained in:
parent
829f2a82b0
commit
f4b1a9a527
31 changed files with 124 additions and 160 deletions
1
changelog.d/10985.misc
Normal file
1
changelog.d/10985.misc
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Use direct references to config flags.
|
|
@ -215,7 +215,7 @@ class MockHomeserver:
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
self.clock = Clock(reactor)
|
self.clock = Clock(reactor)
|
||||||
self.config = config
|
self.config = config
|
||||||
self.hostname = config.server_name
|
self.hostname = config.server.server_name
|
||||||
self.version_string = "Synapse/" + get_version_string(synapse)
|
self.version_string = "Synapse/" + get_version_string(synapse)
|
||||||
|
|
||||||
def get_clock(self):
|
def get_clock(self):
|
||||||
|
@ -583,7 +583,7 @@ class Porter(object):
|
||||||
return
|
return
|
||||||
|
|
||||||
self.postgres_store = self.build_db_store(
|
self.postgres_store = self.build_db_store(
|
||||||
self.hs_config.get_single_database()
|
self.hs_config.database.get_single_database()
|
||||||
)
|
)
|
||||||
|
|
||||||
await self.run_background_updates_on_postgres()
|
await self.run_background_updates_on_postgres()
|
||||||
|
|
|
@ -36,7 +36,7 @@ class MockHomeserver(HomeServer):
|
||||||
|
|
||||||
def __init__(self, config, **kwargs):
|
def __init__(self, config, **kwargs):
|
||||||
super(MockHomeserver, self).__init__(
|
super(MockHomeserver, self).__init__(
|
||||||
config.server_name, reactor=reactor, config=config, **kwargs
|
config.server.server_name, reactor=reactor, config=config, **kwargs
|
||||||
)
|
)
|
||||||
|
|
||||||
self.version_string = "Synapse/" + get_version_string(synapse)
|
self.version_string = "Synapse/" + get_version_string(synapse)
|
||||||
|
|
|
@ -301,7 +301,7 @@ def refresh_certificate(hs):
|
||||||
if not hs.config.server.has_tls_listener():
|
if not hs.config.server.has_tls_listener():
|
||||||
return
|
return
|
||||||
|
|
||||||
hs.config.read_certificate_from_disk()
|
hs.config.tls.read_certificate_from_disk()
|
||||||
hs.tls_server_context_factory = context_factory.ServerContextFactory(hs.config)
|
hs.tls_server_context_factory = context_factory.ServerContextFactory(hs.config)
|
||||||
|
|
||||||
if hs._listening_services:
|
if hs._listening_services:
|
||||||
|
|
|
@ -197,9 +197,9 @@ def start(config_options):
|
||||||
# Explicitly disable background processes
|
# Explicitly disable background processes
|
||||||
config.server.update_user_directory = False
|
config.server.update_user_directory = False
|
||||||
config.worker.run_background_tasks = False
|
config.worker.run_background_tasks = False
|
||||||
config.start_pushers = False
|
config.worker.start_pushers = False
|
||||||
config.pusher_shard_config.instances = []
|
config.pusher_shard_config.instances = []
|
||||||
config.send_federation = False
|
config.worker.send_federation = False
|
||||||
config.federation_shard_config.instances = []
|
config.federation_shard_config.instances = []
|
||||||
|
|
||||||
synapse.events.USE_FROZEN_DICTS = config.server.use_frozen_dicts
|
synapse.events.USE_FROZEN_DICTS = config.server.use_frozen_dicts
|
||||||
|
|
|
@ -234,7 +234,7 @@ class SynapseHomeServer(HomeServer):
|
||||||
)
|
)
|
||||||
|
|
||||||
if name in ["media", "federation", "client"]:
|
if name in ["media", "federation", "client"]:
|
||||||
if self.config.media.enable_media_repo:
|
if self.config.server.enable_media_repo:
|
||||||
media_repo = self.get_media_repository_resource()
|
media_repo = self.get_media_repository_resource()
|
||||||
resources.update(
|
resources.update(
|
||||||
{MEDIA_PREFIX: media_repo, LEGACY_MEDIA_PREFIX: media_repo}
|
{MEDIA_PREFIX: media_repo, LEGACY_MEDIA_PREFIX: media_repo}
|
||||||
|
|
|
@ -118,21 +118,6 @@ class Config:
|
||||||
"synapse", "res/templates"
|
"synapse", "res/templates"
|
||||||
)
|
)
|
||||||
|
|
||||||
def __getattr__(self, item: str) -> Any:
|
|
||||||
"""
|
|
||||||
Try and fetch a configuration option that does not exist on this class.
|
|
||||||
|
|
||||||
This is so that existing configs that rely on `self.value`, where value
|
|
||||||
is actually from a different config section, continue to work.
|
|
||||||
"""
|
|
||||||
if item in ["generate_config_section", "read_config"]:
|
|
||||||
raise AttributeError(item)
|
|
||||||
|
|
||||||
if self.root is None:
|
|
||||||
raise AttributeError(item)
|
|
||||||
else:
|
|
||||||
return self.root._get_unclassed_config(self.section, item)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def parse_size(value):
|
def parse_size(value):
|
||||||
if isinstance(value, int):
|
if isinstance(value, int):
|
||||||
|
@ -289,7 +274,9 @@ class Config:
|
||||||
env.filters.update(
|
env.filters.update(
|
||||||
{
|
{
|
||||||
"format_ts": _format_ts_filter,
|
"format_ts": _format_ts_filter,
|
||||||
"mxc_to_http": _create_mxc_to_http_filter(self.public_baseurl),
|
"mxc_to_http": _create_mxc_to_http_filter(
|
||||||
|
self.root.server.public_baseurl
|
||||||
|
),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -311,8 +298,6 @@ class RootConfig:
|
||||||
config_classes = []
|
config_classes = []
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._configs = OrderedDict()
|
|
||||||
|
|
||||||
for config_class in self.config_classes:
|
for config_class in self.config_classes:
|
||||||
if config_class.section is None:
|
if config_class.section is None:
|
||||||
raise ValueError("%r requires a section name" % (config_class,))
|
raise ValueError("%r requires a section name" % (config_class,))
|
||||||
|
@ -321,42 +306,7 @@ class RootConfig:
|
||||||
conf = config_class(self)
|
conf = config_class(self)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception("Failed making %s: %r" % (config_class.section, e))
|
raise Exception("Failed making %s: %r" % (config_class.section, e))
|
||||||
self._configs[config_class.section] = conf
|
setattr(self, config_class.section, conf)
|
||||||
|
|
||||||
def __getattr__(self, item: str) -> Any:
|
|
||||||
"""
|
|
||||||
Redirect lookups on this object either to config objects, or values on
|
|
||||||
config objects, so that `config.tls.blah` works, as well as legacy uses
|
|
||||||
of things like `config.server.server_name`. It will first look up the config
|
|
||||||
section name, and then values on those config classes.
|
|
||||||
"""
|
|
||||||
if item in self._configs.keys():
|
|
||||||
return self._configs[item]
|
|
||||||
|
|
||||||
return self._get_unclassed_config(None, item)
|
|
||||||
|
|
||||||
def _get_unclassed_config(self, asking_section: Optional[str], item: str):
|
|
||||||
"""
|
|
||||||
Fetch a config value from one of the instantiated config classes that
|
|
||||||
has not been fetched directly.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
asking_section: If this check is coming from a Config child, which
|
|
||||||
one? This section will not be asked if it has the value.
|
|
||||||
item: The configuration value key.
|
|
||||||
|
|
||||||
Raises:
|
|
||||||
AttributeError if no config classes have the config key. The body
|
|
||||||
will contain what sections were checked.
|
|
||||||
"""
|
|
||||||
for key, val in self._configs.items():
|
|
||||||
if key == asking_section:
|
|
||||||
continue
|
|
||||||
|
|
||||||
if item in dir(val):
|
|
||||||
return getattr(val, item)
|
|
||||||
|
|
||||||
raise AttributeError(item, "not found in %s" % (list(self._configs.keys()),))
|
|
||||||
|
|
||||||
def invoke_all(self, func_name: str, *args, **kwargs) -> MutableMapping[str, Any]:
|
def invoke_all(self, func_name: str, *args, **kwargs) -> MutableMapping[str, Any]:
|
||||||
"""
|
"""
|
||||||
|
@ -373,9 +323,11 @@ class RootConfig:
|
||||||
"""
|
"""
|
||||||
res = OrderedDict()
|
res = OrderedDict()
|
||||||
|
|
||||||
for name, config in self._configs.items():
|
for config_class in self.config_classes:
|
||||||
|
config = getattr(self, config_class.section)
|
||||||
|
|
||||||
if hasattr(config, func_name):
|
if hasattr(config, func_name):
|
||||||
res[name] = getattr(config, func_name)(*args, **kwargs)
|
res[config_class.section] = getattr(config, func_name)(*args, **kwargs)
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@ class AccountValidityConfig(Config):
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.account_validity_renew_by_email_enabled:
|
if self.account_validity_renew_by_email_enabled:
|
||||||
if not self.public_baseurl:
|
if not self.root.server.public_baseurl:
|
||||||
raise ConfigError("Can't send renewal emails without 'public_baseurl'")
|
raise ConfigError("Can't send renewal emails without 'public_baseurl'")
|
||||||
|
|
||||||
# Load account validity templates.
|
# Load account validity templates.
|
||||||
|
|
|
@ -37,7 +37,7 @@ class CasConfig(Config):
|
||||||
|
|
||||||
# The public baseurl is required because it is used by the redirect
|
# The public baseurl is required because it is used by the redirect
|
||||||
# template.
|
# template.
|
||||||
public_baseurl = self.public_baseurl
|
public_baseurl = self.root.server.public_baseurl
|
||||||
if not public_baseurl:
|
if not public_baseurl:
|
||||||
raise ConfigError("cas_config requires a public_baseurl to be set")
|
raise ConfigError("cas_config requires a public_baseurl to be set")
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,6 @@ import email.utils
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
|
|
||||||
|
@ -135,7 +134,7 @@ class EmailConfig(Config):
|
||||||
# msisdn is currently always remote while Synapse does not support any method of
|
# msisdn is currently always remote while Synapse does not support any method of
|
||||||
# sending SMS messages
|
# sending SMS messages
|
||||||
ThreepidBehaviour.REMOTE
|
ThreepidBehaviour.REMOTE
|
||||||
if self.account_threepid_delegate_email
|
if self.root.registration.account_threepid_delegate_email
|
||||||
else ThreepidBehaviour.LOCAL
|
else ThreepidBehaviour.LOCAL
|
||||||
)
|
)
|
||||||
# Prior to Synapse v1.4.0, there was another option that defined whether Synapse would
|
# Prior to Synapse v1.4.0, there was another option that defined whether Synapse would
|
||||||
|
@ -144,7 +143,7 @@ class EmailConfig(Config):
|
||||||
# identity server in the process.
|
# identity server in the process.
|
||||||
self.using_identity_server_from_trusted_list = False
|
self.using_identity_server_from_trusted_list = False
|
||||||
if (
|
if (
|
||||||
not self.account_threepid_delegate_email
|
not self.root.registration.account_threepid_delegate_email
|
||||||
and config.get("trust_identity_server_for_password_resets", False) is True
|
and config.get("trust_identity_server_for_password_resets", False) is True
|
||||||
):
|
):
|
||||||
# Use the first entry in self.trusted_third_party_id_servers instead
|
# Use the first entry in self.trusted_third_party_id_servers instead
|
||||||
|
@ -156,7 +155,7 @@ class EmailConfig(Config):
|
||||||
|
|
||||||
# trusted_third_party_id_servers does not contain a scheme whereas
|
# trusted_third_party_id_servers does not contain a scheme whereas
|
||||||
# account_threepid_delegate_email is expected to. Presume https
|
# account_threepid_delegate_email is expected to. Presume https
|
||||||
self.account_threepid_delegate_email: Optional[str] = (
|
self.root.registration.account_threepid_delegate_email = (
|
||||||
"https://" + first_trusted_identity_server
|
"https://" + first_trusted_identity_server
|
||||||
)
|
)
|
||||||
self.using_identity_server_from_trusted_list = True
|
self.using_identity_server_from_trusted_list = True
|
||||||
|
@ -335,7 +334,7 @@ class EmailConfig(Config):
|
||||||
"client_base_url", email_config.get("riot_base_url", None)
|
"client_base_url", email_config.get("riot_base_url", None)
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.account_validity_renew_by_email_enabled:
|
if self.root.account_validity.account_validity_renew_by_email_enabled:
|
||||||
expiry_template_html = email_config.get(
|
expiry_template_html = email_config.get(
|
||||||
"expiry_template_html", "notice_expiry.html"
|
"expiry_template_html", "notice_expiry.html"
|
||||||
)
|
)
|
||||||
|
|
|
@ -145,11 +145,13 @@ class KeyConfig(Config):
|
||||||
|
|
||||||
# list of TrustedKeyServer objects
|
# list of TrustedKeyServer objects
|
||||||
self.key_servers = list(
|
self.key_servers = list(
|
||||||
_parse_key_servers(key_servers, self.federation_verify_certificates)
|
_parse_key_servers(
|
||||||
|
key_servers, self.root.tls.federation_verify_certificates
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.macaroon_secret_key = config.get(
|
self.macaroon_secret_key = config.get(
|
||||||
"macaroon_secret_key", self.registration_shared_secret
|
"macaroon_secret_key", self.root.registration.registration_shared_secret
|
||||||
)
|
)
|
||||||
|
|
||||||
if not self.macaroon_secret_key:
|
if not self.macaroon_secret_key:
|
||||||
|
|
|
@ -58,7 +58,7 @@ class OIDCConfig(Config):
|
||||||
"Multiple OIDC providers have the idp_id %r." % idp_id
|
"Multiple OIDC providers have the idp_id %r." % idp_id
|
||||||
)
|
)
|
||||||
|
|
||||||
public_baseurl = self.public_baseurl
|
public_baseurl = self.root.server.public_baseurl
|
||||||
if public_baseurl is None:
|
if public_baseurl is None:
|
||||||
raise ConfigError("oidc_config requires a public_baseurl to be set")
|
raise ConfigError("oidc_config requires a public_baseurl to be set")
|
||||||
self.oidc_callback_url = public_baseurl + "_synapse/client/oidc/callback"
|
self.oidc_callback_url = public_baseurl + "_synapse/client/oidc/callback"
|
||||||
|
|
|
@ -45,7 +45,10 @@ class RegistrationConfig(Config):
|
||||||
account_threepid_delegates = config.get("account_threepid_delegates") or {}
|
account_threepid_delegates = config.get("account_threepid_delegates") or {}
|
||||||
self.account_threepid_delegate_email = account_threepid_delegates.get("email")
|
self.account_threepid_delegate_email = account_threepid_delegates.get("email")
|
||||||
self.account_threepid_delegate_msisdn = account_threepid_delegates.get("msisdn")
|
self.account_threepid_delegate_msisdn = account_threepid_delegates.get("msisdn")
|
||||||
if self.account_threepid_delegate_msisdn and not self.public_baseurl:
|
if (
|
||||||
|
self.account_threepid_delegate_msisdn
|
||||||
|
and not self.root.server.public_baseurl
|
||||||
|
):
|
||||||
raise ConfigError(
|
raise ConfigError(
|
||||||
"The configuration option `public_baseurl` is required if "
|
"The configuration option `public_baseurl` is required if "
|
||||||
"`account_threepid_delegate.msisdn` is set, such that "
|
"`account_threepid_delegate.msisdn` is set, such that "
|
||||||
|
@ -85,7 +88,7 @@ class RegistrationConfig(Config):
|
||||||
if mxid_localpart:
|
if mxid_localpart:
|
||||||
# Convert the localpart to a full mxid.
|
# Convert the localpart to a full mxid.
|
||||||
self.auto_join_user_id = UserID(
|
self.auto_join_user_id = UserID(
|
||||||
mxid_localpart, self.server_name
|
mxid_localpart, self.root.server.server_name
|
||||||
).to_string()
|
).to_string()
|
||||||
|
|
||||||
if self.autocreate_auto_join_rooms:
|
if self.autocreate_auto_join_rooms:
|
||||||
|
|
|
@ -94,7 +94,7 @@ class ContentRepositoryConfig(Config):
|
||||||
# Only enable the media repo if either the media repo is enabled or the
|
# Only enable the media repo if either the media repo is enabled or the
|
||||||
# current worker app is the media repo.
|
# current worker app is the media repo.
|
||||||
if (
|
if (
|
||||||
self.enable_media_repo is False
|
self.root.server.enable_media_repo is False
|
||||||
and config.get("worker_app") != "synapse.app.media_repository"
|
and config.get("worker_app") != "synapse.app.media_repository"
|
||||||
):
|
):
|
||||||
self.can_load_media_repo = False
|
self.can_load_media_repo = False
|
||||||
|
|
|
@ -199,7 +199,7 @@ class SAML2Config(Config):
|
||||||
"""
|
"""
|
||||||
import saml2
|
import saml2
|
||||||
|
|
||||||
public_baseurl = self.public_baseurl
|
public_baseurl = self.root.server.public_baseurl
|
||||||
if public_baseurl is None:
|
if public_baseurl is None:
|
||||||
raise ConfigError("saml2_config requires a public_baseurl to be set")
|
raise ConfigError("saml2_config requires a public_baseurl to be set")
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,9 @@ class ServerNoticesConfig(Config):
|
||||||
return
|
return
|
||||||
|
|
||||||
mxid_localpart = c["system_mxid_localpart"]
|
mxid_localpart = c["system_mxid_localpart"]
|
||||||
self.server_notices_mxid = UserID(mxid_localpart, self.server_name).to_string()
|
self.server_notices_mxid = UserID(
|
||||||
|
mxid_localpart, self.root.server.server_name
|
||||||
|
).to_string()
|
||||||
self.server_notices_mxid_display_name = c.get("system_mxid_display_name", None)
|
self.server_notices_mxid_display_name = c.get("system_mxid_display_name", None)
|
||||||
self.server_notices_mxid_avatar_url = c.get("system_mxid_avatar_url", None)
|
self.server_notices_mxid_avatar_url = c.get("system_mxid_avatar_url", None)
|
||||||
# todo: i18n
|
# todo: i18n
|
||||||
|
|
|
@ -103,8 +103,10 @@ class SSOConfig(Config):
|
||||||
# the client's.
|
# the client's.
|
||||||
# public_baseurl is an optional setting, so we only add the fallback's URL to the
|
# public_baseurl is an optional setting, so we only add the fallback's URL to the
|
||||||
# list if it's provided (because we can't figure out what that URL is otherwise).
|
# list if it's provided (because we can't figure out what that URL is otherwise).
|
||||||
if self.public_baseurl:
|
if self.root.server.public_baseurl:
|
||||||
login_fallback_url = self.public_baseurl + "_matrix/static/client/login"
|
login_fallback_url = (
|
||||||
|
self.root.server.public_baseurl + "_matrix/static/client/login"
|
||||||
|
)
|
||||||
self.sso_client_whitelist.append(login_fallback_url)
|
self.sso_client_whitelist.append(login_fallback_url)
|
||||||
|
|
||||||
def generate_config_section(self, **kwargs):
|
def generate_config_section(self, **kwargs):
|
||||||
|
|
|
@ -67,12 +67,8 @@ class AccountValidityHandler:
|
||||||
and self._account_validity_renew_by_email_enabled
|
and self._account_validity_renew_by_email_enabled
|
||||||
):
|
):
|
||||||
# Don't do email-specific configuration if renewal by email is disabled.
|
# Don't do email-specific configuration if renewal by email is disabled.
|
||||||
self._template_html = (
|
self._template_html = hs.config.email.account_validity_template_html
|
||||||
hs.config.account_validity.account_validity_template_html
|
self._template_text = hs.config.email.account_validity_template_text
|
||||||
)
|
|
||||||
self._template_text = (
|
|
||||||
hs.config.account_validity.account_validity_template_text
|
|
||||||
)
|
|
||||||
self._renew_email_subject = (
|
self._renew_email_subject = (
|
||||||
hs.config.account_validity.account_validity_renew_email_subject
|
hs.config.account_validity.account_validity_renew_email_subject
|
||||||
)
|
)
|
||||||
|
|
|
@ -1499,8 +1499,11 @@ class RoomMemberMasterHandler(RoomMemberHandler):
|
||||||
if len(remote_room_hosts) == 0:
|
if len(remote_room_hosts) == 0:
|
||||||
raise SynapseError(404, "No known servers")
|
raise SynapseError(404, "No known servers")
|
||||||
|
|
||||||
check_complexity = self.hs.config.limit_remote_rooms.enabled
|
check_complexity = self.hs.config.server.limit_remote_rooms.enabled
|
||||||
if check_complexity and self.hs.config.limit_remote_rooms.admins_can_join:
|
if (
|
||||||
|
check_complexity
|
||||||
|
and self.hs.config.server.limit_remote_rooms.admins_can_join
|
||||||
|
):
|
||||||
check_complexity = not await self.auth.is_server_admin(user)
|
check_complexity = not await self.auth.is_server_admin(user)
|
||||||
|
|
||||||
if check_complexity:
|
if check_complexity:
|
||||||
|
|
|
@ -117,7 +117,7 @@ class ReplicationDataHandler:
|
||||||
self._instance_name = hs.get_instance_name()
|
self._instance_name = hs.get_instance_name()
|
||||||
self._typing_handler = hs.get_typing_handler()
|
self._typing_handler = hs.get_typing_handler()
|
||||||
|
|
||||||
self._notify_pushers = hs.config.start_pushers
|
self._notify_pushers = hs.config.worker.start_pushers
|
||||||
self._pusher_pool = hs.get_pusherpool()
|
self._pusher_pool = hs.get_pusherpool()
|
||||||
self._presence_handler = hs.get_presence_handler()
|
self._presence_handler = hs.get_presence_handler()
|
||||||
|
|
||||||
|
|
|
@ -171,7 +171,10 @@ class ReplicationCommandHandler:
|
||||||
if hs.config.worker.worker_app is not None:
|
if hs.config.worker.worker_app is not None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if stream.NAME == FederationStream.NAME and hs.config.send_federation:
|
if (
|
||||||
|
stream.NAME == FederationStream.NAME
|
||||||
|
and hs.config.worker.send_federation
|
||||||
|
):
|
||||||
# We only support federation stream if federation sending
|
# We only support federation stream if federation sending
|
||||||
# has been disabled on the master.
|
# has been disabled on the master.
|
||||||
continue
|
continue
|
||||||
|
@ -225,7 +228,7 @@ class ReplicationCommandHandler:
|
||||||
self._is_master = hs.config.worker.worker_app is None
|
self._is_master = hs.config.worker.worker_app is None
|
||||||
|
|
||||||
self._federation_sender = None
|
self._federation_sender = None
|
||||||
if self._is_master and not hs.config.send_federation:
|
if self._is_master and not hs.config.worker.send_federation:
|
||||||
self._federation_sender = hs.get_federation_sender()
|
self._federation_sender = hs.get_federation_sender()
|
||||||
|
|
||||||
self._server_notices_sender = None
|
self._server_notices_sender = None
|
||||||
|
|
|
@ -48,7 +48,7 @@ class AuthRestServlet(RestServlet):
|
||||||
self.auth_handler = hs.get_auth_handler()
|
self.auth_handler = hs.get_auth_handler()
|
||||||
self.registration_handler = hs.get_registration_handler()
|
self.registration_handler = hs.get_registration_handler()
|
||||||
self.recaptcha_template = hs.config.captcha.recaptcha_template
|
self.recaptcha_template = hs.config.captcha.recaptcha_template
|
||||||
self.terms_template = hs.config.terms_template
|
self.terms_template = hs.config.consent.terms_template
|
||||||
self.registration_token_template = (
|
self.registration_token_template = (
|
||||||
hs.config.registration.registration_token_template
|
hs.config.registration.registration_token_template
|
||||||
)
|
)
|
||||||
|
|
|
@ -61,7 +61,9 @@ class PushRuleRestServlet(RestServlet):
|
||||||
self.notifier = hs.get_notifier()
|
self.notifier = hs.get_notifier()
|
||||||
self._is_worker = hs.config.worker.worker_app is not None
|
self._is_worker = hs.config.worker.worker_app is not None
|
||||||
|
|
||||||
self._users_new_default_push_rules = hs.config.users_new_default_push_rules
|
self._users_new_default_push_rules = (
|
||||||
|
hs.config.server.users_new_default_push_rules
|
||||||
|
)
|
||||||
|
|
||||||
async def on_PUT(self, request: SynapseRequest, path: str) -> Tuple[int, JsonDict]:
|
async def on_PUT(self, request: SynapseRequest, path: str) -> Tuple[int, JsonDict]:
|
||||||
if self._is_worker:
|
if self._is_worker:
|
||||||
|
|
|
@ -101,7 +101,9 @@ class PushRulesWorkerStore(
|
||||||
prefilled_cache=push_rules_prefill,
|
prefilled_cache=push_rules_prefill,
|
||||||
)
|
)
|
||||||
|
|
||||||
self._users_new_default_push_rules = hs.config.users_new_default_push_rules
|
self._users_new_default_push_rules = (
|
||||||
|
hs.config.server.users_new_default_push_rules
|
||||||
|
)
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def get_max_push_rules_stream_id(self):
|
def get_max_push_rules_stream_id(self):
|
||||||
|
|
|
@ -1778,7 +1778,9 @@ class RegistrationStore(StatsStore, RegistrationBackgroundUpdateStore):
|
||||||
def __init__(self, database: DatabasePool, db_conn: Connection, hs: "HomeServer"):
|
def __init__(self, database: DatabasePool, db_conn: Connection, hs: "HomeServer"):
|
||||||
super().__init__(database, db_conn, hs)
|
super().__init__(database, db_conn, hs)
|
||||||
|
|
||||||
self._ignore_unknown_session_error = hs.config.request_token_inhibit_3pid_errors
|
self._ignore_unknown_session_error = (
|
||||||
|
hs.config.server.request_token_inhibit_3pid_errors
|
||||||
|
)
|
||||||
|
|
||||||
self._access_tokens_id_gen = IdGenerator(db_conn, "access_tokens", "id")
|
self._access_tokens_id_gen = IdGenerator(db_conn, "access_tokens", "id")
|
||||||
self._refresh_tokens_id_gen = IdGenerator(db_conn, "refresh_tokens", "id")
|
self._refresh_tokens_id_gen = IdGenerator(db_conn, "refresh_tokens", "id")
|
||||||
|
|
|
@ -14,23 +14,28 @@
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
import tempfile
|
import tempfile
|
||||||
|
from unittest.mock import Mock
|
||||||
|
|
||||||
from synapse.config import ConfigError
|
from synapse.config import ConfigError
|
||||||
|
from synapse.config._base import Config
|
||||||
from synapse.util.stringutils import random_string
|
from synapse.util.stringutils import random_string
|
||||||
|
|
||||||
from tests import unittest
|
from tests import unittest
|
||||||
|
|
||||||
|
|
||||||
class BaseConfigTestCase(unittest.HomeserverTestCase):
|
class BaseConfigTestCase(unittest.TestCase):
|
||||||
def prepare(self, reactor, clock, hs):
|
def setUp(self):
|
||||||
self.hs = hs
|
# The root object needs a server property with a public_baseurl.
|
||||||
|
root = Mock()
|
||||||
|
root.server.public_baseurl = "http://test"
|
||||||
|
self.config = Config(root)
|
||||||
|
|
||||||
def test_loading_missing_templates(self):
|
def test_loading_missing_templates(self):
|
||||||
# Use a temporary directory that exists on the system, but that isn't likely to
|
# Use a temporary directory that exists on the system, but that isn't likely to
|
||||||
# contain template files
|
# contain template files
|
||||||
with tempfile.TemporaryDirectory() as tmp_dir:
|
with tempfile.TemporaryDirectory() as tmp_dir:
|
||||||
# Attempt to load an HTML template from our custom template directory
|
# Attempt to load an HTML template from our custom template directory
|
||||||
template = self.hs.config.read_templates(["sso_error.html"], (tmp_dir,))[0]
|
template = self.config.read_templates(["sso_error.html"], (tmp_dir,))[0]
|
||||||
|
|
||||||
# If no errors, we should've gotten the default template instead
|
# If no errors, we should've gotten the default template instead
|
||||||
|
|
||||||
|
@ -60,7 +65,7 @@ class BaseConfigTestCase(unittest.HomeserverTestCase):
|
||||||
|
|
||||||
# Attempt to load the template from our custom template directory
|
# Attempt to load the template from our custom template directory
|
||||||
template = (
|
template = (
|
||||||
self.hs.config.read_templates([template_filename], (tmp_dir,))
|
self.config.read_templates([template_filename], (tmp_dir,))
|
||||||
)[0]
|
)[0]
|
||||||
|
|
||||||
# Render the template
|
# Render the template
|
||||||
|
@ -97,7 +102,7 @@ class BaseConfigTestCase(unittest.HomeserverTestCase):
|
||||||
|
|
||||||
# Retrieve the template.
|
# Retrieve the template.
|
||||||
template = (
|
template = (
|
||||||
self.hs.config.read_templates(
|
self.config.read_templates(
|
||||||
[template_filename],
|
[template_filename],
|
||||||
(td.name for td in tempdirs),
|
(td.name for td in tempdirs),
|
||||||
)
|
)
|
||||||
|
@ -118,7 +123,7 @@ class BaseConfigTestCase(unittest.HomeserverTestCase):
|
||||||
|
|
||||||
# Retrieve the template.
|
# Retrieve the template.
|
||||||
template = (
|
template = (
|
||||||
self.hs.config.read_templates(
|
self.config.read_templates(
|
||||||
[other_template_name],
|
[other_template_name],
|
||||||
(td.name for td in tempdirs),
|
(td.name for td in tempdirs),
|
||||||
)
|
)
|
||||||
|
@ -134,6 +139,6 @@ class BaseConfigTestCase(unittest.HomeserverTestCase):
|
||||||
|
|
||||||
def test_loading_template_from_nonexistent_custom_directory(self):
|
def test_loading_template_from_nonexistent_custom_directory(self):
|
||||||
with self.assertRaises(ConfigError):
|
with self.assertRaises(ConfigError):
|
||||||
self.hs.config.read_templates(
|
self.config.read_templates(
|
||||||
["some_filename.html"], ("a_nonexistent_directory",)
|
["some_filename.html"], ("a_nonexistent_directory",)
|
||||||
)
|
)
|
||||||
|
|
|
@ -12,39 +12,32 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from synapse.config._base import Config, RootConfig
|
|
||||||
from synapse.config.cache import CacheConfig, add_resizable_cache
|
from synapse.config.cache import CacheConfig, add_resizable_cache
|
||||||
from synapse.util.caches.lrucache import LruCache
|
from synapse.util.caches.lrucache import LruCache
|
||||||
|
|
||||||
from tests.unittest import TestCase
|
from tests.unittest import TestCase
|
||||||
|
|
||||||
|
|
||||||
class FakeServer(Config):
|
|
||||||
section = "server"
|
|
||||||
|
|
||||||
|
|
||||||
class TestConfig(RootConfig):
|
|
||||||
config_classes = [FakeServer, CacheConfig]
|
|
||||||
|
|
||||||
|
|
||||||
class CacheConfigTests(TestCase):
|
class CacheConfigTests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
# Reset caches before each test
|
# Reset caches before each test
|
||||||
TestConfig().caches.reset()
|
self.config = CacheConfig()
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
self.config.reset()
|
||||||
|
|
||||||
def test_individual_caches_from_environ(self):
|
def test_individual_caches_from_environ(self):
|
||||||
"""
|
"""
|
||||||
Individual cache factors will be loaded from the environment.
|
Individual cache factors will be loaded from the environment.
|
||||||
"""
|
"""
|
||||||
config = {}
|
config = {}
|
||||||
t = TestConfig()
|
self.config._environ = {
|
||||||
t.caches._environ = {
|
|
||||||
"SYNAPSE_CACHE_FACTOR_SOMETHING_OR_OTHER": "2",
|
"SYNAPSE_CACHE_FACTOR_SOMETHING_OR_OTHER": "2",
|
||||||
"SYNAPSE_NOT_CACHE": "BLAH",
|
"SYNAPSE_NOT_CACHE": "BLAH",
|
||||||
}
|
}
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
self.config.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
|
|
||||||
self.assertEqual(dict(t.caches.cache_factors), {"something_or_other": 2.0})
|
self.assertEqual(dict(self.config.cache_factors), {"something_or_other": 2.0})
|
||||||
|
|
||||||
def test_config_overrides_environ(self):
|
def test_config_overrides_environ(self):
|
||||||
"""
|
"""
|
||||||
|
@ -52,15 +45,14 @@ class CacheConfigTests(TestCase):
|
||||||
over those in the config.
|
over those in the config.
|
||||||
"""
|
"""
|
||||||
config = {"caches": {"per_cache_factors": {"foo": 2, "bar": 3}}}
|
config = {"caches": {"per_cache_factors": {"foo": 2, "bar": 3}}}
|
||||||
t = TestConfig()
|
self.config._environ = {
|
||||||
t.caches._environ = {
|
|
||||||
"SYNAPSE_CACHE_FACTOR_SOMETHING_OR_OTHER": "2",
|
"SYNAPSE_CACHE_FACTOR_SOMETHING_OR_OTHER": "2",
|
||||||
"SYNAPSE_CACHE_FACTOR_FOO": 1,
|
"SYNAPSE_CACHE_FACTOR_FOO": 1,
|
||||||
}
|
}
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
self.config.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
dict(t.caches.cache_factors),
|
dict(self.config.cache_factors),
|
||||||
{"foo": 1.0, "bar": 3.0, "something_or_other": 2.0},
|
{"foo": 1.0, "bar": 3.0, "something_or_other": 2.0},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -76,8 +68,7 @@ class CacheConfigTests(TestCase):
|
||||||
self.assertEqual(cache.max_size, 50)
|
self.assertEqual(cache.max_size, 50)
|
||||||
|
|
||||||
config = {"caches": {"per_cache_factors": {"foo": 3}}}
|
config = {"caches": {"per_cache_factors": {"foo": 3}}}
|
||||||
t = TestConfig()
|
self.config.read_config(config)
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
|
||||||
|
|
||||||
self.assertEqual(cache.max_size, 300)
|
self.assertEqual(cache.max_size, 300)
|
||||||
|
|
||||||
|
@ -88,8 +79,7 @@ class CacheConfigTests(TestCase):
|
||||||
there is one.
|
there is one.
|
||||||
"""
|
"""
|
||||||
config = {"caches": {"per_cache_factors": {"foo": 2}}}
|
config = {"caches": {"per_cache_factors": {"foo": 2}}}
|
||||||
t = TestConfig()
|
self.config.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
|
||||||
|
|
||||||
cache = LruCache(100)
|
cache = LruCache(100)
|
||||||
add_resizable_cache("foo", cache_resize_callback=cache.set_cache_factor)
|
add_resizable_cache("foo", cache_resize_callback=cache.set_cache_factor)
|
||||||
|
@ -106,8 +96,7 @@ class CacheConfigTests(TestCase):
|
||||||
self.assertEqual(cache.max_size, 50)
|
self.assertEqual(cache.max_size, 50)
|
||||||
|
|
||||||
config = {"caches": {"global_factor": 4}}
|
config = {"caches": {"global_factor": 4}}
|
||||||
t = TestConfig()
|
self.config.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
|
||||||
|
|
||||||
self.assertEqual(cache.max_size, 400)
|
self.assertEqual(cache.max_size, 400)
|
||||||
|
|
||||||
|
@ -118,8 +107,7 @@ class CacheConfigTests(TestCase):
|
||||||
is no per-cache factor.
|
is no per-cache factor.
|
||||||
"""
|
"""
|
||||||
config = {"caches": {"global_factor": 1.5}}
|
config = {"caches": {"global_factor": 1.5}}
|
||||||
t = TestConfig()
|
self.config.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
|
||||||
|
|
||||||
cache = LruCache(100)
|
cache = LruCache(100)
|
||||||
add_resizable_cache("foo", cache_resize_callback=cache.set_cache_factor)
|
add_resizable_cache("foo", cache_resize_callback=cache.set_cache_factor)
|
||||||
|
@ -133,12 +121,11 @@ class CacheConfigTests(TestCase):
|
||||||
"per_cache_factors": {"*cache_a*": 5, "cache_b": 6, "cache_c": 2}
|
"per_cache_factors": {"*cache_a*": 5, "cache_b": 6, "cache_c": 2}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
t = TestConfig()
|
self.config._environ = {
|
||||||
t.caches._environ = {
|
|
||||||
"SYNAPSE_CACHE_FACTOR_CACHE_A": "2",
|
"SYNAPSE_CACHE_FACTOR_CACHE_A": "2",
|
||||||
"SYNAPSE_CACHE_FACTOR_CACHE_B": 3,
|
"SYNAPSE_CACHE_FACTOR_CACHE_B": 3,
|
||||||
}
|
}
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
self.config.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
|
|
||||||
cache_a = LruCache(100)
|
cache_a = LruCache(100)
|
||||||
add_resizable_cache("*cache_a*", cache_resize_callback=cache_a.set_cache_factor)
|
add_resizable_cache("*cache_a*", cache_resize_callback=cache_a.set_cache_factor)
|
||||||
|
@ -158,11 +145,10 @@ class CacheConfigTests(TestCase):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
config = {"caches": {"event_cache_size": "10k"}}
|
config = {"caches": {"event_cache_size": "10k"}}
|
||||||
t = TestConfig()
|
self.config.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
|
||||||
|
|
||||||
cache = LruCache(
|
cache = LruCache(
|
||||||
max_size=t.caches.event_cache_size,
|
max_size=self.config.event_cache_size,
|
||||||
apply_cache_factor_from_config=False,
|
apply_cache_factor_from_config=False,
|
||||||
)
|
)
|
||||||
add_resizable_cache("event_cache", cache_resize_callback=cache.set_cache_factor)
|
add_resizable_cache("event_cache", cache_resize_callback=cache.set_cache_factor)
|
||||||
|
|
|
@ -49,7 +49,7 @@ class ConfigLoadingTestCase(unittest.TestCase):
|
||||||
|
|
||||||
config = HomeServerConfig.load_config("", ["-c", self.file])
|
config = HomeServerConfig.load_config("", ["-c", self.file])
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
hasattr(config, "macaroon_secret_key"),
|
hasattr(config.key, "macaroon_secret_key"),
|
||||||
"Want config to have attr macaroon_secret_key",
|
"Want config to have attr macaroon_secret_key",
|
||||||
)
|
)
|
||||||
if len(config.key.macaroon_secret_key) < 5:
|
if len(config.key.macaroon_secret_key) < 5:
|
||||||
|
@ -60,7 +60,7 @@ class ConfigLoadingTestCase(unittest.TestCase):
|
||||||
|
|
||||||
config = HomeServerConfig.load_or_generate_config("", ["-c", self.file])
|
config = HomeServerConfig.load_or_generate_config("", ["-c", self.file])
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
hasattr(config, "macaroon_secret_key"),
|
hasattr(config.key, "macaroon_secret_key"),
|
||||||
"Want config to have attr macaroon_secret_key",
|
"Want config to have attr macaroon_secret_key",
|
||||||
)
|
)
|
||||||
if len(config.key.macaroon_secret_key) < 5:
|
if len(config.key.macaroon_secret_key) < 5:
|
||||||
|
@ -74,8 +74,12 @@ class ConfigLoadingTestCase(unittest.TestCase):
|
||||||
config1 = HomeServerConfig.load_config("", ["-c", self.file])
|
config1 = HomeServerConfig.load_config("", ["-c", self.file])
|
||||||
config2 = HomeServerConfig.load_config("", ["-c", self.file])
|
config2 = HomeServerConfig.load_config("", ["-c", self.file])
|
||||||
config3 = HomeServerConfig.load_or_generate_config("", ["-c", self.file])
|
config3 = HomeServerConfig.load_or_generate_config("", ["-c", self.file])
|
||||||
self.assertEqual(config1.macaroon_secret_key, config2.macaroon_secret_key)
|
self.assertEqual(
|
||||||
self.assertEqual(config1.macaroon_secret_key, config3.macaroon_secret_key)
|
config1.key.macaroon_secret_key, config2.key.macaroon_secret_key
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
config1.key.macaroon_secret_key, config3.key.macaroon_secret_key
|
||||||
|
)
|
||||||
|
|
||||||
def test_disable_registration(self):
|
def test_disable_registration(self):
|
||||||
self.generate_config()
|
self.generate_config()
|
||||||
|
|
|
@ -42,9 +42,9 @@ class TLSConfigTests(TestCase):
|
||||||
"""
|
"""
|
||||||
config = {}
|
config = {}
|
||||||
t = TestConfig()
|
t = TestConfig()
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
t.tls.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
|
|
||||||
self.assertEqual(t.federation_client_minimum_tls_version, "1")
|
self.assertEqual(t.tls.federation_client_minimum_tls_version, "1")
|
||||||
|
|
||||||
def test_tls_client_minimum_set(self):
|
def test_tls_client_minimum_set(self):
|
||||||
"""
|
"""
|
||||||
|
@ -52,29 +52,29 @@ class TLSConfigTests(TestCase):
|
||||||
"""
|
"""
|
||||||
config = {"federation_client_minimum_tls_version": 1}
|
config = {"federation_client_minimum_tls_version": 1}
|
||||||
t = TestConfig()
|
t = TestConfig()
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
t.tls.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
self.assertEqual(t.federation_client_minimum_tls_version, "1")
|
self.assertEqual(t.tls.federation_client_minimum_tls_version, "1")
|
||||||
|
|
||||||
config = {"federation_client_minimum_tls_version": 1.1}
|
config = {"federation_client_minimum_tls_version": 1.1}
|
||||||
t = TestConfig()
|
t = TestConfig()
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
t.tls.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
self.assertEqual(t.federation_client_minimum_tls_version, "1.1")
|
self.assertEqual(t.tls.federation_client_minimum_tls_version, "1.1")
|
||||||
|
|
||||||
config = {"federation_client_minimum_tls_version": 1.2}
|
config = {"federation_client_minimum_tls_version": 1.2}
|
||||||
t = TestConfig()
|
t = TestConfig()
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
t.tls.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
self.assertEqual(t.federation_client_minimum_tls_version, "1.2")
|
self.assertEqual(t.tls.federation_client_minimum_tls_version, "1.2")
|
||||||
|
|
||||||
# Also test a string version
|
# Also test a string version
|
||||||
config = {"federation_client_minimum_tls_version": "1"}
|
config = {"federation_client_minimum_tls_version": "1"}
|
||||||
t = TestConfig()
|
t = TestConfig()
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
t.tls.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
self.assertEqual(t.federation_client_minimum_tls_version, "1")
|
self.assertEqual(t.tls.federation_client_minimum_tls_version, "1")
|
||||||
|
|
||||||
config = {"federation_client_minimum_tls_version": "1.2"}
|
config = {"federation_client_minimum_tls_version": "1.2"}
|
||||||
t = TestConfig()
|
t = TestConfig()
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
t.tls.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
self.assertEqual(t.federation_client_minimum_tls_version, "1.2")
|
self.assertEqual(t.tls.federation_client_minimum_tls_version, "1.2")
|
||||||
|
|
||||||
def test_tls_client_minimum_1_point_3_missing(self):
|
def test_tls_client_minimum_1_point_3_missing(self):
|
||||||
"""
|
"""
|
||||||
|
@ -91,7 +91,7 @@ class TLSConfigTests(TestCase):
|
||||||
config = {"federation_client_minimum_tls_version": 1.3}
|
config = {"federation_client_minimum_tls_version": 1.3}
|
||||||
t = TestConfig()
|
t = TestConfig()
|
||||||
with self.assertRaises(ConfigError) as e:
|
with self.assertRaises(ConfigError) as e:
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
t.tls.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
e.exception.args[0],
|
e.exception.args[0],
|
||||||
(
|
(
|
||||||
|
@ -112,8 +112,8 @@ class TLSConfigTests(TestCase):
|
||||||
|
|
||||||
config = {"federation_client_minimum_tls_version": 1.3}
|
config = {"federation_client_minimum_tls_version": 1.3}
|
||||||
t = TestConfig()
|
t = TestConfig()
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
t.tls.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
self.assertEqual(t.federation_client_minimum_tls_version, "1.3")
|
self.assertEqual(t.tls.federation_client_minimum_tls_version, "1.3")
|
||||||
|
|
||||||
def test_tls_client_minimum_set_passed_through_1_2(self):
|
def test_tls_client_minimum_set_passed_through_1_2(self):
|
||||||
"""
|
"""
|
||||||
|
@ -121,7 +121,7 @@ class TLSConfigTests(TestCase):
|
||||||
"""
|
"""
|
||||||
config = {"federation_client_minimum_tls_version": 1.2}
|
config = {"federation_client_minimum_tls_version": 1.2}
|
||||||
t = TestConfig()
|
t = TestConfig()
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
t.tls.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
|
|
||||||
cf = FederationPolicyForHTTPS(t)
|
cf = FederationPolicyForHTTPS(t)
|
||||||
options = _get_ssl_context_options(cf._verify_ssl_context)
|
options = _get_ssl_context_options(cf._verify_ssl_context)
|
||||||
|
@ -137,7 +137,7 @@ class TLSConfigTests(TestCase):
|
||||||
"""
|
"""
|
||||||
config = {"federation_client_minimum_tls_version": 1}
|
config = {"federation_client_minimum_tls_version": 1}
|
||||||
t = TestConfig()
|
t = TestConfig()
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
t.tls.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
|
|
||||||
cf = FederationPolicyForHTTPS(t)
|
cf = FederationPolicyForHTTPS(t)
|
||||||
options = _get_ssl_context_options(cf._verify_ssl_context)
|
options = _get_ssl_context_options(cf._verify_ssl_context)
|
||||||
|
@ -159,7 +159,7 @@ class TLSConfigTests(TestCase):
|
||||||
}
|
}
|
||||||
t = TestConfig()
|
t = TestConfig()
|
||||||
e = self.assertRaises(
|
e = self.assertRaises(
|
||||||
ConfigError, t.read_config, config, config_dir_path="", data_dir_path=""
|
ConfigError, t.tls.read_config, config, config_dir_path="", data_dir_path=""
|
||||||
)
|
)
|
||||||
self.assertIn("IDNA domain names", str(e))
|
self.assertIn("IDNA domain names", str(e))
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ class TLSConfigTests(TestCase):
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
t = TestConfig()
|
t = TestConfig()
|
||||||
t.read_config(config, config_dir_path="", data_dir_path="")
|
t.tls.read_config(config, config_dir_path="", data_dir_path="")
|
||||||
|
|
||||||
cf = FederationPolicyForHTTPS(t)
|
cf = FederationPolicyForHTTPS(t)
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,7 @@ class ApplicationServiceTransactionStoreTestCase(unittest.TestCase):
|
||||||
self.db_pool = database._db_pool
|
self.db_pool = database._db_pool
|
||||||
self.engine = database.engine
|
self.engine = database.engine
|
||||||
|
|
||||||
db_config = hs.config.get_single_database()
|
db_config = hs.config.database.get_single_database()
|
||||||
self.store = TestTransactionStore(
|
self.store = TestTransactionStore(
|
||||||
database, make_conn(db_config, self.engine, "test"), hs
|
database, make_conn(db_config, self.engine, "test"), hs
|
||||||
)
|
)
|
||||||
|
|
|
@ -22,7 +22,7 @@ class SQLTransactionLimitTestCase(unittest.HomeserverTestCase):
|
||||||
return self.setup_test_homeserver(db_txn_limit=1000)
|
return self.setup_test_homeserver(db_txn_limit=1000)
|
||||||
|
|
||||||
def test_config(self):
|
def test_config(self):
|
||||||
db_config = self.hs.config.get_single_database()
|
db_config = self.hs.config.database.get_single_database()
|
||||||
self.assertEqual(db_config.config["txn_limit"], 1000)
|
self.assertEqual(db_config.config["txn_limit"], 1000)
|
||||||
|
|
||||||
def test_select(self):
|
def test_select(self):
|
||||||
|
|
Loading…
Reference in a new issue