Loading lib/chutney/TorNet.py +9 −3 Original line number Diff line number Diff line Loading @@ -375,7 +375,13 @@ class Node(object): @property def hs_hostname(self) -> Option[str]: """Generated hostname for this hidden service""" """Generated hostname for this hidden service. Should be available (non-None) if the node is configured as a hidden service (`Node.is_hs`), after the Node's builder's `preConfig` has been called (which the chutney `Network` does as part of this node's `config_phase`). """ return self._builder.get_hs_hostname() ###### Loading Loading @@ -493,8 +499,8 @@ class NodeBuilder(ABC): def get_hs_hostname(self) -> Option[str]: """Return the hidden service hostname, if any. Returns `Option(None)` if there is no hidden service for this node, or if the hostname isn't available yet. Should be available (non-None) if the node is configured as a hidden service (`Node.is_hs`), after `preConfig` has been called. """ ... Loading lib/chutney/arti/builder.py +23 −9 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ class LocalArtiNodeBuilder(TorNet.NodeBuilder): def _info_log_path(self) -> Path: return self._node.dir.joinpath("info.log") def _gen_config_str(self, net: TorNet.Network) -> str: def _gen_config(self, net: TorNet.Network) -> dict[str, object]: if self._node._config.exit: raise ChutneyInternalError("Arti exit unimplemented") if self._node._config.authority: Loading Loading @@ -117,15 +117,32 @@ class LocalArtiNodeBuilder(TorNet.NodeBuilder): bridges = check_type(config.setdefault("bridges", {}), dict) bridges["enabled"] = bool(self._node._config.bridgeclient) return tomli_w.dumps(config) return config @override def checkConfig(self, net: TorNet.Network) -> None: self._gen_config_str(net) # Just check that it doesn't fail to generate. self._gen_config(net) def _early_config_path(self) -> Path: return self._node.dir.joinpath("early_config.toml") def _generate_early_config(self, net: TorNet.Network) -> None: early_config: dict[str, object] = self._gen_config(net) early_config_str: str = tomli_w.dumps(early_config) with self._early_config_path().open("w") as f: f.write( "# Early version of config that doesn't depend on other node configs.\n" ) f.write( "# Used e.g. when running arti during configuration to generate keys.\n" ) f.write(early_config_str) @override def preConfig(self, net: TorNet.Network) -> None: pass mkdir_p(self._node.dir) self._generate_early_config(net) @override def get_fingerprint(self) -> Option[str]: Loading @@ -137,10 +154,7 @@ class LocalArtiNodeBuilder(TorNet.NodeBuilder): @override def config(self, net: TorNet.Network) -> None: config_str = self._gen_config_str(net) mkdir_p(self._node.dir) with self._node.torrc_path.open("w") as f: f.write(config_str) self._node.torrc_path.write_text(tomli_w.dumps(self._gen_config(net))) @override def postConfig(self, net: TorNet.Network) -> None: Loading Loading @@ -178,7 +192,7 @@ class LocalArtiNodeBuilder(TorNet.NodeBuilder): # stdout along with the actual output we want. # <https://gitlab.torproject.org/tpo/core/arti/-/issues/2024> "--log-level=", f"--config={str(self._node.torrc_path)}", f"--config={str(self._early_config_path())}", "hss", f"--nickname={_HS_NICKNAME}", "onion-address", Loading lib/chutney/tor/builder.py +1 −2 Original line number Diff line number Diff line Loading @@ -234,6 +234,7 @@ class LocalNodeBuilder(TorNet.NodeBuilder): self._genRouterKey() if self._node._config.hs: self._makeHiddenServiceDir() self._generate_hs_state() if net.family_ids: for fid in self._node._config.families: shutil.copy( Loading Loading @@ -285,8 +286,6 @@ class LocalNodeBuilder(TorNet.NodeBuilder): @override def config(self, net: TorNet.Network) -> None: self._createTorrcFile() if self._node._config.hs: self._generate_hs_state() @override def postConfig(self, net: TorNet.Network) -> None: Loading Loading
lib/chutney/TorNet.py +9 −3 Original line number Diff line number Diff line Loading @@ -375,7 +375,13 @@ class Node(object): @property def hs_hostname(self) -> Option[str]: """Generated hostname for this hidden service""" """Generated hostname for this hidden service. Should be available (non-None) if the node is configured as a hidden service (`Node.is_hs`), after the Node's builder's `preConfig` has been called (which the chutney `Network` does as part of this node's `config_phase`). """ return self._builder.get_hs_hostname() ###### Loading Loading @@ -493,8 +499,8 @@ class NodeBuilder(ABC): def get_hs_hostname(self) -> Option[str]: """Return the hidden service hostname, if any. Returns `Option(None)` if there is no hidden service for this node, or if the hostname isn't available yet. Should be available (non-None) if the node is configured as a hidden service (`Node.is_hs`), after `preConfig` has been called. """ ... Loading
lib/chutney/arti/builder.py +23 −9 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ class LocalArtiNodeBuilder(TorNet.NodeBuilder): def _info_log_path(self) -> Path: return self._node.dir.joinpath("info.log") def _gen_config_str(self, net: TorNet.Network) -> str: def _gen_config(self, net: TorNet.Network) -> dict[str, object]: if self._node._config.exit: raise ChutneyInternalError("Arti exit unimplemented") if self._node._config.authority: Loading Loading @@ -117,15 +117,32 @@ class LocalArtiNodeBuilder(TorNet.NodeBuilder): bridges = check_type(config.setdefault("bridges", {}), dict) bridges["enabled"] = bool(self._node._config.bridgeclient) return tomli_w.dumps(config) return config @override def checkConfig(self, net: TorNet.Network) -> None: self._gen_config_str(net) # Just check that it doesn't fail to generate. self._gen_config(net) def _early_config_path(self) -> Path: return self._node.dir.joinpath("early_config.toml") def _generate_early_config(self, net: TorNet.Network) -> None: early_config: dict[str, object] = self._gen_config(net) early_config_str: str = tomli_w.dumps(early_config) with self._early_config_path().open("w") as f: f.write( "# Early version of config that doesn't depend on other node configs.\n" ) f.write( "# Used e.g. when running arti during configuration to generate keys.\n" ) f.write(early_config_str) @override def preConfig(self, net: TorNet.Network) -> None: pass mkdir_p(self._node.dir) self._generate_early_config(net) @override def get_fingerprint(self) -> Option[str]: Loading @@ -137,10 +154,7 @@ class LocalArtiNodeBuilder(TorNet.NodeBuilder): @override def config(self, net: TorNet.Network) -> None: config_str = self._gen_config_str(net) mkdir_p(self._node.dir) with self._node.torrc_path.open("w") as f: f.write(config_str) self._node.torrc_path.write_text(tomli_w.dumps(self._gen_config(net))) @override def postConfig(self, net: TorNet.Network) -> None: Loading Loading @@ -178,7 +192,7 @@ class LocalArtiNodeBuilder(TorNet.NodeBuilder): # stdout along with the actual output we want. # <https://gitlab.torproject.org/tpo/core/arti/-/issues/2024> "--log-level=", f"--config={str(self._node.torrc_path)}", f"--config={str(self._early_config_path())}", "hss", f"--nickname={_HS_NICKNAME}", "onion-address", Loading
lib/chutney/tor/builder.py +1 −2 Original line number Diff line number Diff line Loading @@ -234,6 +234,7 @@ class LocalNodeBuilder(TorNet.NodeBuilder): self._genRouterKey() if self._node._config.hs: self._makeHiddenServiceDir() self._generate_hs_state() if net.family_ids: for fid in self._node._config.families: shutil.copy( Loading Loading @@ -285,8 +286,6 @@ class LocalNodeBuilder(TorNet.NodeBuilder): @override def config(self, net: TorNet.Network) -> None: self._createTorrcFile() if self._node._config.hs: self._generate_hs_state() @override def postConfig(self, net: TorNet.Network) -> None: Loading