From 82e3932aafff6493808f12a05afb6bbd9f142d9d Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Fri, 11 Oct 2024 10:35:46 +0200 Subject: [PATCH] network: add oneserver/auto_connect both enabled checks, avoid connecting to random/multiple servers if oneserver is enabled. --- electrum/network.py | 14 +++++++++++++- electrum/wizard.py | 2 -- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/electrum/network.py b/electrum/network.py index 1acc7e7f9..4a5243744 100644 --- a/electrum/network.py +++ b/electrum/network.py @@ -601,6 +601,13 @@ class Network(Logger, NetworkRetryManager[ServerAddr]): def _init_parameters_from_config(self) -> None: dns_hacks.configure_dns_resolver() self.auto_connect = self.config.NETWORK_AUTO_CONNECT + if self.auto_connect and self.config.NETWORK_ONESERVER: + # enabling both oneserver and auto_connect doesn't really make sense + # assume oneserver is enabled for privacy reasons, disable auto_connect and assume server is unpredictable + self.logger.warning(f'both "oneserver" and "auto_connect" options enabled, disabling "auto_connect" and resetting "server".') + self.config.NETWORK_SERVER = "" # let _set_default_server set harmless default (localhost) + self.auto_connect = False + self._set_default_server() self._set_proxy(ProxySettings.from_config(self.config)) self._maybe_set_oneserver() @@ -722,7 +729,12 @@ class Network(Logger, NetworkRetryManager[ServerAddr]): self.logger.warning(f'failed to parse server-string ({server!r}); falling back to localhost:1:s.') self.default_server = ServerAddr.from_str("localhost:1:s") else: - self.default_server = pick_random_server(allowed_protocols=self._allowed_protocols) + # if oneserver is enabled but no server specified then don't pick a random server + if self.config.NETWORK_ONESERVER: + self.logger.warning(f'"oneserver" option enabled, but no "server" defined; falling back to localhost:1:s.') + self.default_server = ServerAddr.from_str("localhost:1:s") + else: + self.default_server = pick_random_server(allowed_protocols=self._allowed_protocols) assert isinstance(self.default_server, ServerAddr), f"invalid type for default_server: {self.default_server!r}" def _set_proxy(self, proxy: ProxySettings): diff --git a/electrum/wizard.py b/electrum/wizard.py index 0fae46537..9f9dc7676 100644 --- a/electrum/wizard.py +++ b/electrum/wizard.py @@ -753,8 +753,6 @@ class ServerConnectWizard(AbstractWizard): raise Exception('failed to parse server %s' % wizard_data['server']) except Exception: return - else: - oneserver = False net_params = net_params._replace(server=server, auto_connect=wizard_data['autoconnect'], oneserver=oneserver) self._daemon.network.run_from_another_thread(self._daemon.network.set_parameters(net_params))