diff options
| author | David Lönnhager <david.l@mullvad.net> | 2022-05-27 10:53:21 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2022-05-30 14:43:00 +0200 |
| commit | 8a3e7a249d97194619e1d03e547c2a21f48c54b4 (patch) | |
| tree | 09ca58d4b146d6de4d82ee171a6930480c594ff0 | |
| parent | 970efd86d571d912b3716d544d483857cc49d4f6 (diff) | |
| download | mullvadvpn-8a3e7a249d97194619e1d03e547c2a21f48c54b4.tar.xz mullvadvpn-8a3e7a249d97194619e1d03e547c2a21f48c54b4.zip | |
Improve error message for device broadcast error
| -rw-r--r-- | mullvad-daemon/src/device/mod.rs | 2 | ||||
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 25 |
2 files changed, 14 insertions, 13 deletions
diff --git a/mullvad-daemon/src/device/mod.rs b/mullvad-daemon/src/device/mod.rs index 4d420a404a..a0e3bed908 100644 --- a/mullvad-daemon/src/device/mod.rs +++ b/mullvad-daemon/src/device/mod.rs @@ -279,7 +279,7 @@ impl Error { } } - fn unpack(&self) -> &Error { + pub fn unpack(&self) -> &Error { if let Error::ResponseFailure(ref inner) = self { &*inner } else { diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs index 078fb52d97..2264159fc8 100644 --- a/mullvad-daemon/src/management_interface.rs +++ b/mullvad-daemon/src/management_interface.rs @@ -448,7 +448,7 @@ impl ManagementService for ManagementServiceImpl { "Unable to get account data from API: {}", error.display_chain() ); - map_rest_error(error) + map_rest_error(&error) }) } @@ -927,15 +927,15 @@ fn map_daemon_error(error: crate::Error) -> Status { use crate::Error as DaemonError; match error { - DaemonError::RestError(error) => map_rest_error(error), + DaemonError::RestError(error) => map_rest_error(&error), DaemonError::SettingsError(error) => map_settings_error(error), DaemonError::AlreadyLoggedIn => Status::already_exists(error.to_string()), - DaemonError::LoginError(error) => map_device_error(error), - DaemonError::LogoutError(error) => map_device_error(error), - DaemonError::KeyRotationError(error) => map_device_error(error), - DaemonError::ListDevicesError(error) => map_device_error(error), - DaemonError::RemoveDeviceError(error) => map_device_error(error), - DaemonError::UpdateDeviceError(error) => map_device_error(error), + DaemonError::LoginError(error) => map_device_error(&error), + DaemonError::LogoutError(error) => map_device_error(&error), + DaemonError::KeyRotationError(error) => map_device_error(&error), + DaemonError::ListDevicesError(error) => map_device_error(&error), + DaemonError::RemoveDeviceError(error) => map_device_error(&error), + DaemonError::UpdateDeviceError(error) => map_device_error(&error), #[cfg(windows)] DaemonError::SplitTunnelError(error) => map_split_tunnel_error(error), DaemonError::AccountHistory(error) => map_account_history_error(error), @@ -975,15 +975,15 @@ fn map_rest_voucher_error(error: RestError) -> Status { error => Status::unknown(format!("Voucher error: {}", error)), }, - error => map_rest_error(error), + error => map_rest_error(&error), } } /// Converts a REST API error into a tonic status. -fn map_rest_error(error: RestError) -> Status { +fn map_rest_error(error: &RestError) -> Status { match error { RestError::ApiError(status, message) - if status == StatusCode::UNAUTHORIZED || status == StatusCode::FORBIDDEN => + if *status == StatusCode::UNAUTHORIZED || *status == StatusCode::FORBIDDEN => { Status::new(Code::Unauthenticated, message) } @@ -1009,7 +1009,7 @@ fn map_settings_error(error: settings::Error) -> Status { } /// Converts an instance of [`mullvad_daemon::device::Error`] into a tonic status. -fn map_device_error(error: device::Error) -> Status { +fn map_device_error(error: &device::Error) -> Status { match error { device::Error::MaxDevicesReached => Status::new(Code::ResourceExhausted, error.to_string()), device::Error::InvalidAccount => Status::new(Code::Unauthenticated, error.to_string()), @@ -1020,6 +1020,7 @@ fn map_device_error(error: device::Error) -> Status { Status::new(Code::Unavailable, error.to_string()) } device::Error::OtherRestError(error) => map_rest_error(error), + device::Error::ResponseFailure(error) => map_device_error(error.unpack()), _ => Status::new(Code::Unknown, error.to_string()), } } |
