mirror of
https://github.com/bitwarden/browser
synced 2025-12-12 06:13:38 +00:00
[PM-27081] Fix direct importers for linux (#17480)
* Fix direct importers for linux
This commit is contained in:
@@ -61,8 +61,8 @@ impl InstalledBrowserRetriever for DefaultInstalledBrowserRetriever {
|
|||||||
let mut browsers = Vec::with_capacity(SUPPORTED_BROWSER_MAP.len());
|
let mut browsers = Vec::with_capacity(SUPPORTED_BROWSER_MAP.len());
|
||||||
|
|
||||||
for (browser, config) in SUPPORTED_BROWSER_MAP.iter() {
|
for (browser, config) in SUPPORTED_BROWSER_MAP.iter() {
|
||||||
let data_dir = get_browser_data_dir(config)?;
|
let data_dir = get_and_validate_data_dir(config);
|
||||||
if data_dir.exists() {
|
if data_dir.is_ok() {
|
||||||
browsers.push((*browser).to_string());
|
browsers.push((*browser).to_string());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -114,7 +114,7 @@ pub async fn import_logins(
|
|||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
pub(crate) struct BrowserConfig {
|
pub(crate) struct BrowserConfig {
|
||||||
pub name: &'static str,
|
pub name: &'static str,
|
||||||
pub data_dir: &'static str,
|
pub data_dir: &'static [&'static str],
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) static SUPPORTED_BROWSER_MAP: LazyLock<
|
pub(crate) static SUPPORTED_BROWSER_MAP: LazyLock<
|
||||||
@@ -126,11 +126,19 @@ pub(crate) static SUPPORTED_BROWSER_MAP: LazyLock<
|
|||||||
.collect::<std::collections::HashMap<_, _>>()
|
.collect::<std::collections::HashMap<_, _>>()
|
||||||
});
|
});
|
||||||
|
|
||||||
fn get_browser_data_dir(config: &BrowserConfig) -> Result<PathBuf> {
|
fn get_and_validate_data_dir(config: &BrowserConfig) -> Result<PathBuf> {
|
||||||
let dir = dirs::home_dir()
|
for data_dir in config.data_dir.iter() {
|
||||||
.ok_or_else(|| anyhow!("Home directory not found"))?
|
let dir = dirs::home_dir()
|
||||||
.join(config.data_dir);
|
.ok_or_else(|| anyhow!("Home directory not found"))?
|
||||||
Ok(dir)
|
.join(data_dir);
|
||||||
|
if dir.exists() {
|
||||||
|
return Ok(dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(anyhow!(
|
||||||
|
"Browser user data directory '{:?}' not found",
|
||||||
|
config.data_dir
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -174,13 +182,7 @@ fn load_local_state_for_browser(browser_name: &String) -> Result<(PathBuf, Local
|
|||||||
.get(browser_name.as_str())
|
.get(browser_name.as_str())
|
||||||
.ok_or_else(|| anyhow!("Unsupported browser: {}", browser_name))?;
|
.ok_or_else(|| anyhow!("Unsupported browser: {}", browser_name))?;
|
||||||
|
|
||||||
let data_dir = get_browser_data_dir(config)?;
|
let data_dir = get_and_validate_data_dir(config)?;
|
||||||
if !data_dir.exists() {
|
|
||||||
return Err(anyhow!(
|
|
||||||
"Browser user data directory '{}' not found",
|
|
||||||
data_dir.display()
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
let local_state = load_local_state(&data_dir)?;
|
let local_state = load_local_state(&data_dir)?;
|
||||||
|
|
||||||
|
|||||||
@@ -18,19 +18,22 @@ use crate::{
|
|||||||
pub(crate) const SUPPORTED_BROWSERS: &[BrowserConfig] = &[
|
pub(crate) const SUPPORTED_BROWSERS: &[BrowserConfig] = &[
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Chrome",
|
name: "Chrome",
|
||||||
data_dir: ".config/google-chrome",
|
data_dir: &[".config/google-chrome"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Chromium",
|
name: "Chromium",
|
||||||
data_dir: "snap/chromium/common/chromium",
|
data_dir: &["snap/chromium/common/chromium"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Brave",
|
name: "Brave",
|
||||||
data_dir: "snap/brave/current/.config/BraveSoftware/Brave-Browser",
|
data_dir: &[
|
||||||
|
"snap/brave/current/.config/BraveSoftware/Brave-Browser",
|
||||||
|
".config/BraveSoftware/Brave-Browser",
|
||||||
|
],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Opera",
|
name: "Opera",
|
||||||
data_dir: "snap/opera/current/.config/opera",
|
data_dir: &["snap/opera/current/.config/opera", ".config/opera"],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -14,31 +14,31 @@ use crate::{
|
|||||||
pub(crate) const SUPPORTED_BROWSERS: &[BrowserConfig] = &[
|
pub(crate) const SUPPORTED_BROWSERS: &[BrowserConfig] = &[
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Chrome",
|
name: "Chrome",
|
||||||
data_dir: "Library/Application Support/Google/Chrome",
|
data_dir: &["Library/Application Support/Google/Chrome"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Chromium",
|
name: "Chromium",
|
||||||
data_dir: "Library/Application Support/Chromium",
|
data_dir: &["Library/Application Support/Chromium"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Microsoft Edge",
|
name: "Microsoft Edge",
|
||||||
data_dir: "Library/Application Support/Microsoft Edge",
|
data_dir: &["Library/Application Support/Microsoft Edge"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Brave",
|
name: "Brave",
|
||||||
data_dir: "Library/Application Support/BraveSoftware/Brave-Browser",
|
data_dir: &["Library/Application Support/BraveSoftware/Brave-Browser"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Arc",
|
name: "Arc",
|
||||||
data_dir: "Library/Application Support/Arc/User Data",
|
data_dir: &["Library/Application Support/Arc/User Data"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Opera",
|
name: "Opera",
|
||||||
data_dir: "Library/Application Support/com.operasoftware.Opera",
|
data_dir: &["Library/Application Support/com.operasoftware.Opera"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Vivaldi",
|
name: "Vivaldi",
|
||||||
data_dir: "Library/Application Support/Vivaldi",
|
data_dir: &["Library/Application Support/Vivaldi"],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -25,27 +25,27 @@ pub use signature::*;
|
|||||||
pub(crate) const SUPPORTED_BROWSERS: &[BrowserConfig] = &[
|
pub(crate) const SUPPORTED_BROWSERS: &[BrowserConfig] = &[
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Brave",
|
name: "Brave",
|
||||||
data_dir: "AppData/Local/BraveSoftware/Brave-Browser/User Data",
|
data_dir: &["AppData/Local/BraveSoftware/Brave-Browser/User Data"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Chrome",
|
name: "Chrome",
|
||||||
data_dir: "AppData/Local/Google/Chrome/User Data",
|
data_dir: &["AppData/Local/Google/Chrome/User Data"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Chromium",
|
name: "Chromium",
|
||||||
data_dir: "AppData/Local/Chromium/User Data",
|
data_dir: &["AppData/Local/Chromium/User Data"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Microsoft Edge",
|
name: "Microsoft Edge",
|
||||||
data_dir: "AppData/Local/Microsoft/Edge/User Data",
|
data_dir: &["AppData/Local/Microsoft/Edge/User Data"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Opera",
|
name: "Opera",
|
||||||
data_dir: "AppData/Roaming/Opera Software/Opera Stable",
|
data_dir: &["AppData/Roaming/Opera Software/Opera Stable"],
|
||||||
},
|
},
|
||||||
BrowserConfig {
|
BrowserConfig {
|
||||||
name: "Vivaldi",
|
name: "Vivaldi",
|
||||||
data_dir: "AppData/Local/Vivaldi/User Data",
|
data_dir: &["AppData/Local/Vivaldi/User Data"],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user