summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2020-12-16 16:22:02 +0100
committerOskar Nyberg <oskar@mullvad.net>2021-01-05 17:32:02 +0100
commit0ec3be2109055ce99001739c0c2ea9fbd20c8e51 (patch)
treee44430b7ee71eac7fb3a7de953463cf2662424a6
parent7616a9dab283f67eda3177e91d2fda7d783fbd42 (diff)
downloadmullvadvpn-0ec3be2109055ce99001739c0c2ea9fbd20c8e51.tar.xz
mullvadvpn-0ec3be2109055ce99001739c0c2ea9fbd20c8e51.zip
Add M-Platform-Version header to version check call
-rw-r--r--Cargo.lock1
-rw-r--r--mullvad-daemon/Cargo.toml1
-rw-r--r--mullvad-daemon/src/version_check.rs10
-rw-r--r--mullvad-rpc/src/lib.rs22
-rw-r--r--mullvad-rpc/src/rest.rs7
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 {