Skip to content

Commit

Permalink
improve paths searching
Browse files Browse the repository at this point in the history
  • Loading branch information
thewh1teagle committed Sep 30, 2023
1 parent 23e8d2f commit 967bc2a
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 166 deletions.
2 changes: 1 addition & 1 deletion rookie-rs/bin/main.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use rookie;

fn main() {
let cookies = rookie::chrome(None).unwrap();
let cookies = rookie::firefox(None).unwrap();
println!("{:?}", cookies);
}
66 changes: 66 additions & 0 deletions rookie-rs/src/constants.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#[cfg(target_os = "windows")]
pub const CHROME_PATHS: &'static [&'static str] = &[
"%LOCALAPPDATA%/Google/Chrome/User Data"
];

#[cfg(target_os = "windows")]
pub const BRAVE_PATHS: &'static [&'static str] = &[
"%LOCALAPPDATA%/BraveSoftware/Brave-Browser/User Data"
];

#[cfg(target_os = "windows")]
pub const EDGE_PATHS: &'static [&'static str] = &[
"%LOCALAPPDATA%/Microsoft/Edge/User Data"
];

#[cfg(target_os = "windows")]
pub const FIREFOX_PATHS: &'static [&'static str] = &[
"%APPDATA%/Mozilla/Firefox"
];



#[cfg(target_os = "linux")]
pub const CHROME_PATHS: &'static [&'static str] = &[
"%LOCALAPPDATA%/Google/Chrome/User Data"
];

#[cfg(target_os = "linux")]
pub const BRAVE_PATHS: &'static [&'static str] = &[
"%LOCALAPPDATA%/BraveSoftware/Brave-Browser/User Data"
];

#[cfg(target_os = "linux")]
pub const EDGE_PATHS: &'static [&'static str] = &[
"%LOCALAPPDATA%/Microsoft/Edge/User Data"
];

#[cfg(target_os = "linux")]
pub const FIREFOX_PATHS: &'static [&'static str] = &[
"~/snap/firefox/common/.mozilla/firefox",
"~/.mozilla/firefox"
];



#[cfg(target_os = "macos")]
pub const CHROME_PATHS: &'static [&'static str] = &[
"%LOCALAPPDATA%/Google/Chrome/User Data"
];

#[cfg(target_os = "macos")]
pub const BRAVE_PATHS: &'static [&'static str] = &[
"%LOCALAPPDATA%/BraveSoftware/Brave-Browser/User Data"
];

#[cfg(target_os = "macos")]
pub const EDGE_PATHS: &'static [&'static str] = &[
"%LOCALAPPDATA%/Microsoft/Edge/User Data"
];

#[cfg(target_os = "macos")]
pub const FIREFOX_PATHS: &'static [&'static str] = &[
"~/Library/Application Support/Firefox"
];


16 changes: 8 additions & 8 deletions rookie-rs/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,39 +1,39 @@
pub mod enums;
mod chromium;
use std::error::Error;

#[cfg(target_os = "windows")]
mod winapi;

mod chromium;
mod paths;
mod sqlite;
mod mozilla;
mod utils;
use std::error::Error;

mod enums;
mod constants;
pub use chromium::chromium_based;
pub use mozilla::firefox_based;
pub use enums::*;



pub fn firefox(domains: Option<Vec<&str>>) -> Result<Vec<Cookie>, Box<dyn Error>> {
let db_path = paths::find_firefox_paths()?;
let db_path = paths::find_mozilla_based_paths(constants::FIREFOX_PATHS)?;
firefox_based(db_path, domains)
}

pub fn chrome(domains: Option<Vec<&str>>) -> Result<Vec<Cookie>, Box<dyn Error>> {
let (key, db_path) = paths::find_chrome_paths()?;
let (key, db_path) = paths::find_chrome_based_paths(constants::CHROME_PATHS)?;
chromium_based(key, db_path, domains)
}


pub fn brave(domains: Option<Vec<&str>>) -> Result<Vec<Cookie>, Box<dyn Error>> {
let (key, db_path) = paths::find_brave_paths()?;
let (key, db_path) = paths::find_chrome_based_paths(constants::BRAVE_PATHS)?;
chromium_based(key, db_path, domains)
}

