summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarkus Pettersson <markus.pettersson@mullvad.net>2024-07-30 09:18:37 +0200
committerMarkus Pettersson <markus.pettersson@mullvad.net>2024-07-30 09:18:37 +0200
commit17d1f8d21d3d3fc0ec7bc58e3718582b564da9b8 (patch)
tree6ce3d0810f15f489c281dde6c39b0da1e834299b
parent2852390ed2dadcd6ac630e919dacb68998c57073 (diff)
parentc6c95ad9dd08d6161cbb66ba848aaf6f5070738b (diff)
downloadmullvadvpn-17d1f8d21d3d3fc0ec7bc58e3718582b564da9b8.tar.xz
mullvadvpn-17d1f8d21d3d3fc0ec7bc58e3718582b564da9b8.zip
Merge branch 'useful-version-check-error'
-rw-r--r--mullvad-daemon/src/lib.rs11
-rw-r--r--mullvad-daemon/src/management_interface.rs16
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),