diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-03-03 17:40:51 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-03-11 12:11:10 +0100 |
| commit | 12e7344fb8eb1d9070895184105a94dc96d4b2b4 (patch) | |
| tree | 6f01baedc1dfaf85358d518c623712cbee34ba19 | |
| parent | 93175648ddb1187e5f5a79b9c2fea0334f406fbb (diff) | |
| download | mullvadvpn-12e7344fb8eb1d9070895184105a94dc96d4b2b4.tar.xz mullvadvpn-12e7344fb8eb1d9070895184105a94dc96d4b2b4.zip | |
Beta program option in CLI
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/model/Settings.kt | 3 | ||||
| -rw-r--r-- | mullvad-cli/src/cmds/beta_program.rs | 54 | ||||
| -rw-r--r-- | mullvad-cli/src/cmds/mod.rs | 4 | ||||
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 16 | ||||
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 13 | ||||
| -rw-r--r-- | mullvad-ipc-client/src/lib.rs | 4 |
6 files changed, 93 insertions, 1 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/Settings.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/Settings.kt index 77a45e03a8..2b8aa28b53 100644 --- a/android/src/main/kotlin/net/mullvad/mullvadvpn/model/Settings.kt +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/model/Settings.kt @@ -4,5 +4,6 @@ data class Settings( var accountToken: String?, var relaySettings: RelaySettings, var allowLan: Boolean, - var autoConnect: Boolean + var autoConnect: Boolean, + var showBetaReleases: Boolean? ) diff --git a/mullvad-cli/src/cmds/beta_program.rs b/mullvad-cli/src/cmds/beta_program.rs new file mode 100644 index 0000000000..c63027ccfd --- /dev/null +++ b/mullvad-cli/src/cmds/beta_program.rs @@ -0,0 +1,54 @@ +use crate::{new_rpc_client, Command, Result}; +use clap::value_t_or_exit; + +pub struct BetaProgram; + +impl Command for BetaProgram { + fn name(&self) -> &'static str { + "beta-program" + } + + fn clap_subcommand(&self) -> clap::App<'static, 'static> { + clap::SubCommand::with_name(self.name()) + .about("Receive notifications about beta updates") + .setting(clap::AppSettings::SubcommandRequiredElseHelp) + .subcommand( + clap::SubCommand::with_name("set") + .about("Change beta notifications setting") + .arg( + clap::Arg::with_name("policy") + .required(true) + .possible_values(&["on", "off"]), + ), + ) + .subcommand(clap::SubCommand::with_name("get").about("Get beta notifications setting")) + } + + fn run(&self, matches: &clap::ArgMatches<'_>) -> Result<()> { + match matches.subcommand() { + ("get", Some(_)) => { + let mut rpc = new_rpc_client()?; + let settings = rpc.get_settings()?; + let enabled_str = if settings.get_show_beta_releases().unwrap_or(false) { + "on" + } else { + "off" + }; + println!("Beta program: {}", enabled_str); + Ok(()) + } + ("set", Some(matches)) => { + let enabled_str = value_t_or_exit!(matches.value_of("policy"), String); + + let mut rpc = new_rpc_client()?; + rpc.set_show_beta_releases(enabled_str == "on")?; + + println!("Beta program: {}", enabled_str); + Ok(()) + } + _ => { + unreachable!("unhandled comand"); + } + } + } +} diff --git a/mullvad-cli/src/cmds/mod.rs b/mullvad-cli/src/cmds/mod.rs index a26b64be74..699b62ba1d 100644 --- a/mullvad-cli/src/cmds/mod.rs +++ b/mullvad-cli/src/cmds/mod.rs @@ -7,6 +7,9 @@ pub use self::account::Account; mod auto_connect; pub use self::auto_connect::AutoConnect; +mod beta_program; +pub use self::beta_program::BetaProgram; + mod block_when_disconnected; pub use self::block_when_disconnected::BlockWhenDisconnected; @@ -45,6 +48,7 @@ pub fn get_commands() -> HashMap<&'static str, Box<dyn Command>> { let commands: Vec<Box<dyn Command>> = vec![ Box::new(Account), Box::new(AutoConnect), + Box::new(BetaProgram), Box::new(BlockWhenDisconnected), Box::new(Bridge), Box::new(Connect), diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index 8bc0988cc1..3f74e82df7 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -163,6 +163,8 @@ pub enum DaemonCommand { UpdateRelaySettings(oneshot::Sender<()>, RelaySettingsUpdate), /// Set the allow LAN setting. SetAllowLan(oneshot::Sender<()>, bool), + /// Set the beta program setting. + SetShowBetaReleases(oneshot::Sender<()>, bool), /// Set the block_when_disconnected setting. SetBlockWhenDisconnected(oneshot::Sender<()>, bool), /// Set the auto-connect setting. @@ -881,6 +883,7 @@ where } UpdateRelaySettings(tx, update) => self.on_update_relay_settings(tx, update), SetAllowLan(tx, allow_lan) => self.on_set_allow_lan(tx, allow_lan), + SetShowBetaReleases(tx, enabled) => self.on_set_show_beta_releases(tx, enabled), SetBlockWhenDisconnected(tx, block_when_disconnected) => { self.on_set_block_when_disconnected(tx, block_when_disconnected) } @@ -1290,6 +1293,19 @@ where } } + fn on_set_show_beta_releases(&mut self, tx: oneshot::Sender<()>, enabled: bool) { + let save_result = self.settings.set_show_beta_releases(enabled); + match save_result { + Ok(settings_changed) => { + Self::oneshot_send(tx, (), "set_show_beta_releases response"); + if settings_changed { + self.event_listener.notify_settings(self.settings.clone()); + } + } + Err(e) => error!("{}", e.display_chain_with_msg("Unable to save settings")), + } + } + fn on_set_block_when_disconnected( &mut self, tx: oneshot::Sender<()>, diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs index 8da3d4dabf..cf5d403e47 100644 --- a/mullvad-daemon/src/management_interface.rs +++ b/mullvad-daemon/src/management_interface.rs @@ -69,6 +69,10 @@ build_rpc_trait! { #[rpc(meta, name = "set_allow_lan")] fn set_allow_lan(&self, Self::Metadata, bool) -> BoxFuture<(), Error>; + /// Set whether to enable the beta program. + #[rpc(meta, name = "set_show_beta_releases")] + fn set_show_beta_releases(&self, Self::Metadata, bool) -> BoxFuture<(), Error>; + /// Set if the client should allow network communication when in the disconnected state. #[rpc(meta, name = "set_block_when_disconnected")] fn set_block_when_disconnected(&self, Self::Metadata, bool) -> BoxFuture<(), Error>; @@ -437,6 +441,15 @@ impl ManagementInterfaceApi for ManagementInterface { Box::new(future) } + fn set_show_beta_releases(&self, _: Self::Metadata, enabled: bool) -> BoxFuture<(), Error> { + log::debug!("set_show_beta_releases({})", enabled); + let (tx, rx) = sync::oneshot::channel(); + let future = self + .send_command_to_daemon(DaemonCommand::SetShowBetaReleases(tx, enabled)) + .and_then(|_| rx.map_err(|_| Error::internal_error())); + Box::new(future) + } + fn set_block_when_disconnected( &self, _: Self::Metadata, diff --git a/mullvad-ipc-client/src/lib.rs b/mullvad-ipc-client/src/lib.rs index ed55bc15d7..631dbd054d 100644 --- a/mullvad-ipc-client/src/lib.rs +++ b/mullvad-ipc-client/src/lib.rs @@ -123,6 +123,10 @@ impl DaemonRpcClient { self.call("set_allow_lan", &[allow_lan]) } + pub fn set_show_beta_releases(&mut self, enabled: bool) -> Result<()> { + self.call("set_show_beta_releases", &[enabled]) + } + pub fn set_block_when_disconnected(&mut self, block_when_disconnected: bool) -> Result<()> { self.call("set_block_when_disconnected", &[block_when_disconnected]) } |