pub fn edge(domains: Option<Vec<&str>>) -> Result<Vec<Cookie>, Box<dyn Error>> {
let (key, db_path) = paths::find_edge_paths()?;
let (key, db_path) = paths::find_chrome_based_paths(constants::EDGE_PATHS)?;
chromium_based(key, db_path, domains)
}

176 changes: 19 additions & 157 deletions rookie-rs/src/paths.rs
Original file line number Diff line number Diff line change
@@ -1,33 +1,10 @@
use std::{env, path::PathBuf};
use crate::mozilla::get_default_profile;
use regex::Regex;


#[cfg(target_os = "windows")]
const CHROME_PATHS: &'static [&'static str] = &[
"%LOCALAPPDATA%/Google/Chrome/User Data"
];

#[cfg(target_os = "windows")]
const BRAVE_PATHS: &'static [&'static str] = &[
"%LOCALAPPDATA%/BraveSoftware/Brave-Browser/User Data"
];

#[cfg(target_os = "windows")]
const EDGE_PATHS: &'static [&'static str] = &[
"%LOCALAPPDATA%/Microsoft/Edge/User Data"
];

#[cfg(target_os = "windows")]
const FIREFOX_PATHS: &'static [&'static str] = &[
"%APPDATA%/Mozilla/Firefox"
];




