diff options
| author | Oskar <oskar@mullvad.net> | 2025-08-29 16:40:31 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2025-09-25 13:53:25 +0200 |
| commit | 7f5211bac71f8235fb22bf42ef2a2182fee452c3 (patch) | |
| tree | ddfb7314de287c124663c6e99e94a1547b109428 | |
| parent | 307ae764b9a39c97112eaac3d92a85d68b161d58 (diff) | |
| download | mullvadvpn-7f5211bac71f8235fb22bf42ef2a2182fee452c3.tar.xz mullvadvpn-7f5211bac71f8235fb22bf42ef2a2182fee452c3.zip | |
Replace use of old version check endpoint
| -rw-r--r-- | Cargo.lock | 1 | ||||
| -rw-r--r-- | mullvad-api/Cargo.toml | 1 | ||||
| -rw-r--r-- | mullvad-api/src/version.rs | 16 | ||||
| -rw-r--r-- | mullvad-daemon/src/version/check.rs | 38 | ||||
| -rw-r--r-- | test/Cargo.lock | 1 |
5 files changed, 26 insertions, 31 deletions
diff --git a/Cargo.lock b/Cargo.lock index 3dad552b8f..801bf03b00 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2986,6 +2986,7 @@ dependencies = [ "mullvad-fs", "mullvad-types", "mullvad-update", + "mullvad-version", "rustls-pemfile 2.1.3", "serde", "serde_json", diff --git a/mullvad-api/Cargo.toml b/mullvad-api/Cargo.toml index 1ffd0bc08c..e7750f183e 100644 --- a/mullvad-api/Cargo.toml +++ b/mullvad-api/Cargo.toml @@ -53,6 +53,7 @@ mullvad-api-constants = { path = "./mullvad-api-constants" } mullvad-encrypted-dns-proxy = { path = "../mullvad-encrypted-dns-proxy" } mullvad-fs = { path = "../mullvad-fs" } mullvad-types = { path = "../mullvad-types" } +mullvad-version = { path = "../mullvad-version" } talpid-types = { path = "../talpid-types" } talpid-time = { path = "../talpid-time" } diff --git a/mullvad-api/src/version.rs b/mullvad-api/src/version.rs index a78e1d784f..2593836aea 100644 --- a/mullvad-api/src/version.rs +++ b/mullvad-api/src/version.rs @@ -1,8 +1,9 @@ use std::future::Future; +use std::str::FromStr; use std::sync::Arc; use http::StatusCode; -use mullvad_update::version::{VersionInfo, VersionParameters}; +use mullvad_update::version::{VersionInfo, VersionParameters, is_version_supported}; type AppVersion = String; @@ -29,6 +30,8 @@ pub struct AppVersionResponse2 { /// Index of the metadata version used to sign the response. /// Used to prevent replay/downgrade attacks. pub metadata_version: usize, + /// Whether or not the current app version (mullvad_version::VERSION) is supported. + pub current_version_supported: bool, } impl AppVersionProxy { @@ -66,13 +69,17 @@ impl AppVersionProxy { architecture: mullvad_update::format::Architecture, rollout: f32, lowest_metadata_version: usize, + platform_version: String, ) -> impl Future<Output = Result<AppVersionResponse2, rest::Error>> + use<> { let service = self.handle.service.clone(); let path = format!("app/releases/{platform}.json"); let request = self.handle.factory.get(&path); async move { - let request = request?.expected_status(&[StatusCode::OK]); + let request = request? + .expected_status(&[StatusCode::OK]) + .header("M-App-Version", mullvad_version::VERSION)? + .header("M-Platform-Version", &platform_version)?; let response = service.request(request).await?; let bytes = response.body_with_max_size(Self::SIZE_LIMIT).await?; @@ -90,12 +97,17 @@ impl AppVersionProxy { lowest_metadata_version, }; + let current_version = + mullvad_version::Version::from_str(mullvad_version::VERSION).unwrap(); + let current_version_supported = is_version_supported(current_version, &response.signed); + let metadata_version = response.signed.metadata_version; Ok(AppVersionResponse2 { version_info: VersionInfo::try_from_response(¶ms, response.signed) .map_err(Arc::new) .map_err(rest::Error::FetchVersions)?, metadata_version, + current_version_supported, }) } } diff --git a/mullvad-daemon/src/version/check.rs b/mullvad-daemon/src/version/check.rs index 82cfe035be..0fc07cd830 100644 --- a/mullvad-daemon/src/version/check.rs +++ b/mullvad-daemon/src/version/check.rs @@ -377,27 +377,11 @@ fn do_version_check_in_background( } /// Combine the old version and new version endpoint -#[cfg(in_app_upgrade)] +#[cfg(any(in_app_upgrade, target_os = "linux"))] fn version_check_inner( api: &ApiContext, min_metadata_version: usize, ) -> impl Future<Output = Result<VersionCache, Error>> + use<> { - use futures::future::Either; - use mullvad_api::version::AppVersionResponse2; - - let supported_fut = if !APP_VERSION.is_dev() { - let v1_endpoint = api.version_proxy.version_check( - mullvad_version::VERSION.to_owned(), - PLATFORM, - api.platform_version.clone(), - ); - Either::Left(async { Ok(v1_endpoint.await?.supported) }) - } else { - // NOTE: Treat all dev versions as unsupported. The old endpoint returns 404 for dev - // versions. - Either::Right(async { Ok(false) }) - }; - let architecture = match talpid_platform_metadata::get_native_arch() .expect("IO error while getting native architecture") .expect("Failed to get native architecture") @@ -407,31 +391,27 @@ fn version_check_inner( mullvad_update::format::Architecture::Arm64 } }; - let v2_endpoint = api.version_proxy.version_check_2( + let endpoint = api.version_proxy.version_check_2( PLATFORM, architecture, mullvad_update::version::SUPPORTED_VERSION, min_metadata_version, + api.platform_version.clone(), ); async move { - let ( - current_version_supported, - AppVersionResponse2 { - version_info, - metadata_version, - }, - ) = tokio::try_join!(supported_fut, v2_endpoint).map_err(Error::Download)?; + let result = endpoint.await.map_err(Error::Download)?; Ok(VersionCache { cache_version: APP_VERSION.clone(), - current_version_supported, - version_info, - metadata_version, + current_version_supported: result.current_version_supported, + version_info: result.version_info, + #[cfg(in_app_upgrade)] + metadata_version: result.metadata_version, }) } } -#[cfg(not(in_app_upgrade))] +#[cfg(target_os = "android")] fn version_check_inner( api: &ApiContext, // NOTE: This is unused when `update` is disabled diff --git a/test/Cargo.lock b/test/Cargo.lock index d03bcc622e..ccdedcc77f 100644 --- a/test/Cargo.lock +++ b/test/Cargo.lock @@ -2046,6 +2046,7 @@ dependencies = [ "mullvad-fs", "mullvad-types", "mullvad-update", + "mullvad-version", "rustls-pemfile 2.1.3", "serde", "serde_json", |
