diff options
| author | Jon Petersson <jon.petersson@mullvad.net> | 2025-01-16 15:52:16 +0100 |
|---|---|---|
| committer | Jon Petersson <jon.petersson@mullvad.net> | 2025-02-21 15:08:01 +0100 |
| commit | 041bf3f20f3cb0ed6703065eee4d09b5f938f730 (patch) | |
| tree | 13ed3e3895269a8bb6980b5d6eab3238f1e09252 /mullvad-api/src | |
| parent | 9a8535ef787d784d2d75dbd1474e1a1846413e83 (diff) | |
| download | mullvadvpn-041bf3f20f3cb0ed6703065eee4d09b5f938f730.tar.xz mullvadvpn-041bf3f20f3cb0ed6703065eee4d09b5f938f730.zip | |
Implement an FFI to fetch API IP addresses using mullvad-api
Diffstat (limited to 'mullvad-api/src')
| -rw-r--r-- | mullvad-api/src/lib.rs | 9 | ||||
| -rw-r--r-- | mullvad-api/src/rest.rs | 4 |
2 files changed, 11 insertions, 2 deletions
diff --git a/mullvad-api/src/lib.rs b/mullvad-api/src/lib.rs index 997a0635c7..950ce10345 100644 --- a/mullvad-api/src/lib.rs +++ b/mullvad-api/src/lib.rs @@ -2,6 +2,7 @@ use async_trait::async_trait; #[cfg(target_os = "android")] use futures::channel::mpsc; +use hyper::body::Incoming; #[cfg(target_os = "android")] use mullvad_types::account::{PlayPurchase, PlayPurchasePaymentToken}; use mullvad_types::{ @@ -746,13 +747,17 @@ impl ApiProxy { } pub async fn get_api_addrs(&self) -> Result<Vec<SocketAddr>, rest::Error> { + self.get_api_addrs_response().await?.deserialize().await + } + + pub async fn get_api_addrs_response(&self) -> Result<rest::Response<Incoming>, rest::Error> { let request = self .handle .factory .get(&format!("{APP_URL_PREFIX}/api-addrs"))? .expected_status(&[StatusCode::OK]); - let response = self.handle.service.request(request).await?; - response.deserialize().await + + self.handle.service.request(request).await } /// Check the availablility of `{APP_URL_PREFIX}/api-addrs`. diff --git a/mullvad-api/src/rest.rs b/mullvad-api/src/rest.rs index cab3bb7e0f..bab6d8112a 100644 --- a/mullvad-api/src/rest.rs +++ b/mullvad-api/src/rest.rs @@ -512,6 +512,10 @@ where pub async fn deserialize<T: serde::de::DeserializeOwned>(self) -> Result<T> { deserialize_body_inner(self.response).await } + + pub async fn body(self) -> Result<Vec<u8>> { + Ok(BodyExt::collect(self.response).await?.to_bytes().to_vec()) + } } #[derive(serde::Deserialize)] |