#[cfg(target_os = "windows")]
pub fn expand_path(path: &str) -> PathBuf {
use regex::Regex;
// Define a regex pattern to match placeholders like %SOMETHING%
let re = Regex::new(r"%([^%]+)%").unwrap();

Expand All @@ -52,49 +29,35 @@ pub fn expand_path(path: &str) -> PathBuf {
path_buf
}

#[cfg(target_os = "windows")]
pub fn find_chrome_paths() -> Result<(PathBuf, PathBuf), Box<dyn std::error::Error>> {
for path in CHROME_PATHS {
let user_data_path = expand_path(path);
let key_path = user_data_path.join("Local State");
let db_path = user_data_path.join("Default/Network/Cookies");
if db_path.exists() {
return Ok((key_path, db_path));
}
}
Err(("cant find any chrome cookies file").into())
}
#[cfg(unix)]
pub fn expand_path(path: &str) -> PathBuf {
// Get the value of the HOME environment variable
let home = env::var("HOME").unwrap();

#[cfg(target_os = "windows")]
pub fn find_brave_paths() -> Result<(PathBuf, PathBuf), Box<dyn std::error::Error>> {
for path in BRAVE_PATHS {
let user_data_path = expand_path(path);
let key_path = user_data_path.join("Local State");
let db_path = user_data_path.join("Default/Network/Cookies");
if db_path.exists() {
return Ok((key_path, db_path));
}
}
Err(("cant find any brave cookies file").into())
// Replace ~ or $HOME with the actual home directory path
let expanded_path = path
.replace("~", &home)
.replace("$HOME", &home);

// Convert the expanded path to a PathBuf
PathBuf::from(expanded_path)
}

#[cfg(target_os = "windows")]
pub fn find_edge_paths() -> Result<(PathBuf, PathBuf), Box<dyn std::error::Error>> {
for path in EDGE_PATHS {

pub fn find_chrome_based_paths(browser_paths: &[&str]) -> Result<(PathBuf, PathBuf), Box<dyn std::error::Error>> {
for path in browser_paths {
let user_data_path = expand_path(path);
let key_path = user_data_path.join("Local State");
let db_path = user_data_path.join("Default/Network/Cookies");
if db_path.exists() {
return Ok((key_path, db_path));
}
}
Err(("cant find any brave cookies file").into())
Err(("can't find any cookies file").into())
}


#[cfg(target_os = "windows")]
pub fn find_firefox_paths() -> Result<PathBuf, Box<dyn std::error::Error>> {
for path in FIREFOX_PATHS {
pub fn find_mozilla_based_paths(browser_paths: &[&str]) -> Result<PathBuf, Box<dyn std::error::Error>> {
for path in browser_paths {
let firefox_path = expand_path(path);
let profiles_path = firefox_path.join("profiles.ini");
let default_profile = get_default_profile(profiles_path.as_path()).unwrap();
Expand All @@ -104,105 +67,4 @@ pub fn find_firefox_paths() -> Result<PathBuf, Box<dyn std::error::Error>> {
}
}
Err(("cant find any brave cookies file").into())
}

#[cfg(target_os = "linux")]
pub fn find_firefox_paths() -> PathBuf {
let username = env::var("USER").unwrap();
let user_home_str = format!("/home/{}", username.as_str());
let user_home_path = path::Path::new(&user_home_str);

let firefox_path = user_home_path.join("snap/firefox/common/.mozilla/firefox");

let profiles_path = firefox_path.join("profiles.ini");
let default_profile = get_default_profile(&profiles_path).unwrap();
let db_path = firefox_path.join(default_profile).join("cookies.sqlite");
db_path
}


#[cfg(target_os = "linux")]
pub fn find_chrome_paths() -> (PathBuf, PathBuf) {
let appdata_path = env::var("APPDATA").unwrap();
let appdata_path = path::Path::new(appdata_path.as_str());
let user_data_path = appdata_path.join("../local/Google/Chrome/User Data");
let key_path = user_data_path.join("Local State");
let db_path = user_data_path.join("Default/Network/Cookies");
(key_path, db_path)
}


#[cfg(target_os = "linux")]
pub fn find_brave_paths() -> (PathBuf, PathBuf) {
let appdata_path = env::var("APPDATA").unwrap();
let appdata_path = path::Path::new(appdata_path.as_str());

let user_data_path = appdata_path.join("../local/BraveSoftware/Brave-Browser/User Data");
let key_path = user_data_path.join("Local State");
let db_path = user_data_path.join("Default/Network/Cookies");
(key_path, db_path)
}

#[cfg(target_os = "linux")]
pub fn find_edge_paths() -> (PathBuf, PathBuf) {
let appdata_path = env::var("APPDATA").unwrap();
let appdata_path = path::Path::new(appdata_path.as_str());

let user_data_path = appdata_path.join("../local/Microsoft/Edge/User Data");
let key_path = user_data_path.join("Local State");
let db_path = user_data_path.join("Default/Network/Cookies");
(key_path, db_path)
}





#[cfg(target_os = "macos")]
pub fn find_firefox_paths() -> PathBuf {
let username = env::var("USER").unwrap();
let user_home_str = format!("/home/{}", username.as_str());
let user_home_path = path::Path::new(&user_home_str);

let firefox_path = user_home_path.join("snap/firefox/common/.mozilla/firefox");

let profiles_path = firefox_path.join("profiles.ini");
let default_profile = get_default_profile(&profiles_path).unwrap();
let db_path = firefox_path.join(default_profile).join("cookies.sqlite");
db_path
}


#[cfg(target_os = "macos")]
pub fn find_chrome_paths() -> (PathBuf, PathBuf) {
let appdata_path = env::var("APPDATA").unwrap();
let appdata_path = path::Path::new(appdata_path.as_str());
let user_data_path = appdata_path.join("../local/Google/Chrome/User Data");
let key_path = user_data_path.join("Local State");
let db_path = user_data_path.join("Default/Network/Cookies");
(key_path, db_path)
}


#[cfg(target_os = "macos")]
pub fn find_brave_paths() -> (PathBuf, PathBuf) {
let appdata_path = env::var("APPDATA").unwrap();
let appdata_path = path::Path::new(appdata_path.as_str());

let user_data_path = appdata_path.join("../local/BraveSoftware/Brave-Browser/User Data");
let key_path = user_data_path.join("Local State");
let db_path = user_data_path.join("Default/Network/Cookies");
(key_path, db_path)
}

#[cfg(target_os = "macos")]
pub fn find_edge_paths() -> (PathBuf, PathBuf) {
let appdata_path = env::var("APPDATA").unwrap();
let appdata_path = path::Path::new(appdata_path.as_str());

let user_data_path = appdata_path.join("../local/Microsoft/Edge/User Data");
let key_path = user_data_path.join("Local State");
let db_path = user_data_path.join("Default/Network/Cookies");
(key_path, db_path)
}

}

0 comments on commit 967bc2a

Please sign in to comment.