summaryrefslogtreecommitdiffhomepage
path: root/mullvad-api/src
diff options
context:
space:
mode:
authorJon Petersson <jon.petersson@mullvad.net>2025-01-16 15:52:16 +0100
committerJon Petersson <jon.petersson@mullvad.net>2025-02-21 15:08:01 +0100
commit041bf3f20f3cb0ed6703065eee4d09b5f938f730 (patch)
tree13ed3e3895269a8bb6980b5d6eab3238f1e09252 /mullvad-api/src
parent9a8535ef787d784d2d75dbd1474e1a1846413e83 (diff)
downloadmullvadvpn-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.rs9
-rw-r--r--mullvad-api/src/rest.rs4
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)]