summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-26 05:31:10 +0100
committertv <tv@krebsco.de>2026-10-26 05:31:10 +0100
commitc14ee0a0aa4e897a2c9fd7706d3df2255da12a1a (patch)
treebd7caf24c99469ac3b4e0c03e5ffc4747c935d8b /src
parentaf53e0dee3e1c38c907b92733239b1cca448e0b0 (diff)
private mycelium needs both key and name
Diffstat (limited to 'src')
-rw-r--r--src/config/mod.rs8
-rw-r--r--src/main.rs7
-rw-r--r--src/transport/mycelium/daemon.rs19
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)