diff options
| author | Markus Pettersson <markus.pettersson@mullvad.net> | 2024-07-30 09:18:37 +0200 |
|---|---|---|
| committer | Markus Pettersson <markus.pettersson@mullvad.net> | 2024-07-30 09:18:37 +0200 |
| commit | 17d1f8d21d3d3fc0ec7bc58e3718582b564da9b8 (patch) | |
| tree | 6ce3d0810f15f489c281dde6c39b0da1e834299b | |
| parent | 2852390ed2dadcd6ac630e919dacb68998c57073 (diff) | |
| parent | c6c95ad9dd08d6161cbb66ba848aaf6f5070738b (diff) | |
| download | mullvadvpn-17d1f8d21d3d3fc0ec7bc58e3718582b564da9b8.tar.xz mullvadvpn-17d1f8d21d3d3fc0ec7bc58e3718582b564da9b8.zip | |
Merge branch 'useful-version-check-error'
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 11 | ||||
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 16 |
2 files changed, 21 insertions, 6 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index ea75118f7b..c2c7002377 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -113,6 +113,9 @@ pub enum Error { #[error("API availability check failed")] ApiCheckError(#[source] mullvad_api::availability::Error), + #[error("Version check failed")] + VersionCheckError(#[source] version_check::Error), + #[error("Unable to load account history")] LoadAccountHistory(#[source] account_history::Error), @@ -307,7 +310,7 @@ pub enum DaemonCommand { talpid_types::net::proxy::CustomProxy, ), /// Get information about the currently running and latest app versions - GetVersionInfo(oneshot::Sender<Option<AppVersionInfo>>), + GetVersionInfo(oneshot::Sender<Result<AppVersionInfo, Error>>), /// Return whether the daemon is performing post-upgrade tasks IsPerformingPostUpgrade(oneshot::Sender<bool>), /// Get current version of the app @@ -1637,7 +1640,7 @@ where Self::oneshot_send(tx, result, "clear_account_history response"); } - fn on_get_version_info(&mut self, tx: oneshot::Sender<Option<AppVersionInfo>>) { + fn on_get_version_info(&mut self, tx: oneshot::Sender<Result<AppVersionInfo, Error>>) { let mut handle = self.version_updater_handle.clone(); tokio::spawn(async move { Self::oneshot_send( @@ -1645,13 +1648,13 @@ where handle .get_version_info() .await - .map_err(|error| { + .inspect_err(|error| { log::error!( "{}", error.display_chain_with_msg("Error running version check") ) }) - .ok(), + .map_err(Error::VersionCheckError), "get_version_info response", ); }); diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs index 3ea6db073f..62a353dcc6 100644 --- a/mullvad-daemon/src/management_interface.rs +++ b/mullvad-daemon/src/management_interface.rs @@ -1,4 +1,6 @@ -use crate::{account_history, device, DaemonCommand, DaemonCommandSender, EventListener}; +use crate::{ + account_history, device, version_check, DaemonCommand, DaemonCommandSender, EventListener, +}; use futures::{ channel::{mpsc, oneshot}, StreamExt, @@ -147,9 +149,9 @@ impl ManagementService for ManagementServiceImpl { self.send_command_to_daemon(DaemonCommand::GetVersionInfo(tx))?; self.wait_for_result(rx) .await? - .ok_or_else(|| Status::not_found("no version cache")) .map(types::AppVersionInfo::from) .map(Response::new) + .map_err(map_daemon_error) } async fn is_performing_post_upgrade(&self, _: Request<()>) -> ServiceResult<bool> { @@ -1169,6 +1171,7 @@ fn map_daemon_error(error: crate::Error) -> Status { DaemonError::NoAccountToken | DaemonError::NoAccountTokenHistory => { Status::unauthenticated(error.to_string()) } + DaemonError::VersionCheckError(error) => map_version_check_error(error), error => Status::unknown(error.to_string()), } } @@ -1240,6 +1243,15 @@ fn map_account_history_error(error: account_history::Error) -> Status { } } +fn map_version_check_error(error: version_check::Error) -> Status { + match error { + version_check::Error::Download(..) + | version_check::Error::ReadVersionCache(..) + | version_check::Error::ApiCheck(..) => Status::unavailable(error.to_string()), + _ => Status::unknown(error.to_string()), + } +} + fn map_protobuf_type_err(err: types::FromProtobufTypeError) -> Status { match err { types::FromProtobufTypeError::InvalidArgument(err) => Status::invalid_argument(err), |
