diff --git a/native/.gitignore b/native/.gitignore --- a/native/.gitignore +++ b/native/.gitignore @@ -58,7 +58,7 @@ android/app/.cxx/ codegen/dist -facts/alchemy.json +facts/ # Expo .expo diff --git a/native/native_rust_library/build.rs b/native/native_rust_library/build.rs --- a/native/native_rust_library/build.rs +++ b/native/native_rust_library/build.rs @@ -2,14 +2,34 @@ use serde::{Deserialize, Serialize}; use std::env; use std::fs; +use std::io::Write; use std::path::Path; -const DEFAULT_DEBUG_IDENTITY_SOCKET_ADDR: &str = - "https://identity.staging.commtechnologies.org:50054"; -const DEFAULT_RELEASE_IDENTITY_SOCKET_ADDR: &str = - "https://identity.commtechnologies.org:50054"; -const IDENTITY_SERVICE_CONFIG_PATH: &str = - "../facts/identity_service_config.json"; +trait ServiceConfig: for<'a> Deserialize<'a> { + const FILEPATH: &'static str; + + fn debug_default() -> Self; + fn release_default() -> Self; + + fn generated_code(&self) -> String; + + fn get_config() -> Self { + let path = Path::new(Self::FILEPATH); + + if let Ok(file_content) = fs::read_to_string(path) { + if let Ok(config) = serde_json::from_str(&file_content) { + return config; + } + } + + let profile = env::var("PROFILE").expect("Error fetching PROFILE env var"); + if profile == "release" { + Self::release_default() + } else { + Self::debug_default() + } + } +} #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -17,12 +37,59 @@ identity_socket_addr: String, } -fn get_identity_service_config( -) -> Result> { - let path = Path::new(IDENTITY_SERVICE_CONFIG_PATH); - let file_content = fs::read_to_string(path)?; +impl ServiceConfig for IdentityServiceConfig { + const FILEPATH: &'static str = "../facts/identity_service_config.json"; + + fn debug_default() -> Self { + Self { + identity_socket_addr: + "https://identity.staging.commtechnologies.org:50054".to_string(), + } + } + + fn release_default() -> Self { + Self { + identity_socket_addr: "https://identity.commtechnologies.org:50054" + .to_string(), + } + } - serde_json::from_str(&file_content).map_err(|e| e.into()) + fn generated_code(&self) -> String { + format!( + r#"pub const IDENTITY_SOCKET_ADDR: &str = "{}";"#, + self.identity_socket_addr + ) + } +} + +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +struct BackupServiceConfig { + backup_socket_addr: String, +} + +impl ServiceConfig for BackupServiceConfig { + const FILEPATH: &'static str = "../facts/backup_service_config.json"; + + fn debug_default() -> Self { + Self { + backup_socket_addr: "https://backup.staging.commtechnologies.org" + .to_string(), + } + } + + fn release_default() -> Self { + Self { + backup_socket_addr: "https://backup.commtechnologies.org".to_string(), + } + } + + fn generated_code(&self) -> String { + format!( + r#"pub const BACKUP_SOCKET_ADDR: &str = "{}";"#, + self.backup_socket_addr + ) + } } fn main() { @@ -68,31 +135,22 @@ ) .expect("Failed to write version.rs"); - let identity_socket_addr = match get_identity_service_config() { - Ok(config) => config.identity_socket_addr, - Err(_) => { - let profile = - env::var("PROFILE").expect("Error fetching PROFILE env var"); - if profile == "release" { - DEFAULT_RELEASE_IDENTITY_SOCKET_ADDR.to_string() - } else { - DEFAULT_DEBUG_IDENTITY_SOCKET_ADDR.to_string() - } - } - }; + let identity_config = IdentityServiceConfig::get_config(); + let backup_config = BackupServiceConfig::get_config(); let socket_config_path = Path::new(&out_dir).join("socket_config.rs"); - fs::write( - socket_config_path, - format!( - "pub const IDENTITY_SOCKET_ADDR: &str = \"{}\";", - identity_socket_addr - ), - ) - .expect("Failed to write socket_config.rs"); + let mut file = fs::File::create(socket_config_path) + .expect("Couldn't create services config file"); + file + .write_all(identity_config.generated_code().as_bytes()) + .expect("Couldn't write identity service config"); + file + .write_all(backup_config.generated_code().as_bytes()) + .expect("Couldn't write backup service config"); println!("cargo:rerun-if-changed=src/lib.rs"); println!("cargo:rerun-if-changed={}", HEADER_PATH); - println!("cargo:rerun-if-changed={}", IDENTITY_SERVICE_CONFIG_PATH); + println!("cargo:rerun-if-changed={}", IdentityServiceConfig::FILEPATH); + println!("cargo:rerun-if-changed={}", BackupServiceConfig::FILEPATH); } diff --git a/native/native_rust_library/src/lib.rs b/native/native_rust_library/src/lib.rs --- a/native/native_rust_library/src/lib.rs +++ b/native/native_rust_library/src/lib.rs @@ -38,7 +38,7 @@ } pub use generated::CODE_VERSION; -pub use generated::IDENTITY_SOCKET_ADDR; +pub use generated::{BACKUP_SOCKET_ADDR, IDENTITY_SOCKET_ADDR}; #[cfg(not(feature = "android"))] pub const DEVICE_TYPE: DeviceType = DeviceType::Ios; @@ -921,7 +921,7 @@ #[cfg(test)] mod tests { use super::CODE_VERSION; - use super::IDENTITY_SOCKET_ADDR; + use super::{BACKUP_SOCKET_ADDR, IDENTITY_SOCKET_ADDR}; #[test] fn test_code_version_exists() { @@ -931,5 +931,6 @@ #[test] fn test_identity_socket_addr_exists() { assert!(IDENTITY_SOCKET_ADDR.len() > 0); + assert!(BACKUP_SOCKET_ADDR.len() > 0); } } diff --git a/services/backup/Cargo.lock b/services/backup/Cargo.lock --- a/services/backup/Cargo.lock +++ b/services/backup/Cargo.lock @@ -2295,7 +2295,7 @@ dependencies = [ "log", "ring", - "rustls-webpki", + "rustls-webpki 0.101.6", "sct", ] @@ -2320,6 +2320,16 @@ "base64 0.21.2", ] +[[package]] +name = "rustls-webpki" +version = "0.100.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.101.6" @@ -2760,6 +2770,7 @@ "tower-layer", "tower-service", "tracing", + "webpki-roots", ] [[package]] @@ -3112,6 +3123,15 @@ "untrusted", ] +[[package]] +name = "webpki-roots" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +dependencies = [ + "rustls-webpki 0.100.3", +] + [[package]] name = "which" version = "4.4.0" diff --git a/services/blob/Cargo.lock b/services/blob/Cargo.lock --- a/services/blob/Cargo.lock +++ b/services/blob/Cargo.lock @@ -2368,7 +2368,7 @@ dependencies = [ "log", "ring", - "rustls-webpki", + "rustls-webpki 0.101.6", "sct", ] @@ -2393,6 +2393,16 @@ "base64 0.13.1", ] +[[package]] +name = "rustls-webpki" +version = "0.100.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.101.6" @@ -2869,6 +2879,7 @@ "tower-layer", "tower-service", "tracing", + "webpki-roots", ] [[package]] @@ -3201,6 +3212,15 @@ "untrusted", ] +[[package]] +name = "webpki-roots" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +dependencies = [ + "rustls-webpki 0.100.3", +] + [[package]] name = "which" version = "4.3.0" diff --git a/services/commtest/Cargo.lock b/services/commtest/Cargo.lock --- a/services/commtest/Cargo.lock +++ b/services/commtest/Cargo.lock @@ -1485,7 +1485,7 @@ dependencies = [ "log", "ring", - "rustls-webpki", + "rustls-webpki 0.101.4", "sct", ] @@ -1498,6 +1498,16 @@ "base64 0.21.3", ] +[[package]] +name = "rustls-webpki" +version = "0.100.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.101.4" @@ -1944,6 +1954,7 @@ "tower-layer", "tower-service", "tracing", + "webpki-roots", ] [[package]] @@ -2318,6 +2329,15 @@ "wasm-bindgen", ] +[[package]] +name = "webpki-roots" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +dependencies = [ + "rustls-webpki 0.100.3", +] + [[package]] name = "which" version = "4.4.0" diff --git a/services/reports/Cargo.lock b/services/reports/Cargo.lock --- a/services/reports/Cargo.lock +++ b/services/reports/Cargo.lock @@ -2437,7 +2437,7 @@ dependencies = [ "log", "ring", - "rustls-webpki", + "rustls-webpki 0.101.6", "sct", ] @@ -2462,6 +2462,16 @@ "base64 0.21.3", ] +[[package]] +name = "rustls-webpki" +version = "0.100.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.101.6" @@ -2933,6 +2943,7 @@ "tower-layer", "tower-service", "tracing", + "webpki-roots", ] [[package]] @@ -3294,6 +3305,15 @@ "untrusted", ] +[[package]] +name = "webpki-roots" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +dependencies = [ + "rustls-webpki 0.100.3", +] + [[package]] name = "which" version = "4.4.2" diff --git a/services/tunnelbroker/Cargo.lock b/services/tunnelbroker/Cargo.lock --- a/services/tunnelbroker/Cargo.lock +++ b/services/tunnelbroker/Cargo.lock @@ -2457,6 +2457,7 @@ "tower-layer", "tower-service", "tracing", + "webpki-roots", ] [[package]] @@ -2855,6 +2856,15 @@ "untrusted", ] +[[package]] +name = "webpki-roots" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +dependencies = [ + "rustls-webpki", +] + [[package]] name = "which" version = "4.4.0" diff --git a/shared/backup_client/Cargo.lock b/shared/backup_client/Cargo.lock --- a/shared/backup_client/Cargo.lock +++ b/shared/backup_client/Cargo.lock @@ -1176,10 +1176,25 @@ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots", + "webpki-roots 0.25.2", "winreg", ] +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi", +] + [[package]] name = "ring" version = "0.17.6" @@ -1189,8 +1204,8 @@ "cc", "getrandom", "libc", - "spin", - "untrusted", + "spin 0.9.8", + "untrusted 0.9.0", "windows-sys 0.48.0", ] @@ -1229,8 +1244,8 @@ checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9" dependencies = [ "log", - "ring", - "rustls-webpki", + "ring 0.17.6", + "rustls-webpki 0.101.7", "sct", ] @@ -1243,14 +1258,24 @@ "base64", ] +[[package]] +name = "rustls-webpki" +version = "0.100.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3" +dependencies = [ + "ring 0.16.20", + "untrusted 0.7.1", +] + [[package]] name = "rustls-webpki" version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring", - "untrusted", + "ring 0.17.6", + "untrusted 0.9.0", ] [[package]] @@ -1280,8 +1305,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring", - "untrusted", + "ring 0.17.6", + "untrusted 0.9.0", ] [[package]] @@ -1411,6 +1436,12 @@ "windows-sys 0.48.0", ] +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + [[package]] name = "spin" version = "0.9.8" @@ -1615,6 +1646,7 @@ "tower-layer", "tower-service", "tracing", + "webpki-roots 0.23.1", ] [[package]] @@ -1765,6 +1797,12 @@ "tinyvec", ] +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "untrusted" version = "0.9.0" @@ -1904,6 +1942,15 @@ "wasm-bindgen", ] +[[package]] +name = "webpki-roots" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +dependencies = [ + "rustls-webpki 0.100.3", +] + [[package]] name = "webpki-roots" version = "0.25.2" diff --git a/shared/comm-lib/Cargo.lock b/shared/comm-lib/Cargo.lock --- a/shared/comm-lib/Cargo.lock +++ b/shared/comm-lib/Cargo.lock @@ -2315,7 +2315,7 @@ dependencies = [ "log", "ring", - "rustls-webpki", + "rustls-webpki 0.101.6", "sct", ] @@ -2340,6 +2340,16 @@ "base64 0.21.0", ] +[[package]] +name = "rustls-webpki" +version = "0.100.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3" +dependencies = [ + "ring", + "untrusted", +] + [[package]] name = "rustls-webpki" version = "0.101.6" @@ -2793,6 +2803,7 @@ "tower-layer", "tower-service", "tracing", + "webpki-roots", ] [[package]] @@ -3123,6 +3134,15 @@ "untrusted", ] +[[package]] +name = "webpki-roots" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +dependencies = [ + "rustls-webpki 0.100.3", +] + [[package]] name = "which" version = "4.4.2"