summaryrefslogtreecommitdiffhomepage
path: root/mullvad-daemon/src
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2022-09-06 17:37:05 +0200
committerDavid Lönnhager <david.l@mullvad.net>2022-09-13 15:57:39 +0200
commitfbb66be90ca20c45e3026d78c98ec10e4e767d28 (patch)
tree6a4a49b9cfc52ae02216626c664c4abd3b374f67 /mullvad-daemon/src
parent4d141ed2d7a333444913614cf56a216f0bc1e498 (diff)
downloadmullvadvpn-fbb66be90ca20c45e3026d78c98ec10e4e767d28.tar.xz
mullvadvpn-fbb66be90ca20c45e3026d78c98ec10e4e767d28.zip
Fix mapping of daemon voucher errors to gRPC errors
Diffstat (limited to 'mullvad-daemon/src')
-rw-r--r--mullvad-daemon/src/device/mod.rs4
-rw-r--r--mullvad-daemon/src/device/service.rs2
-rw-r--r--mullvad-daemon/src/management_interface.rs23
3 files changed, 9 insertions, 20 deletions
diff --git a/mullvad-daemon/src/device/mod.rs b/mullvad-daemon/src/device/mod.rs
index 3121c91e7b..7441579fc3 100644
--- a/mullvad-daemon/src/device/mod.rs
+++ b/mullvad-daemon/src/device/mod.rs
@@ -56,6 +56,10 @@ pub enum Error {
InvalidDevice,
#[error(display = "Invalid account")]
InvalidAccount,
+ #[error(display = "Invalid voucher code")]
+ InvalidVoucher,
+ #[error(display = "The voucher has already been used")]
+ UsedVoucher,
#[error(display = "Failed to read or write device cache")]
DeviceIoError(#[error(source)] io::Error),
#[error(display = "Failed parse device cache")]
diff --git a/mullvad-daemon/src/device/service.rs b/mullvad-daemon/src/device/service.rs
index 294e41bab5..1f574f272f 100644
--- a/mullvad-daemon/src/device/service.rs
+++ b/mullvad-daemon/src/device/service.rs
@@ -426,6 +426,8 @@ fn map_rest_error(error: rest::Error) -> Error {
mullvad_api::DEVICE_NOT_FOUND => Error::InvalidDevice,
mullvad_api::INVALID_ACCOUNT => Error::InvalidAccount,
mullvad_api::MAX_DEVICES_REACHED => Error::MaxDevicesReached,
+ mullvad_api::INVALID_VOUCHER => Error::InvalidVoucher,
+ mullvad_api::VOUCHER_USED => Error::UsedVoucher,
_ => Error::OtherRestError(error),
},
error => Error::OtherRestError(error),
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs
index a8c4484be8..bac3ed0f93 100644
--- a/mullvad-daemon/src/management_interface.rs
+++ b/mullvad-daemon/src/management_interface.rs
@@ -493,10 +493,7 @@ impl ManagementService for ManagementServiceImpl {
}),
})
})
- .map_err(|error| match error {
- crate::Error::RestError(error) => map_rest_voucher_error(error),
- error => map_daemon_error(error),
- })
+ .map_err(map_daemon_error)
}
// Device management
@@ -982,22 +979,6 @@ fn map_split_tunnel_error(error: talpid_core::split_tunnel::Error) -> Status {
}
}
-/// Converts a REST API voucher error into a tonic status.
-fn map_rest_voucher_error(error: RestError) -> Status {
- match error {
- RestError::ApiError(StatusCode::BAD_REQUEST, message) => match &message.as_str() {
- &mullvad_api::INVALID_VOUCHER => Status::new(Code::NotFound, INVALID_VOUCHER_MESSAGE),
-
- &mullvad_api::VOUCHER_USED => {
- Status::new(Code::ResourceExhausted, USED_VOUCHER_MESSAGE)
- }
-
- error => Status::unknown(format!("Voucher error: {}", error)),
- },
- error => map_rest_error(&error),
- }
-}
-
/// Converts a REST API error into a tonic status.
fn map_rest_error(error: &RestError) -> Status {
match error {
@@ -1035,6 +1016,8 @@ fn map_device_error(error: &device::Error) -> Status {
device::Error::InvalidDevice | device::Error::NoDevice => {
Status::new(Code::NotFound, error.to_string())
}
+ device::Error::InvalidVoucher => Status::new(Code::NotFound, INVALID_VOUCHER_MESSAGE),
+ device::Error::UsedVoucher => Status::new(Code::ResourceExhausted, USED_VOUCHER_MESSAGE),
device::Error::DeviceIoError(ref _error) => {
Status::new(Code::Unavailable, error.to_string())
}