diff options
| author | Oskar Nyberg <oskar@mullvad.net> | 2020-12-16 16:22:02 +0100 |
|---|---|---|
| committer | Oskar Nyberg <oskar@mullvad.net> | 2021-01-05 17:32:02 +0100 |
| commit | 0ec3be2109055ce99001739c0c2ea9fbd20c8e51 (patch) | |
| tree | e44430b7ee71eac7fb3a7de953463cf2662424a6 | |
| parent | 7616a9dab283f67eda3177e91d2fda7d783fbd42 (diff) | |
| download | mullvadvpn-0ec3be2109055ce99001739c0c2ea9fbd20c8e51.tar.xz mullvadvpn-0ec3be2109055ce99001739c0c2ea9fbd20c8e51.zip | |
Add M-Platform-Version header to version check call
| -rw-r--r-- | Cargo.lock | 1 | ||||
| -rw-r--r-- | mullvad-daemon/Cargo.toml | 1 | ||||
| -rw-r--r-- | mullvad-daemon/src/version_check.rs | 10 | ||||
| -rw-r--r-- | mullvad-rpc/src/lib.rs | 22 | ||||
| -rw-r--r-- | mullvad-rpc/src/rest.rs | 7 |
5 files changed, 30 insertions, 11 deletions
diff --git a/Cargo.lock b/Cargo.lock index 36841748bc..cc29caeba4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1243,6 +1243,7 @@ dependencies = [ "log-panics", "mullvad-management-interface", "mullvad-paths", + "mullvad-platform-metadata", "mullvad-rpc", "mullvad-types", "nix 0.19.0", diff --git a/mullvad-daemon/Cargo.toml b/mullvad-daemon/Cargo.toml index f26ed548c6..9698ab67cf 100644 --- a/mullvad-daemon/Cargo.toml +++ b/mullvad-daemon/Cargo.toml @@ -27,6 +27,7 @@ tokio = { version = "0.2", features = [ "fs", "rt-threaded", "stream", "sync" ] uuid = { version = "0.8", features = ["v4"] } mullvad-paths = { path = "../mullvad-paths" } +mullvad-platform-metadata = { path = "../mullvad-platform-metadata" } mullvad-types = { path = "../mullvad-types" } mullvad-rpc = { path = "../mullvad-rpc" } talpid-core = { path = "../talpid-core" } diff --git a/mullvad-daemon/src/version_check.rs b/mullvad-daemon/src/version_check.rs index d0895671ba..a3733daa19 100644 --- a/mullvad-daemon/src/version_check.rs +++ b/mullvad-daemon/src/version_check.rs @@ -86,6 +86,7 @@ pub(crate) struct VersionUpdater { cache_path: PathBuf, update_sender: DaemonEventSender<AppVersionInfo>, last_app_version_info: AppVersionInfo, + platform_version: String, next_update_time: Instant, show_beta_releases: bool, rx: Option<mpsc::Receiver<bool>>, @@ -116,6 +117,7 @@ impl VersionUpdater { let version_proxy = AppVersionProxy::new(rpc_handle); let cache_path = cache_dir.join(VERSION_INFO_FILENAME); let (tx, rx) = mpsc::channel(1); + let platform_version = mullvad_platform_metadata::version(); ( Self { @@ -123,6 +125,7 @@ impl VersionUpdater { cache_path, update_sender, last_app_version_info, + platform_version, next_update_time: Instant::now(), show_beta_releases, rx: Some(rx), @@ -135,8 +138,13 @@ impl VersionUpdater { &self, ) -> impl Future<Output = Result<mullvad_rpc::AppVersionResponse, Error>> + Send + 'static { let version_proxy = self.version_proxy.clone(); + let platform_version = self.platform_version.clone(); let download_future_factory = move || { - let response = version_proxy.version_check(PRODUCT_VERSION.to_owned(), PLATFORM); + let response = version_proxy.version_check( + PRODUCT_VERSION.to_owned(), + PLATFORM, + platform_version.clone(), + ); response.map_err(Error::Download) }; diff --git a/mullvad-rpc/src/lib.rs b/mullvad-rpc/src/lib.rs index 4beefa7d3b..e211a89c2e 100644 --- a/mullvad-rpc/src/lib.rs +++ b/mullvad-rpc/src/lib.rs @@ -343,21 +343,23 @@ impl AppVersionProxy { pub fn version_check( &self, - version: AppVersion, + app_version: AppVersion, platform: &str, + platform_version: String, ) -> impl Future<Output = Result<AppVersionResponse, rest::Error>> { let service = self.handle.service.clone(); - let request = rest::send_request( - &self.handle.factory, - service, - &format!("/v1/releases/{}/{}", platform, version), - Method::GET, - None, - StatusCode::OK, - ); + let path = format!("/v1/releases/{}/{}", platform, app_version); + let request = self.handle.factory.request(&path, Method::GET); - async move { rest::deserialize_body(request.await?).await } + async move { + let mut request = request?; + request.add_header("M-Platform-Version", platform_version)?; + + let response = service.request(request).await?; + let parsed_response = rest::parse_rest_response(response, StatusCode::OK).await?; + rest::deserialize_body(parsed_response).await + } } } diff --git a/mullvad-rpc/src/rest.rs b/mullvad-rpc/src/rest.rs index 12bc10263e..82a6271c74 100644 --- a/mullvad-rpc/src/rest.rs +++ b/mullvad-rpc/src/rest.rs @@ -319,6 +319,13 @@ impl RestRequest { self.timeout } + pub fn add_header(&mut self, key: &'static str, value: String) -> Result<()> { + let header_value = + http::HeaderValue::from_str(&value).map_err(Error::InvalidHeaderError)?; + self.request.headers_mut().insert(key, header_value); + Ok(()) + } + /// Converts into a `hyper::Request<hyper::Body>` fn into_request(self) -> Request { let Self { |
