summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-03-03 17:40:51 +0100
committerDavid Lönnhager <david.l@mullvad.net>2020-03-11 12:11:10 +0100
commit12e7344fb8eb1d9070895184105a94dc96d4b2b4 (patch)
tree6f01baedc1dfaf85358d518c623712cbee34ba19
parent93175648ddb1187e5f5a79b9c2fea0334f406fbb (diff)
downloadmullvadvpn-12e7344fb8eb1d9070895184105a94dc96d4b2b4.tar.xz
mullvadvpn-12e7344fb8eb1d9070895184105a94dc96d4b2b4.zip
Beta program option in CLI
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/model/Settings.kt3
-rw-r--r--mullvad-cli/src/cmds/beta_program.rs54
-rw-r--r--mullvad-cli/src/cmds/mod.rs4
-rw-r--r--mullvad-daemon/src/lib.rs16
-rw-r--r--mullvad-daemon/src/management_interface.rs13
-rw-r--r--mullvad-ipc-client/src/lib.rs4
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])
}