Skip to content

Commit

Permalink
Chrome: Use Path.glob to get login data paths
Browse files Browse the repository at this point in the history
  • Loading branch information
ilija-lazoroski committed Sep 12, 2023
1 parent f56b0ef commit 06512dd
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,11 @@ class LinuxCredentialsDatabaseSelector:
def __call__(self) -> Collection[BrowserCredentialsDatabasePath]:
database_paths: Set[BrowserCredentialsDatabasePath] = set()
for browser_database_path in self._get_browser_database_paths():
login_data_paths = self._get_login_data_paths(browser_database_path)
database_paths.update(login_data_paths)
try:
login_data_paths = self._get_login_data_paths(browser_database_path)
database_paths.update(login_data_paths)
except Exception:
logger.debug("Failed to get login data paths for: {browser_database_path}")

return database_paths

Expand Down Expand Up @@ -66,25 +69,11 @@ def _get_login_data_paths(
self, browser_database_path: Path
) -> Collection[BrowserCredentialsDatabasePath]:
login_data_paths: Set[BrowserCredentialsDatabasePath] = set()
try:
if (browser_database_path / LOGIN_DATABASE_FILENAME).exists():
login_data_paths.add(
BrowserCredentialsDatabasePath(
database_file_path=(browser_database_path / LOGIN_DATABASE_FILENAME),
master_key=DEFAULT_MASTER_KEY,
)
for login_database_path in browser_database_path.glob(f"**/{LOGIN_DATABASE_FILENAME}"):
login_data_paths.add(
BrowserCredentialsDatabasePath(
database_file_path=login_database_path, master_key=DEFAULT_MASTER_KEY
)

sub_browser_database_paths = browser_database_path.iterdir()
for subdir in sub_browser_database_paths:
login_database_path = browser_database_path / subdir / LOGIN_DATABASE_FILENAME
if login_database_path.exists():
login_data_paths.add(
BrowserCredentialsDatabasePath(
database_file_path=login_database_path, master_key=DEFAULT_MASTER_KEY
)
)
except Exception as err:
logger.debug(f"Could not list {browser_database_path}: {err}")
)

return login_data_paths
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def test_linux_credentials_database_selector(
("exists", PermissionError),
],
)
def test_linux_credentials_database_selector__exists_exception(
def test_linux_credentials_database_selector__exception(
monkeypatch, patch_pwd_getpwall, linux_credentials_database_selector, error, method
):
def mock_method(path):
Expand All @@ -144,14 +144,14 @@ def mock_method(path):
@pytest.mark.parametrize(
"method, error",
[
("iterdir", Exception),
("iterdir", PermissionError),
("glob", Exception),
("glob", PermissionError),
],
)
def test_linux_credentials_database_selector__iterdir_exception(
monkeypatch, patch_pwd_getpwall, linux_credentials_database_selector, error, method, tmp_path
def test_linux_credentials_database_selector__glob_exception(
monkeypatch, patch_pwd_getpwall, linux_credentials_database_selector, error, method
):
def mock_method(path):
def mock_method(pattern, al):
raise error()

monkeypatch.setattr(
Expand All @@ -160,9 +160,4 @@ def mock_method(path):
)
actual_login_database_paths = linux_credentials_database_selector()

assert list(actual_login_database_paths) == [
BrowserCredentialsDatabasePath(
database_file_path=Path(f"{tmp_path}/home/{USERNAME_2}/{CHROMIUM_PATH}/Login Data"),
master_key=DEFAULT_MASTER_KEY,
)
]
assert list(actual_login_database_paths) == []

0 comments on commit 06512dd

Please sign in to comment.