diff options
author | David Robertson <davidr@element.io> | 2023-03-01 18:32:24 +0000 |
---|---|---|
committer | David Robertson <davidr@element.io> | 2023-03-02 16:19:33 +0000 |
commit | 4acecc5ea0855da2cd78052a5d1074d689ae218f (patch) | |
tree | d7fb31e5f59c7e68f2444fb7ef54fd26b50963c4 | |
parent | Define new config (diff) | |
download | synapse-4acecc5ea0855da2cd78052a5d1074d689ae218f.tar.xz |
Parse new config
-rw-r--r-- | synapse/config/server.py | 1 | ||||
-rw-r--r-- | synapse/config/workers.py | 37 |
2 files changed, 37 insertions, 1 deletions
diff --git a/synapse/config/server.py b/synapse/config/server.py index 0e46b849cf..2222cc9f78 100644 --- a/synapse/config/server.py +++ b/synapse/config/server.py @@ -171,6 +171,7 @@ KNOWN_LISTENER_TYPES = { "http", "metrics", "manhole", + "outbound_federation_proxy", } KNOWN_RESOURCES = { diff --git a/synapse/config/workers.py b/synapse/config/workers.py index 2580660b6c..b79ce7ab5b 100644 --- a/synapse/config/workers.py +++ b/synapse/config/workers.py @@ -15,7 +15,7 @@ import argparse import logging -from typing import Any, Dict, List, Union +from typing import Any, Dict, List, Mapping, Union import attr @@ -276,6 +276,8 @@ class WorkerConfig(Config): new_option_name="update_user_directory_from_worker", ) + self.outbound_fed_restricted_to = self._get_outbound_fed_restrictions(config) + def _should_this_worker_perform_duty( self, config: Dict[str, Any], @@ -426,6 +428,39 @@ class WorkerConfig(Config): return worker_instances + def _get_outbound_fed_restrictions( + self, config: Dict[str, Any] + ) -> Mapping[str, InstanceLocationConfig]: + proxied_via = config.get("outbound_federation_proxied_via", {}) + if not isinstance(proxied_via, dict): + raise ConfigError( + f"outbound_federation_restricted_to should be a mapping, " + f"not {type(proxied_via)}" + ) + + for instance_name, listener_location in proxied_via.items(): + if "host" not in listener_location: + raise ConfigError( + f"outbound_federation_restricted_to/{instance_name} is missing a host" + ) + if "port" not in listener_location: + raise ConfigError( + f"outbound_federation_restricted_to/{instance_name} is missing a port" + ) + if not isinstance(listener_location["host"], str): + raise ConfigError( + f"outbound_federation_restricted_to/{instance_name} should be a string" + ) + if not isinstance(listener_location["port"], int): + raise ConfigError( + f"outbound_federation_restricted_to/{instance_name} should be an integer" + ) + + return { + instance_name: InstanceLocationConfig(listener["host"], listener["port"]) + for instance_name, listener in proxied_via.items() + } + def read_arguments(self, args: argparse.Namespace) -> None: # We support a bunch of command line arguments that override options in # the config. A lot of these options have a worker_* prefix when running |