summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2022-05-11 16:18:10 +0200
committerDavid Lönnhager <david.l@mullvad.net>2022-05-11 17:37:43 +0200
commitd593dce00a0872a4e51bd95f193e667fa24b0810 (patch)
treef62bb05709d60d4aaf76f01daf8ec0f74b45e0d4
parentb47084be5bf38713d4016e138f5c513343c25d63 (diff)
downloadmullvadvpn-d593dce00a0872a4e51bd95f193e667fa24b0810.tar.xz
mullvadvpn-d593dce00a0872a4e51bd95f193e667fa24b0810.zip
Check status in API response body to determine whether a device has been revoked
-rw-r--r--mullvad-api/src/lib.rs3
-rw-r--r--mullvad-api/src/rest.rs1
-rw-r--r--mullvad-daemon/src/device/service.rs17
3 files changed, 10 insertions, 11 deletions
diff --git a/mullvad-api/src/lib.rs b/mullvad-api/src/lib.rs
index 9c23fea6a7..714718814b 100644
--- a/mullvad-api/src/lib.rs
+++ b/mullvad-api/src/lib.rs
@@ -47,6 +47,9 @@ pub const INVALID_VOUCHER: &str = "INVALID_VOUCHER";
/// Error code returned by the Mullvad API if the account token is invalid.
pub const INVALID_ACCOUNT: &str = "INVALID_ACCOUNT";
+/// Error code returned by the Mullvad API if the device does not exist.
+pub const DEVICE_NOT_FOUND: &str = "DEVICE_NOT_FOUND";
+
/// Error code returned by the Mullvad API if the access token is invalid.
pub const INVALID_ACCESS_TOKEN: &str = "INVALID_ACCESS_TOKEN";
diff --git a/mullvad-api/src/rest.rs b/mullvad-api/src/rest.rs
index 517e0b3a03..d174c3d19c 100644
--- a/mullvad-api/src/rest.rs
+++ b/mullvad-api/src/rest.rs
@@ -584,7 +584,6 @@ pub async fn parse_rest_response(
pub async fn handle_error_response<T>(response: Response) -> Result<T> {
let status = response.status();
let error_message = match status {
- hyper::StatusCode::NOT_FOUND => "Not found",
hyper::StatusCode::METHOD_NOT_ALLOWED => "Method not allowed",
status => match get_body_length(&response) {
0 => status.canonical_reason().unwrap_or("Unexpected error"),
diff --git a/mullvad-daemon/src/device/service.rs b/mullvad-daemon/src/device/service.rs
index c2b09d322a..f4f147ac96 100644
--- a/mullvad-daemon/src/device/service.rs
+++ b/mullvad-daemon/src/device/service.rs
@@ -422,6 +422,7 @@ fn should_retry_backoff<T>(result: &Result<T, RestError>) -> bool {
Err(error) => {
if let RestError::ApiError(status, code) = error {
*status != rest::StatusCode::NOT_FOUND
+ && code != mullvad_api::DEVICE_NOT_FOUND
&& code != mullvad_api::INVALID_ACCOUNT
&& code != mullvad_api::MAX_DEVICES_REACHED
&& code != mullvad_api::PUBKEY_IN_USE
@@ -434,16 +435,12 @@ fn should_retry_backoff<T>(result: &Result<T, RestError>) -> bool {
fn map_rest_error(error: rest::Error) -> Error {
match error {
- RestError::ApiError(status, ref code) => {
- if status == rest::StatusCode::NOT_FOUND {
- return Error::InvalidDevice;
- }
- match code.as_str() {
- mullvad_api::INVALID_ACCOUNT => Error::InvalidAccount,
- mullvad_api::MAX_DEVICES_REACHED => Error::MaxDevicesReached,
- _ => Error::OtherRestError(error),
- }
- }
+ RestError::ApiError(_status, ref code) => match code.as_str() {
+ mullvad_api::DEVICE_NOT_FOUND => Error::InvalidDevice,
+ mullvad_api::INVALID_ACCOUNT => Error::InvalidAccount,
+ mullvad_api::MAX_DEVICES_REACHED => Error::MaxDevicesReached,
+ _ => Error::OtherRestError(error),
+ },
error => Error::OtherRestError(error),
}
}