summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2023-11-09 15:18:43 +0100
committerDavid Lönnhager <david.l@mullvad.net>2023-11-13 10:54:42 +0100
commit14968821c3a0dda206833954db49d3cfed27946f (patch)
treebd5594237b34aee52714cc667424af5fc9257c50
parent1d4b66058343a9ed93d253e742e5e517fea60ddf (diff)
downloadmullvadvpn-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.rs7
-rw-r--r--mullvad-cli/src/cmds/relay.rs55
-rw-r--r--mullvad-cli/src/cmds/reset.rs2
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?;