diff options
| author | Oskar Nyberg <oskar@mullvad.net> | 2021-01-04 11:18:06 +0100 |
|---|---|---|
| committer | Oskar Nyberg <oskar@mullvad.net> | 2021-01-05 17:32:02 +0100 |
| commit | 579edf2849156c82346f55100073991150f8edb0 (patch) | |
| tree | e4f7f13e757094d78d8ac26b925f13d32cfb7881 | |
| parent | 0ec3be2109055ce99001739c0c2ea9fbd20c8e51 (diff) | |
| download | mullvadvpn-579edf2849156c82346f55100073991150f8edb0.tar.xz mullvadvpn-579edf2849156c82346f55100073991150f8edb0.zip | |
Add getter for redacted OS version and use it in version check header
| -rw-r--r-- | mullvad-daemon/src/version_check.rs | 2 | ||||
| -rw-r--r-- | mullvad-platform-metadata/src/lib.rs | 65 |
2 files changed, 48 insertions, 19 deletions
diff --git a/mullvad-daemon/src/version_check.rs b/mullvad-daemon/src/version_check.rs index a3733daa19..8f52f5694a 100644 --- a/mullvad-daemon/src/version_check.rs +++ b/mullvad-daemon/src/version_check.rs @@ -117,7 +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(); + let platform_version = mullvad_platform_metadata::short_version(); ( Self { diff --git a/mullvad-platform-metadata/src/lib.rs b/mullvad-platform-metadata/src/lib.rs index bcdc640ee6..c52d76bb4b 100644 --- a/mullvad-platform-metadata/src/lib.rs +++ b/mullvad-platform-metadata/src/lib.rs @@ -18,6 +18,10 @@ mod imp { format!("Linux {}", version) } + pub fn short_version() -> String { + version() + } + fn read_os_release_file() -> Result<String, Option<String>> { let mut os_release_info = rs_release::get_os_release().map_err(|_| None)?; let os_name = os_release_info.remove("NAME"); @@ -69,6 +73,10 @@ mod imp { ) } + pub fn short_version() -> String { + version() + } + pub fn extra_metadata() -> impl Iterator<Item = (String, String)> { std::iter::empty() } @@ -76,30 +84,47 @@ mod imp { #[cfg(windows)] mod imp { + use std::collections::HashMap; + pub fn version() -> String { - let system_info = - super::command_stdout_lossy("systeminfo", &["/FO", "LIST"]).unwrap_or_else(String::new); + let system_info = system_info(); + let os_name = system_info.get("OS Name"); + let os_version = system_info.get("OS Version"); + let version = os_name.map(parse_version).unwrap_or(String::from("N/A")); + let full_version = os_version.map(parse_full_version).unwrap_or(String::from("N/A")); + format!("Windows {} ({})", version, full_version) + } - let mut version = None; - let mut full_version = None; + pub fn short_version() -> String { + let system_info = system_info(); + let os_name = system_info.get("OS Name"); + let version = os_name.map(parse_version).unwrap_or(String::from("N/A")); + format!("Windows {}", version) + } - for info_line in system_info.lines() { - let mut info_parts = info_line.split(":"); + fn system_info() -> HashMap<String, String> { + let system_info = + super::command_stdout_lossy("systeminfo", &["/FO", "LIST"]).unwrap_or_else(String::new); - match info_parts.next() { - Some("OS Name") => { - version = info_parts - .next() - .map(|s| s.trim().trim_start_matches("Microsoft Windows ")) + let mut info_map = HashMap::new(); + system_info.lines().for_each(|line| { + let mut split = line.split(":"); + if let Some(key) = split.next() { + if let Some(value) = split.next() { + info_map.insert(key.to_owned(), value.to_owned()); } - Some("OS Version") => full_version = info_parts.next().map(str::trim), - _ => {} } - } + }); - let version = version.unwrap_or("N/A"); - let full_version = full_version.unwrap_or("N/A"); - format!("Windows {} ({})", version, full_version) + info_map + } + + fn parse_version(os_name: &String) -> String { + os_name.trim().trim_start_matches("Microsoft Windows ").to_owned() + } + + fn parse_full_version(os_version: &String) -> String { + os_version.trim().to_owned() } pub fn extra_metadata() -> impl Iterator<Item = (String, String)> { @@ -125,6 +150,10 @@ mod imp { ) } + pub fn short_version() -> String { + version() + } + pub fn extra_metadata() -> HashMap<String, String> { let mut metadata = HashMap::new(); metadata.insert( @@ -148,4 +177,4 @@ fn command_stdout_lossy(cmd: &str, args: &[&str]) -> Option<String> { .ok() } -pub use imp::{extra_metadata, version}; +pub use imp::{extra_metadata, short_version, version}; |
