diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-11-09 15:18:43 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-11-13 10:54:42 +0100 |
| commit | 14968821c3a0dda206833954db49d3cfed27946f (patch) | |
| tree | bd5594237b34aee52714cc667424af5fc9257c50 | |
| parent | 1d4b66058343a9ed93d253e742e5e517fea60ddf (diff) | |
| download | mullvadvpn-14968821c3a0dda206833954db49d3cfed27946f.tar.xz mullvadvpn-14968821c3a0dda206833954db49d3cfed27946f.zip | |
Warn if setting relay overrides for non-existent hostname in the CLI
| -rw-r--r-- | mullvad-cli/src/cmds/mod.rs | 7 | ||||
| -rw-r--r-- | mullvad-cli/src/cmds/relay.rs | 55 | ||||
| -rw-r--r-- | mullvad-cli/src/cmds/reset.rs | 2 |
3 files changed, 45 insertions, 19 deletions
diff --git a/mullvad-cli/src/cmds/mod.rs b/mullvad-cli/src/cmds/mod.rs index 9001bcf70d..43d224233e 100644 --- a/mullvad-cli/src/cmds/mod.rs +++ b/mullvad-cli/src/cmds/mod.rs @@ -83,7 +83,12 @@ impl std::fmt::Display for BooleanOption { } async fn receive_confirmation(msg: &'static str, default: bool) -> bool { - println!("{}", msg); + let helper_str = match default { + true => "[Y/n]", + false => "[y/N]", + }; + + println!("{msg} {helper_str}"); tokio::task::spawn_blocking(move || loop { let mut buf = String::new(); diff --git a/mullvad-cli/src/cmds/relay.rs b/mullvad-cli/src/cmds/relay.rs index 69d2a93080..273b6f3395 100644 --- a/mullvad-cli/src/cmds/relay.rs +++ b/mullvad-cli/src/cmds/relay.rs @@ -716,10 +716,18 @@ impl Relay { async fn update_override( hostname: &str, update_fn: impl FnOnce(&mut RelayOverride), + warn_non_existent_hostname: bool, ) -> Result<()> { let mut rpc = MullvadProxyClient::new().await?; let settings = rpc.get_settings().await?; + if warn_non_existent_hostname { + let countries = get_filtered_relays_with_client(&mut rpc).await?; + if find_relay_by_hostname(&countries, hostname).is_none() { + eprintln!("Warning: Setting overrides for an unrecognized server"); + } + } + let mut relay_overrides = settings.relay_overrides; let mut element = relay_overrides .iter() @@ -815,39 +823,44 @@ impl Relay { } OverrideCommands::Set(set_cmds) => match set_cmds { OverrideSetCommands::Ipv4 { hostname, address } => { - Self::update_override(&hostname, |relay_override| { - relay_override.ipv4_addr_in = Some(address) - }) + Self::update_override( + &hostname, + |relay_override| relay_override.ipv4_addr_in = Some(address), + true, + ) .await?; } OverrideSetCommands::Ipv6 { hostname, address } => { - Self::update_override(&hostname, |relay_override| { - relay_override.ipv6_addr_in = Some(address) - }) + Self::update_override( + &hostname, + |relay_override| relay_override.ipv6_addr_in = Some(address), + true, + ) .await?; } }, OverrideCommands::Unset(cmds) => match cmds { OverrideUnsetCommands::Ipv4 { hostname } => { - Self::update_override(&hostname, |relay_override| { - let _ = relay_override.ipv4_addr_in.take(); - }) + Self::update_override( + &hostname, + |relay_override| relay_override.ipv4_addr_in = None, + false, + ) .await?; } OverrideUnsetCommands::Ipv6 { hostname } => { - Self::update_override(&hostname, |relay_override| { - let _ = relay_override.ipv6_addr_in.take(); - }) + Self::update_override( + &hostname, + |relay_override| relay_override.ipv6_addr_in = None, + false, + ) .await?; } }, OverrideCommands::ClearAll { confirm } => { if confirm - || receive_confirmation( - "Are you sure you want to clear all overrides? [Y/n]", - true, - ) - .await + || receive_confirmation("Are you sure you want to clear all overrides?", true) + .await { let mut rpc = MullvadProxyClient::new().await?; rpc.clear_all_relay_overrides().await?; @@ -909,8 +922,16 @@ pub fn find_relay_by_hostname( }) } +/// Return a list of all active non-bridge relays pub async fn get_filtered_relays() -> Result<Vec<RelayListCountry>> { let mut rpc = MullvadProxyClient::new().await?; + get_filtered_relays_with_client(&mut rpc).await +} + +/// Return a list of all active non-bridge relays +async fn get_filtered_relays_with_client( + rpc: &mut MullvadProxyClient, +) -> Result<Vec<RelayListCountry>> { let relay_list = rpc.get_relay_locations().await?; let mut countries = vec![]; diff --git a/mullvad-cli/src/cmds/reset.rs b/mullvad-cli/src/cmds/reset.rs index 74c5df34f2..88005c4631 100644 --- a/mullvad-cli/src/cmds/reset.rs +++ b/mullvad-cli/src/cmds/reset.rs @@ -3,7 +3,7 @@ use anyhow::Result; use mullvad_management_interface::MullvadProxyClient; pub async fn handle() -> Result<()> { - if !receive_confirmation("Are you sure you want to disconnect, log out, delete all settings, logs and cache files for the Mullvad VPN system service? [y/N]", false).await { + if !receive_confirmation("Are you sure you want to disconnect, log out, delete all settings, logs and cache files for the Mullvad VPN system service?", false).await { return Ok(()); } let mut rpc = MullvadProxyClient::new().await?; |
