summaryrefslogtreecommitdiffhomepage
path: root/mullvad-daemon/src/management_interface.rs
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2023-11-17 11:10:16 +0100
committerDavid Lönnhager <david.l@mullvad.net>2023-11-17 11:10:16 +0100
commitd798fd5872e311fffeccd9930a45fdb2ed7eb2ea (patch)
treee01cb6d76e8b3ee10c530bb85767b533fa1bebc3 /mullvad-daemon/src/management_interface.rs
parent0a82036e2b49dbd42819d36860b00289b3219a6b (diff)
parentb83735c6a569baecd2272d0a78721fe7998a47ce (diff)
downloadmullvadvpn-d798fd5872e311fffeccd9930a45fdb2ed7eb2ea.tar.xz
mullvadvpn-d798fd5872e311fffeccd9930a45fdb2ed7eb2ea.zip
Merge branch 'add-settings-patching' into main
Diffstat (limited to 'mullvad-daemon/src/management_interface.rs')
-rw-r--r--mullvad-daemon/src/management_interface.rs128
1 files changed, 44 insertions, 84 deletions
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs
index e67a02117c..f042a923e5 100644
--- a/mullvad-daemon/src/management_interface.rs
+++ b/mullvad-daemon/src/management_interface.rs
@@ -1,4 +1,4 @@
-use crate::{account_history, device, settings, DaemonCommand, DaemonCommandSender, EventListener};
+use crate::{account_history, device, DaemonCommand, DaemonCommandSender, EventListener};
use futures::{
channel::{mpsc, oneshot},
StreamExt,
@@ -177,10 +177,8 @@ impl ManagementService for ManagementServiceImpl {
let message = DaemonCommand::SetRelaySettings(tx, constraints_update);
self.send_command_to_daemon(message)?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn get_relay_locations(&self, _: Request<()>) -> ServiceResult<types::RelayList> {
@@ -215,10 +213,8 @@ impl ManagementService for ManagementServiceImpl {
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetBridgeSettings(tx, settings))?;
- let settings_result = self.wait_for_result(rx).await?;
- settings_result
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn set_obfuscation_settings(
@@ -230,10 +226,8 @@ impl ManagementService for ManagementServiceImpl {
log::debug!("set_obfuscation_settings({:?})", settings);
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetObfuscationSettings(tx, settings))?;
- let settings_result = self.wait_for_result(rx).await?;
- settings_result
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn set_bridge_state(&self, request: Request<types::BridgeState>) -> ServiceResult<()> {
@@ -243,10 +237,8 @@ impl ManagementService for ManagementServiceImpl {
log::debug!("set_bridge_state({:?})", bridge_state);
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetBridgeState(tx, bridge_state))?;
- let settings_result = self.wait_for_result(rx).await?;
- settings_result
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
// Settings
@@ -266,10 +258,8 @@ impl ManagementService for ManagementServiceImpl {
log::debug!("set_allow_lan({})", allow_lan);
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetAllowLan(tx, allow_lan))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn set_show_beta_releases(&self, request: Request<bool>) -> ServiceResult<()> {
@@ -277,10 +267,8 @@ impl ManagementService for ManagementServiceImpl {
log::debug!("set_show_beta_releases({})", enabled);
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetShowBetaReleases(tx, enabled))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn set_block_when_disconnected(&self, request: Request<bool>) -> ServiceResult<()> {
@@ -291,10 +279,8 @@ impl ManagementService for ManagementServiceImpl {
tx,
block_when_disconnected,
))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn set_auto_connect(&self, request: Request<bool>) -> ServiceResult<()> {
@@ -302,10 +288,8 @@ impl ManagementService for ManagementServiceImpl {
log::debug!("set_auto_connect({})", auto_connect);
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetAutoConnect(tx, auto_connect))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn set_openvpn_mssfix(&self, request: Request<u32>) -> ServiceResult<()> {
@@ -318,10 +302,8 @@ impl ManagementService for ManagementServiceImpl {
log::debug!("set_openvpn_mssfix({:?})", mssfix);
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetOpenVpnMssfix(tx, mssfix))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn set_wireguard_mtu(&self, request: Request<u32>) -> ServiceResult<()> {
@@ -330,10 +312,8 @@ impl ManagementService for ManagementServiceImpl {
log::debug!("set_wireguard_mtu({:?})", mtu);
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetWireguardMtu(tx, mtu))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn set_enable_ipv6(&self, request: Request<bool>) -> ServiceResult<()> {
@@ -341,10 +321,8 @@ impl ManagementService for ManagementServiceImpl {
log::debug!("set_enable_ipv6({})", enable_ipv6);
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetEnableIpv6(tx, enable_ipv6))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn set_quantum_resistant_tunnel(
@@ -357,10 +335,8 @@ impl ManagementService for ManagementServiceImpl {
log::debug!("set_quantum_resistant_tunnel({state:?})");
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetQuantumResistantTunnel(tx, state))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
#[cfg(not(target_os = "android"))]
@@ -370,10 +346,8 @@ impl ManagementService for ManagementServiceImpl {
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetDnsOptions(tx, options))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
#[cfg(target_os = "android")]
@@ -390,20 +364,16 @@ impl ManagementService for ManagementServiceImpl {
log::debug!("set_relay_override");
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetRelayOverride(tx, relay_override))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn clear_all_relay_overrides(&self, _: Request<()>) -> ServiceResult<()> {
log::debug!("clear_all_relay_overrides");
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::ClearAllRelayOverrides(tx))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
// Account management
@@ -571,20 +541,16 @@ impl ManagementService for ManagementServiceImpl {
tx,
Some(interval),
))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn reset_wireguard_rotation_interval(&self, _: Request<()>) -> ServiceResult<()> {
log::debug!("reset_wireguard_rotation_interval");
let (tx, rx) = oneshot::channel();
self.send_command_to_daemon(DaemonCommand::SetWireguardRotationInterval(tx, None))?;
- self.wait_for_result(rx)
- .await?
- .map(Response::new)
- .map_err(map_settings_error)
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
}
async fn rotate_wireguard_key(&self, _: Request<()>) -> ServiceResult<()> {
@@ -929,6 +895,14 @@ impl ManagementService for ManagementServiceImpl {
async fn check_volumes(&self, _: Request<()>) -> ServiceResult<()> {
Ok(Response::new(()))
}
+
+ async fn apply_json_settings(&self, blob: Request<String>) -> ServiceResult<()> {
+ log::debug!("apply_json_settings");
+ let (tx, rx) = oneshot::channel();
+ self.send_command_to_daemon(DaemonCommand::ApplyJsonSettings(tx, blob.into_inner()))?;
+ self.wait_for_result(rx).await??;
+ Ok(Response::new(()))
+ }
}
impl ManagementServiceImpl {
@@ -1061,7 +1035,7 @@ fn map_daemon_error(error: crate::Error) -> Status {
match error {
DaemonError::RestError(error) => map_rest_error(&error),
- DaemonError::SettingsError(error) => map_settings_error(error),
+ DaemonError::SettingsError(error) => Status::from(error),
DaemonError::AlreadyLoggedIn => Status::already_exists(error.to_string()),
DaemonError::LoginError(error) => map_device_error(&error),
DaemonError::LogoutError(error) => map_device_error(&error),
@@ -1121,20 +1095,6 @@ fn map_rest_error(error: &RestError) -> Status {
}
}
-/// Converts an instance of [`mullvad_daemon::settings::Error`] into a tonic status.
-fn map_settings_error(error: settings::Error) -> Status {
- match error {
- settings::Error::DeleteError(..)
- | settings::Error::WriteError(..)
- | settings::Error::ReadError(..) => {
- Status::new(Code::FailedPrecondition, error.to_string())
- }
- settings::Error::SerializeError(..) | settings::Error::ParseError(..) => {
- Status::new(Code::Internal, error.to_string())
- }
- }
-}
-
/// Converts an instance of [`mullvad_daemon::device::Error`] into a tonic status.
fn map_device_error(error: &device::Error) -> Status {
match error {