diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-10-22 09:52:19 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-10-22 09:52:19 +0200 |
| commit | d88d5f32768fe14c7aa6276e61104e66dd05d1fe (patch) | |
| tree | 8747ab07d076a5927c9144bb8123a63be0e0315b /mullvad-cli/src | |
| parent | 82d224e656001e23f674db58b9408dca0ff4ed98 (diff) | |
| parent | eb7a77321c818e64325c6d328cb45d026bf56b21 (diff) | |
| download | mullvadvpn-d88d5f32768fe14c7aa6276e61104e66dd05d1fe.tar.xz mullvadvpn-d88d5f32768fe14c7aa6276e61104e66dd05d1fe.zip | |
Merge branch 'win-custom-dns'
Diffstat (limited to 'mullvad-cli/src')
| -rw-r--r-- | mullvad-cli/src/cmds/custom_dns.rs | 74 | ||||
| -rw-r--r-- | mullvad-cli/src/cmds/mod.rs | 5 |
2 files changed, 79 insertions, 0 deletions
diff --git a/mullvad-cli/src/cmds/custom_dns.rs b/mullvad-cli/src/cmds/custom_dns.rs new file mode 100644 index 0000000000..1ae196f47c --- /dev/null +++ b/mullvad-cli/src/cmds/custom_dns.rs @@ -0,0 +1,74 @@ +use crate::{new_rpc_client, Command, Result}; +use mullvad_management_interface::types; + +pub struct CustomDns; + +#[mullvad_management_interface::async_trait] +impl Command for CustomDns { + fn name(&self) -> &'static str { + "custom-dns" + } + + fn clap_subcommand(&self) -> clap::App<'static, 'static> { + clap::SubCommand::with_name(self.name()) + .about("Configure custom DNS servers to use when connected") + .setting(clap::AppSettings::SubcommandRequiredElseHelp) + .subcommand( + clap::SubCommand::with_name("set") + .about("Change custom DNS setting") + .arg( + clap::Arg::with_name("servers") + .multiple(true) + .required(false), + ), + ) + .subcommand( + clap::SubCommand::with_name("get").about("Display the current custom DNS setting"), + ) + } + + async fn run(&self, matches: &clap::ArgMatches<'_>) -> Result<()> { + if let Some(set_matches) = matches.subcommand_matches("set") { + self.set(set_matches.values_of_lossy("servers")).await + } else if let Some(_matches) = matches.subcommand_matches("get") { + self.get().await + } else { + unreachable!("No custom-dns command given"); + } + } +} + +impl CustomDns { + async fn set(&self, servers: Option<Vec<String>>) -> Result<()> { + let mut rpc = new_rpc_client().await?; + rpc.set_custom_dns(types::CustomDns { + addresses: servers.unwrap_or_default(), + }) + .await?; + println!("Updated custom DNS settings"); + Ok(()) + } + + async fn get(&self) -> Result<()> { + let mut rpc = new_rpc_client().await?; + let custom_dns = rpc + .get_settings(()) + .await? + .into_inner() + .tunnel_options + .unwrap() + .generic + .unwrap() + .custom_dns; + match custom_dns { + None => println!("No DNS servers are configured"), + Some(types::CustomDns { addresses }) => { + println!("Custom DNS servers:"); + for server in &addresses { + println!("\t{}", server); + } + } + } + Ok(()) + } +} diff --git a/mullvad-cli/src/cmds/mod.rs b/mullvad-cli/src/cmds/mod.rs index 9cdefd19c5..d542eb7844 100644 --- a/mullvad-cli/src/cmds/mod.rs +++ b/mullvad-cli/src/cmds/mod.rs @@ -25,6 +25,9 @@ pub use self::disconnect::Disconnect; mod lan; pub use self::lan::Lan; +mod custom_dns; +pub use self::custom_dns::CustomDns; + mod reconnect; pub use self::reconnect::Reconnect; @@ -60,6 +63,8 @@ pub fn get_commands() -> HashMap<&'static str, Box<dyn Command>> { Box::new(Disconnect), Box::new(Reconnect), Box::new(Lan), + #[cfg(windows)] + Box::new(CustomDns), Box::new(Relay), Box::new(Reset), #[cfg(target_os = "linux")] |
