diff --git a/apps/desktop/desktop_native/bitwarden_chromium_importer/src/chromium.rs b/apps/desktop/desktop_native/bitwarden_chromium_importer/src/chromium.rs index 8179a10213d..ba94740bbda 100644 --- a/apps/desktop/desktop_native/bitwarden_chromium_importer/src/chromium.rs +++ b/apps/desktop/desktop_native/bitwarden_chromium_importer/src/chromium.rs @@ -104,10 +104,10 @@ pub async fn import_logins( // Private // -#[derive(Debug)] -struct BrowserConfig { - name: &'static str, - data_dir: &'static str, +#[derive(Debug, Clone, Copy)] +pub struct BrowserConfig { + pub name: &'static str, + pub data_dir: &'static str, } static SUPPORTED_BROWSER_MAP: LazyLock< @@ -132,12 +132,12 @@ fn get_browser_data_dir(config: &BrowserConfig) -> Result { // #[async_trait] -trait CryptoService: Send { +pub trait CryptoService: Send { async fn decrypt_to_string(&mut self, encrypted: &[u8]) -> Result; } #[derive(serde::Deserialize, Clone)] -struct LocalState { +pub struct LocalState { profile: AllProfiles, #[allow(dead_code)] os_crypt: Option, diff --git a/apps/desktop/desktop_native/bitwarden_chromium_importer/src/lib.rs b/apps/desktop/desktop_native/bitwarden_chromium_importer/src/lib.rs index 637391fddf3..85a5debbb4b 100644 --- a/apps/desktop/desktop_native/bitwarden_chromium_importer/src/lib.rs +++ b/apps/desktop/desktop_native/bitwarden_chromium_importer/src/lib.rs @@ -1,2 +1,18 @@ +#[cfg(target_os = "windows")] +pub mod windows; +#[cfg(target_os = "windows")] +pub use crate::windows::SUPPORTED_BROWSERS as PLATFORM_SUPPORTED_BROWSERS; + +#[cfg(target_os = "macos")] +pub mod macos; +#[cfg(target_os = "macos")] +pub use crate::macos::SUPPORTED_BROWSERS as PLATFORM_SUPPORTED_BROWSERS; + +#[cfg(target_os = "linux")] +pub mod linux; +#[cfg(target_os = "linux")] +pub use crate::linux::SUPPORTED_BROWSERS as PLATFORM_SUPPORTED_BROWSERS; + pub mod chromium; pub mod metadata; +pub mod util; diff --git a/apps/desktop/desktop_native/bitwarden_chromium_importer/src/linux.rs b/apps/desktop/desktop_native/bitwarden_chromium_importer/src/linux.rs index 0ead034a4b2..be3bcdb1e1d 100644 --- a/apps/desktop/desktop_native/bitwarden_chromium_importer/src/linux.rs +++ b/apps/desktop/desktop_native/bitwarden_chromium_importer/src/linux.rs @@ -6,7 +6,7 @@ use oo7::XDG_SCHEMA_ATTRIBUTE; use crate::chromium::{BrowserConfig, CryptoService, LocalState}; -mod util; +use crate::util; // // Public API diff --git a/apps/desktop/desktop_native/bitwarden_chromium_importer/src/macos.rs b/apps/desktop/desktop_native/bitwarden_chromium_importer/src/macos.rs index d9aeff68f2b..9dd6ca1e2ca 100644 --- a/apps/desktop/desktop_native/bitwarden_chromium_importer/src/macos.rs +++ b/apps/desktop/desktop_native/bitwarden_chromium_importer/src/macos.rs @@ -3,8 +3,7 @@ use async_trait::async_trait; use security_framework::passwords::get_generic_password; use crate::chromium::{BrowserConfig, CryptoService, LocalState}; - -mod util; +use crate::util; // // Public API diff --git a/apps/desktop/desktop_native/bitwarden_chromium_importer/src/metadata.rs b/apps/desktop/desktop_native/bitwarden_chromium_importer/src/metadata.rs index 78fe428a233..f1fbb860a7e 100644 --- a/apps/desktop/desktop_native/bitwarden_chromium_importer/src/metadata.rs +++ b/apps/desktop/desktop_native/bitwarden_chromium_importer/src/metadata.rs @@ -1,62 +1,49 @@ use serde::Serialize; -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; + +use crate::PLATFORM_SUPPORTED_BROWSERS; #[derive(Serialize)] +/// Mechanisms that load data into the importer pub struct ImporterMetadata { + /// Identifies the importer pub id: String, + /// Describes the strategies used to obtain imported data pub loaders: Vec<&'static str>, + /// Identifies the instructions for the importer pub instructions: &'static str, } -#[cfg(target_os = "windows")] -fn chrome_loaders() -> Vec<&'static str> { - vec!["file"] -} - -#[cfg(any(target_os = "macos", target_os = "linux"))] -fn chrome_loaders() -> Vec<&'static str> { - vec!["file", "chromium"] -} - -#[cfg(target_os = "windows")] -fn brave_loaders() -> Vec<&'static str> { - vec!["file"] -} - -#[cfg(any(target_os = "macos", target_os = "linux"))] -fn brave_loaders() -> Vec<&'static str> { - vec!["file", "chromium"] -} - +/// Returns a map of supported importers based on the current platform. +/// +/// Only browsers listed in PLATFORM_SUPPORTED_BROWSERS will have the "chromium" loader. +/// All importers will have the "file" loader. pub fn get_supported_importers() -> HashMap { let mut map = HashMap::new(); - // force chrome to use target_os dependent loaders - map.insert( - "chromecsv".to_string(), - ImporterMetadata { - id: "chromecsv".to_string(), - loaders: chrome_loaders(), - instructions: "chromium", - }, - ); - // force brave to use target_os dependent loaders - map.insert( - "bravecsv".to_string(), - ImporterMetadata { - id: "bravecsv".to_string(), - loaders: brave_loaders(), - instructions: "chromium", - }, - ); + const IMPORTERS: [(&str, &str); 6] = [ + ("chromecsv", "Chrome"), + ("chromiumcsv", "Chromium"), + ("bravecsv", "Brave"), + ("operacsv", "Opera"), + ("vivaldicsv", "Vivaldi"), + ("edgecsv", "Microsoft Edge"), + ]; + + let supported: HashSet<&'static str> = + PLATFORM_SUPPORTED_BROWSERS.iter().map(|b| b.name).collect(); + + for (id, browser_name) in IMPORTERS { + let mut loaders: Vec<&'static str> = vec!["file"]; + if supported.contains(browser_name) { + loaders.push("chromium"); + } - // all other chromium based browsers support file & chromium loaders on all platforms - for id in ["operacsv", "vivaldicsv", "edgecsv"] { map.insert( id.to_string(), ImporterMetadata { id: id.to_string(), - loaders: vec!["file", "chromium"], + loaders, instructions: "chromium", }, ); diff --git a/apps/desktop/desktop_native/bitwarden_chromium_importer/src/windows.rs b/apps/desktop/desktop_native/bitwarden_chromium_importer/src/windows.rs index e7dffe93dba..cf911fdb34b 100644 --- a/apps/desktop/desktop_native/bitwarden_chromium_importer/src/windows.rs +++ b/apps/desktop/desktop_native/bitwarden_chromium_importer/src/windows.rs @@ -10,17 +10,18 @@ use windows::Win32::Foundation::{LocalFree, HLOCAL}; use crate::chromium::{BrowserConfig, CryptoService, LocalState}; #[allow(dead_code)] -mod util; +use crate::util; // // Public API // -pub const SUPPORTED_BROWSERS: [BrowserConfig; 6] = [ - BrowserConfig { - name: "Chrome", - data_dir: "AppData/Local/Google/Chrome/User Data", - }, +// IMPORTANT adjust array size when enabling / disabling chromium importers here +pub const SUPPORTED_BROWSERS: [BrowserConfig; 4] = [ + // BrowserConfig { + // name: "Chrome", + // data_dir: "AppData/Local/Google/Chrome/User Data", + // }, BrowserConfig { name: "Chromium", data_dir: "AppData/Local/Chromium/User Data", @@ -29,10 +30,10 @@ pub const SUPPORTED_BROWSERS: [BrowserConfig; 6] = [ name: "Microsoft Edge", data_dir: "AppData/Local/Microsoft/Edge/User Data", }, - BrowserConfig { - name: "Brave", - data_dir: "AppData/Local/BraveSoftware/Brave-Browser/User Data", - }, + // BrowserConfig { + // name: "Brave", + // data_dir: "AppData/Local/BraveSoftware/Brave-Browser/User Data", + // }, BrowserConfig { name: "Opera", data_dir: "AppData/Roaming/Opera Software/Opera Stable",