diff options
| author | tv <tv@krebsco.de> | 2026-10-26 05:31:10 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-26 05:31:10 +0100 |
| commit | c14ee0a0aa4e897a2c9fd7706d3df2255da12a1a (patch) | |
| tree | bd7caf24c99469ac3b4e0c03e5ffc4747c935d8b /src | |
| parent | af53e0dee3e1c38c907b92733239b1cca448e0b0 (diff) | |
private mycelium needs both key and name
Diffstat (limited to 'src')
| -rw-r--r-- | src/config/mod.rs | 8 | ||||
| -rw-r--r-- | src/main.rs | 7 | ||||
| -rw-r--r-- | src/transport/mycelium/daemon.rs | 19 |
3 files changed, 19 insertions, 15 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs index b8a2ba0..4222212 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -227,14 +227,14 @@ pub(crate) const OPTIONS: &[OptionSpec] = &[ Kind::Text, "PATH", None, - "Key of a private Mycelium network for the supervised daemon.", + "Key of a private Mycelium network for the supervised daemon (with mycelium-network-name).", ), option( "mycelium-network-name", Kind::Text, "NAME", None, - "Name of that private Mycelium network.", + "Name of that private Mycelium network (with mycelium-network-key-file).", ), option( "mycelium-tcp-listen-port", @@ -378,6 +378,10 @@ impl Settings { ); } } + // A private network has both; one alone would be ignored or invented. + if self.mycelium_network_key_file.is_some() != self.mycelium_network_name.is_some() { + bail!("mycelium-network-key-file and mycelium-network-name go together"); + } crate::force::Force::parse(self.force.iter().map(String::as_str), FORCE) .map_err(|reason| anyhow!("force: {reason}"))?; // Contradictions, not overrides: an error wherever the options come from. diff --git a/src/main.rs b/src/main.rs index 5ae2c50..99ee1b9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -62,17 +62,14 @@ async fn main() -> Result<()> { let stop = watch_for_shutdown().context("Installing signal handlers")?; let mycelium_setup = { - let mut spawn_config = MyceliumSpawnConfig { + let spawn_config = MyceliumSpawnConfig { rest_url_opt: args.mycelium_rest_url(), key_file_opt: args.mycelium_key_file.clone(), network_key_file: args.mycelium_network_key_file.clone(), + network_name: args.mycelium_network_name.clone(), tcp_port: args.mycelium_tcp_listen_port, peers: args.mycelium_peers.clone(), - ..Default::default() }; - if let Some(net_name) = args.mycelium_network_name.clone() { - spawn_config.network_name = net_name; - } tokio::select! { setup = MyceliumSetup::bootstrap(spawn_config) => setup?, _ = stopped(stop.clone()) => return Ok(()), diff --git a/src/transport/mycelium/daemon.rs b/src/transport/mycelium/daemon.rs index 80b6be5..f194fca 100644 --- a/src/transport/mycelium/daemon.rs +++ b/src/transport/mycelium/daemon.rs @@ -32,7 +32,8 @@ pub struct MyceliumSpawnConfig { pub rest_url_opt: Option<Url>, pub key_file_opt: Option<PathBuf>, pub network_key_file: Option<PathBuf>, - pub network_name: String, + /// Set together with `network_key_file` (`Settings::check`). + pub network_name: Option<String>, pub tcp_port: Option<u16>, pub peers: Vec<String>, } @@ -43,7 +44,7 @@ impl Default for MyceliumSpawnConfig { rest_url_opt: None, key_file_opt: None, network_key_file: None, - network_name: "something".to_string(), + network_name: None, tcp_port: None, peers: vec!["tls://127.0.0.1:9651".to_string()], } @@ -88,12 +89,14 @@ impl MyceliumSetup { } }; - let private_net_config = config - .network_key_file - .map(|net_key_path| PrivateNetworkConfig { - name: config.network_name.clone(), - key: KeySource::Path(net_key_path), - }); + let private_net_config = + config + .network_key_file + .zip(config.network_name) + .map(|(net_key_path, name)| PrivateNetworkConfig { + name, + key: KeySource::Path(net_key_path), + }); let supervised_node = SupervisedMycelium::spawn(key, private_net_config, config.tcp_port, &config.peers) |
