mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2025-09-05 05:48:42 +00:00
Refactor password manager modules
This commit is contained in:
@@ -38,11 +38,11 @@ consts.SCRIPT_CHECKSUM_FILE = consts.APP_DIR / "seedpass_script_checksum.txt"
|
||||
|
||||
from constants import APP_DIR, initialize_app
|
||||
from utils.key_derivation import derive_key_from_password, derive_index_key
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.entry_management import EntryManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from nostr.client import NostrClient
|
||||
from utils.fingerprint import generate_fingerprint
|
||||
from utils.fingerprint_manager import FingerprintManager
|
||||
|
@@ -14,7 +14,7 @@ from constants import SCRIPT_CHECKSUM_FILE, initialize_app
|
||||
def main() -> None:
|
||||
"""Calculate checksum for the main script and write it to SCRIPT_CHECKSUM_FILE."""
|
||||
initialize_app()
|
||||
script_path = SRC_DIR / "password_manager" / "manager.py"
|
||||
script_path = SRC_DIR / "seedpass/core" / "manager.py"
|
||||
if not update_checksum_file(str(script_path), str(SCRIPT_CHECKSUM_FILE)):
|
||||
raise SystemExit(f"Failed to update checksum for {script_path}")
|
||||
print(f"Updated checksum written to {SCRIPT_CHECKSUM_FILE}")
|
||||
|
@@ -20,9 +20,9 @@ from termcolor import colored
|
||||
from utils.color_scheme import color_text
|
||||
import traceback
|
||||
|
||||
from password_manager.manager import PasswordManager
|
||||
from seedpass.core.manager import PasswordManager
|
||||
from nostr.client import NostrClient
|
||||
from password_manager.entry_types import EntryType
|
||||
from seedpass.core.entry_types import EntryType
|
||||
from constants import INACTIVITY_TIMEOUT, initialize_app
|
||||
from utils.password_prompt import PasswordPromptError
|
||||
from utils import (
|
||||
|
@@ -26,12 +26,12 @@ from nostr_sdk import EventId, Timestamp
|
||||
|
||||
from .key_manager import KeyManager as SeedPassKeyManager
|
||||
from .backup_models import Manifest, ChunkMeta, KIND_MANIFEST, KIND_SNAPSHOT_CHUNK
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from constants import MAX_RETRIES, RETRY_DELAY
|
||||
from utils.file_lock import exclusive_lock
|
||||
|
||||
if TYPE_CHECKING: # pragma: no cover - imported for type hints
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
# Backwards compatibility for tests that patch these symbols
|
||||
KeyManager = SeedPassKeyManager
|
||||
@@ -295,8 +295,8 @@ class NostrClient:
|
||||
|
||||
if retries is None or delay is None:
|
||||
if self.config_manager is None:
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.vault import Vault
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.vault import Vault
|
||||
|
||||
cfg_mgr = ConfigManager(
|
||||
Vault(self.encryption_manager, self.fingerprint_dir),
|
||||
|
@@ -14,8 +14,8 @@ import asyncio
|
||||
import sys
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
from password_manager.manager import PasswordManager
|
||||
from password_manager.entry_types import EntryType
|
||||
from seedpass.core.manager import PasswordManager
|
||||
from seedpass.core.entry_types import EntryType
|
||||
|
||||
|
||||
app = FastAPI()
|
||||
|
@@ -4,8 +4,8 @@ import json
|
||||
|
||||
import typer
|
||||
|
||||
from password_manager.manager import PasswordManager
|
||||
from password_manager.entry_types import EntryType
|
||||
from seedpass.core.manager import PasswordManager
|
||||
from seedpass.core.entry_types import EntryType
|
||||
import uvicorn
|
||||
from . import api as api_module
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# password_manager/__init__.py
|
||||
# seedpass.core/__init__.py
|
||||
|
||||
"""Expose password manager components with lazy imports."""
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# password_manager/backup.py
|
||||
# seedpass.core/backup.py
|
||||
|
||||
"""
|
||||
Backup Manager Module
|
||||
@@ -19,7 +19,7 @@ import traceback
|
||||
from pathlib import Path
|
||||
from termcolor import colored
|
||||
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from .config_manager import ConfigManager
|
||||
|
||||
from utils.file_lock import exclusive_lock
|
||||
from constants import APP_DIR
|
@@ -10,7 +10,7 @@ from utils.seed_prompt import masked_input
|
||||
|
||||
import bcrypt
|
||||
|
||||
from password_manager.vault import Vault
|
||||
from .vault import Vault
|
||||
from nostr.client import DEFAULT_RELAYS as DEFAULT_NOSTR_RELAYS
|
||||
|
||||
from constants import INACTIVITY_TIMEOUT
|
||||
@@ -251,7 +251,7 @@ class ConfigManager:
|
||||
# Password policy settings
|
||||
def get_password_policy(self) -> "PasswordPolicy":
|
||||
"""Return the password complexity policy."""
|
||||
from password_manager.password_generation import PasswordPolicy
|
||||
from .password_generation import PasswordPolicy
|
||||
|
||||
cfg = self.load_config(require_pin=False)
|
||||
return PasswordPolicy(
|
@@ -1,4 +1,4 @@
|
||||
# /src/password_manager/encryption.py
|
||||
# /src/seedpass.core/encryption.py
|
||||
|
||||
import logging
|
||||
import traceback
|
@@ -1,4 +1,4 @@
|
||||
# password_manager/entry_management.py
|
||||
# seedpass.core/entry_management.py
|
||||
|
||||
"""
|
||||
Entry Management Module
|
||||
@@ -31,14 +31,14 @@ from typing import Optional, Tuple, Dict, Any, List
|
||||
from pathlib import Path
|
||||
|
||||
from termcolor import colored
|
||||
from password_manager.migrations import LATEST_VERSION
|
||||
from password_manager.entry_types import EntryType
|
||||
from password_manager.totp import TotpManager
|
||||
from .migrations import LATEST_VERSION
|
||||
from .entry_types import EntryType
|
||||
from .totp import TotpManager
|
||||
from utils.fingerprint import generate_fingerprint
|
||||
from utils.checksum import canonical_json_dumps
|
||||
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.backup import BackupManager
|
||||
from .vault import Vault
|
||||
from .backup import BackupManager
|
||||
|
||||
|
||||
# Instantiate the logger
|
||||
@@ -312,7 +312,7 @@ class EntryManager:
|
||||
if not entry or (etype != EntryType.SSH.value and kind != EntryType.SSH.value):
|
||||
raise ValueError("Entry is not an SSH key entry")
|
||||
|
||||
from password_manager.password_generation import derive_ssh_key_pair
|
||||
from .password_generation import derive_ssh_key_pair
|
||||
|
||||
key_index = int(entry.get("index", index))
|
||||
return derive_ssh_key_pair(parent_seed, key_index)
|
||||
@@ -360,7 +360,7 @@ class EntryManager:
|
||||
if not entry or (etype != EntryType.PGP.value and kind != EntryType.PGP.value):
|
||||
raise ValueError("Entry is not a PGP key entry")
|
||||
|
||||
from password_manager.password_generation import derive_pgp_key
|
||||
from .password_generation import derive_pgp_key
|
||||
from local_bip85.bip85 import BIP85
|
||||
from bip_utils import Bip39SeedGenerator
|
||||
|
||||
@@ -501,7 +501,7 @@ class EntryManager:
|
||||
):
|
||||
raise ValueError("Entry is not a seed entry")
|
||||
|
||||
from password_manager.password_generation import derive_seed_phrase
|
||||
from .password_generation import derive_seed_phrase
|
||||
from local_bip85.bip85 import BIP85
|
||||
from bip_utils import Bip39SeedGenerator
|
||||
|
||||
@@ -530,7 +530,7 @@ class EntryManager:
|
||||
if index is None:
|
||||
index = self.get_next_index()
|
||||
|
||||
from password_manager.password_generation import derive_seed_phrase
|
||||
from .password_generation import derive_seed_phrase
|
||||
from local_bip85.bip85 import BIP85
|
||||
from bip_utils import Bip39SeedGenerator
|
||||
|
||||
@@ -576,7 +576,7 @@ class EntryManager:
|
||||
):
|
||||
raise ValueError("Entry is not a managed account entry")
|
||||
|
||||
from password_manager.password_generation import derive_seed_phrase
|
||||
from .password_generation import derive_seed_phrase
|
||||
from local_bip85.bip85 import BIP85
|
||||
from bip_utils import Bip39SeedGenerator
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# password_manager/entry_types.py
|
||||
# seedpass.core/entry_types.py
|
||||
"""Enumerations for entry types used by SeedPass."""
|
||||
|
||||
from enum import Enum
|
@@ -1,4 +1,4 @@
|
||||
# password_manager/manager.py
|
||||
# seedpass.core/manager.py
|
||||
|
||||
"""
|
||||
Password Manager Module
|
||||
@@ -25,14 +25,14 @@ from termcolor import colored
|
||||
from utils.color_scheme import color_text
|
||||
from utils.input_utils import timed_input
|
||||
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.password_generation import PasswordGenerator
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.portable_backup import export_backup, import_backup
|
||||
from password_manager.totp import TotpManager
|
||||
from password_manager.entry_types import EntryType
|
||||
from .encryption import EncryptionManager
|
||||
from .entry_management import EntryManager
|
||||
from .password_generation import PasswordGenerator
|
||||
from .backup import BackupManager
|
||||
from .vault import Vault
|
||||
from .portable_backup import export_backup, import_backup
|
||||
from .totp import TotpManager
|
||||
from .entry_types import EntryType
|
||||
from utils.key_derivation import (
|
||||
derive_key_from_parent_seed,
|
||||
derive_key_from_password,
|
||||
@@ -64,7 +64,7 @@ from utils.terminal_utils import (
|
||||
)
|
||||
from utils.fingerprint import generate_fingerprint
|
||||
from constants import MIN_HEALTHY_RELAYS
|
||||
from password_manager.migrations import LATEST_VERSION
|
||||
from .migrations import LATEST_VERSION
|
||||
|
||||
from constants import (
|
||||
APP_DIR,
|
||||
@@ -94,7 +94,7 @@ from utils.fingerprint_manager import FingerprintManager
|
||||
|
||||
# Import NostrClient
|
||||
from nostr.client import NostrClient, DEFAULT_RELAYS
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from .config_manager import ConfigManager
|
||||
|
||||
# Instantiate the logger
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -1579,7 +1579,7 @@ class PasswordManager:
|
||||
print(colored("Seed Phrase:", "cyan"))
|
||||
print(color_text(phrase, "deterministic"))
|
||||
if confirm_action("Show Compact Seed QR? (Y/N): "):
|
||||
from password_manager.seedqr import encode_seedqr
|
||||
from .seedqr import encode_seedqr
|
||||
|
||||
TotpManager.print_qr_code(encode_seedqr(phrase))
|
||||
try:
|
||||
@@ -1841,7 +1841,7 @@ class PasswordManager:
|
||||
else:
|
||||
print(color_text(seed, "deterministic"))
|
||||
if confirm_action("Show Compact Seed QR? (Y/N): "):
|
||||
from password_manager.seedqr import encode_seedqr
|
||||
from .seedqr import encode_seedqr
|
||||
|
||||
TotpManager.print_qr_code(encode_seedqr(seed))
|
||||
try:
|
||||
@@ -2075,7 +2075,7 @@ class PasswordManager:
|
||||
)
|
||||
|
||||
print(color_text(seed, "deterministic"))
|
||||
from password_manager.seedqr import encode_seedqr
|
||||
from .seedqr import encode_seedqr
|
||||
|
||||
TotpManager.print_qr_code(encode_seedqr(seed))
|
||||
pause()
|
@@ -1,4 +1,4 @@
|
||||
# password_manager/password_generation.py
|
||||
# seedpass.core/password_generation.py
|
||||
|
||||
"""
|
||||
Password Generation Module
|
||||
@@ -43,7 +43,7 @@ except ModuleNotFoundError: # pragma: no cover - fallback for removed module
|
||||
from local_bip85.bip85 import BIP85
|
||||
|
||||
from constants import DEFAULT_PASSWORD_LENGTH, MIN_PASSWORD_LENGTH, MAX_PASSWORD_LENGTH
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from .encryption import EncryptionManager
|
||||
|
||||
# Instantiate the logger
|
||||
logger = logging.getLogger(__name__)
|
@@ -12,14 +12,14 @@ import asyncio
|
||||
from enum import Enum
|
||||
from pathlib import Path
|
||||
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.backup import BackupManager
|
||||
from .vault import Vault
|
||||
from .backup import BackupManager
|
||||
from nostr.client import NostrClient
|
||||
from utils.key_derivation import (
|
||||
derive_index_key,
|
||||
EncryptionMode,
|
||||
)
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from .encryption import EncryptionManager
|
||||
from utils.checksum import json_checksum, canonical_json_dumps
|
||||
|
||||
logger = logging.getLogger(__name__)
|
@@ -5,8 +5,8 @@ from pathlib import Path
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from utils.key_derivation import (
|
||||
derive_index_key,
|
||||
derive_key_from_password,
|
||||
|
@@ -7,10 +7,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
class FakePasswordGenerator:
|
||||
|
@@ -4,9 +4,9 @@ from tempfile import TemporaryDirectory
|
||||
|
||||
from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_entry_manager_additional_backup(monkeypatch):
|
||||
|
@@ -8,10 +8,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
class FakePasswordGenerator:
|
||||
|
@@ -6,9 +6,9 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def setup_entry_mgr(tmp_path: Path) -> EntryManager:
|
||||
|
@@ -10,10 +10,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
|
||||
|
||||
def setup_entry_mgr(tmp_path: Path) -> EntryManager:
|
||||
|
@@ -6,7 +6,7 @@ import sys
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.manager import PasswordManager
|
||||
from seedpass.core.manager import PasswordManager
|
||||
from constants import MIN_HEALTHY_RELAYS
|
||||
|
||||
|
||||
|
@@ -4,8 +4,8 @@ from pathlib import Path
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.manager import PasswordManager
|
||||
import password_manager.manager as manager_module
|
||||
from seedpass.core.manager import PasswordManager
|
||||
import seedpass.core.manager as manager_module
|
||||
|
||||
|
||||
def test_switch_fingerprint_triggers_bg_sync(monkeypatch, tmp_path):
|
||||
@@ -23,16 +23,14 @@ def test_switch_fingerprint_triggers_bg_sync(monkeypatch, tmp_path):
|
||||
|
||||
monkeypatch.setattr("builtins.input", lambda *_a, **_k: "1")
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.prompt_existing_password", lambda *_a, **_k: "pw"
|
||||
"seedpass.core.manager.prompt_existing_password", lambda *_a, **_k: "pw"
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
PasswordManager, "setup_encryption_manager", lambda *a, **k: True
|
||||
)
|
||||
monkeypatch.setattr(PasswordManager, "initialize_bip85", lambda *a, **k: None)
|
||||
monkeypatch.setattr(PasswordManager, "initialize_managers", lambda *a, **k: None)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.NostrClient", lambda *a, **kw: object()
|
||||
)
|
||||
monkeypatch.setattr("seedpass.core.manager.NostrClient", lambda *a, **kw: object())
|
||||
|
||||
calls = {"count": 0}
|
||||
|
||||
|
@@ -4,8 +4,8 @@ from tempfile import TemporaryDirectory
|
||||
|
||||
from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_backup_interval(monkeypatch):
|
||||
|
@@ -8,8 +8,8 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_backup_restore_workflow(monkeypatch):
|
||||
|
@@ -5,7 +5,7 @@ import pytest
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from local_bip85.bip85 import BIP85, Bip85Error
|
||||
from password_manager.password_generation import (
|
||||
from seedpass.core.password_generation import (
|
||||
derive_ssh_key,
|
||||
derive_seed_phrase,
|
||||
)
|
||||
|
@@ -8,7 +8,7 @@ sys.path.append(str(Path(__file__).resolve().parents[1] / "src"))
|
||||
|
||||
from typer.testing import CliRunner
|
||||
from seedpass import cli
|
||||
from password_manager.entry_types import EntryType
|
||||
from seedpass.core.entry_types import EntryType
|
||||
|
||||
|
||||
class DummyPM:
|
||||
|
@@ -6,9 +6,9 @@ import sys
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
import main
|
||||
from password_manager.portable_backup import export_backup, import_backup
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.backup import BackupManager
|
||||
from seedpass.core.portable_backup import export_backup, import_backup
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from helpers import create_vault, TEST_SEED
|
||||
|
||||
|
||||
|
@@ -5,7 +5,7 @@ from pathlib import Path
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
import main
|
||||
from password_manager.entry_types import EntryType
|
||||
from seedpass.core.entry_types import EntryType
|
||||
|
||||
|
||||
def make_pm(search_results, entry=None, totp_code="123456"):
|
||||
|
@@ -6,10 +6,10 @@ from helpers import TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from utils.key_derivation import derive_index_key, derive_key_from_password
|
||||
|
||||
|
||||
|
@@ -7,8 +7,8 @@ import sys
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.vault import Vault
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.vault import Vault
|
||||
from nostr.client import DEFAULT_RELAYS
|
||||
from constants import INACTIVITY_TIMEOUT
|
||||
|
||||
|
@@ -7,10 +7,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_retrieve_entry_shows_custom_fields(monkeypatch, capsys):
|
||||
|
@@ -6,7 +6,7 @@ sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
from types import SimpleNamespace
|
||||
from pathlib import Path
|
||||
|
||||
from password_manager.manager import PasswordManager
|
||||
from seedpass.core.manager import PasswordManager
|
||||
from utils.key_derivation import EncryptionMode
|
||||
|
||||
|
||||
|
@@ -7,10 +7,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
class FakePasswordGenerator:
|
||||
|
@@ -8,7 +8,7 @@ import base64
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from utils.checksum import verify_and_update_checksum
|
||||
|
||||
|
||||
|
@@ -8,7 +8,7 @@ import base64
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
|
||||
|
||||
def test_json_save_and_load_round_trip():
|
||||
|
@@ -5,10 +5,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_list_entries_empty():
|
||||
|
@@ -8,10 +8,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_add_and_retrieve_entry():
|
||||
|
@@ -5,10 +5,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_update_checksum_writes_to_expected_path():
|
||||
|
@@ -8,11 +8,11 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.totp import TotpManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.totp import TotpManager
|
||||
|
||||
|
||||
class FakeNostrClient:
|
||||
@@ -42,9 +42,7 @@ def test_handle_export_totp_codes(monkeypatch, tmp_path):
|
||||
|
||||
export_path = tmp_path / "out.json"
|
||||
monkeypatch.setattr("builtins.input", lambda *a, **k: str(export_path))
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.confirm_action", lambda *_a, **_k: False
|
||||
)
|
||||
monkeypatch.setattr("seedpass.core.manager.confirm_action", lambda *_a, **_k: False)
|
||||
|
||||
pm.handle_export_totp_codes()
|
||||
|
||||
|
@@ -9,7 +9,7 @@ import base64
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from utils.fingerprint import generate_fingerprint
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
|
||||
|
||||
def test_generate_fingerprint_deterministic():
|
||||
|
@@ -4,10 +4,10 @@ from tempfile import TemporaryDirectory
|
||||
|
||||
from helpers import create_vault, dummy_nostr_client
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
|
||||
|
||||
def _init_pm(dir_path: Path, client) -> PasswordManager:
|
||||
|
@@ -4,10 +4,10 @@ from tempfile import TemporaryDirectory
|
||||
|
||||
from helpers import create_vault, dummy_nostr_client
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
|
||||
|
||||
def _init_pm(dir_path: Path, client) -> PasswordManager:
|
||||
|
@@ -9,7 +9,7 @@ from utils.key_derivation import (
|
||||
derive_key_from_password_argon2,
|
||||
derive_index_key,
|
||||
)
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
|
||||
|
||||
cfg_values = st.one_of(
|
||||
|
@@ -3,9 +3,9 @@ from tempfile import TemporaryDirectory
|
||||
from unittest.mock import patch
|
||||
|
||||
from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_index_caching():
|
||||
|
@@ -7,8 +7,8 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from password_manager.vault import Vault
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from seedpass.core.vault import Vault
|
||||
from utils.key_derivation import derive_index_key, derive_key_from_password
|
||||
|
||||
SEED = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
|
||||
|
@@ -8,10 +8,10 @@ from utils.key_derivation import (
|
||||
derive_key_from_password_argon2,
|
||||
derive_index_key,
|
||||
)
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
|
||||
TEST_SEED = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
|
||||
TEST_PASSWORD = "pw"
|
||||
@@ -59,12 +59,12 @@ def test_setup_encryption_manager_kdf_modes(monkeypatch):
|
||||
cfg = _setup_profile(path, mode)
|
||||
pm = _make_pm(path, cfg)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.prompt_existing_password",
|
||||
"seedpass.core.manager.prompt_existing_password",
|
||||
lambda *_: TEST_PASSWORD,
|
||||
)
|
||||
if mode == "argon2":
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.derive_key_from_password_argon2",
|
||||
"seedpass.core.manager.derive_key_from_password_argon2",
|
||||
lambda pw: derive_key_from_password_argon2(pw, **argon_kwargs),
|
||||
)
|
||||
monkeypatch.setattr(PasswordManager, "initialize_bip85", lambda self: None)
|
||||
|
@@ -6,9 +6,9 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def setup_entry_mgr(tmp_path: Path) -> EntryManager:
|
||||
|
@@ -3,9 +3,9 @@ from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
import constants
|
||||
import password_manager.manager as manager_module
|
||||
import seedpass.core.manager as manager_module
|
||||
from utils.fingerprint_manager import FingerprintManager
|
||||
from password_manager.manager import EncryptionMode
|
||||
from seedpass.core.manager import EncryptionMode
|
||||
|
||||
from helpers import TEST_SEED
|
||||
|
||||
|
@@ -6,10 +6,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.entry_types import EntryType
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.entry_types import EntryType
|
||||
|
||||
|
||||
def setup_entry_manager(tmp_path: Path) -> EntryManager:
|
||||
|
@@ -4,14 +4,14 @@ from tempfile import TemporaryDirectory
|
||||
|
||||
from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
from utils.fingerprint import generate_fingerprint
|
||||
import password_manager.manager as manager_module
|
||||
from password_manager.manager import EncryptionMode
|
||||
import seedpass.core.manager as manager_module
|
||||
from seedpass.core.manager import EncryptionMode
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def setup_entry_manager(tmp_path: Path) -> EntryManager:
|
||||
|
@@ -4,15 +4,15 @@ from tempfile import TemporaryDirectory
|
||||
|
||||
from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
from utils.fingerprint import generate_fingerprint
|
||||
import password_manager.manager as manager_module
|
||||
from password_manager.manager import EncryptionMode
|
||||
import seedpass.core.manager as manager_module
|
||||
from seedpass.core.manager import EncryptionMode
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.password_generation import derive_seed_phrase
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.password_generation import derive_seed_phrase
|
||||
from local_bip85.bip85 import BIP85
|
||||
from bip_utils import Bip39SeedGenerator
|
||||
|
||||
|
@@ -7,10 +7,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
class FakeNostrClient:
|
||||
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
import queue
|
||||
|
||||
|
||||
@@ -29,8 +29,8 @@ def test_handle_verify_checksum_success(monkeypatch, tmp_path, capsys):
|
||||
pm = _make_pm()
|
||||
chk_file = tmp_path / "chk.txt"
|
||||
chk_file.write_text("abc")
|
||||
monkeypatch.setattr("password_manager.manager.SCRIPT_CHECKSUM_FILE", chk_file)
|
||||
monkeypatch.setattr("password_manager.manager.calculate_checksum", lambda _: "abc")
|
||||
monkeypatch.setattr("seedpass.core.manager.SCRIPT_CHECKSUM_FILE", chk_file)
|
||||
monkeypatch.setattr("seedpass.core.manager.calculate_checksum", lambda _: "abc")
|
||||
pm.handle_verify_checksum()
|
||||
out = capsys.readouterr().out
|
||||
assert "Checksum verification passed." in out
|
||||
@@ -40,8 +40,8 @@ def test_handle_verify_checksum_failure(monkeypatch, tmp_path, capsys):
|
||||
pm = _make_pm()
|
||||
chk_file = tmp_path / "chk.txt"
|
||||
chk_file.write_text("xyz")
|
||||
monkeypatch.setattr("password_manager.manager.SCRIPT_CHECKSUM_FILE", chk_file)
|
||||
monkeypatch.setattr("password_manager.manager.calculate_checksum", lambda _: "abc")
|
||||
monkeypatch.setattr("seedpass.core.manager.SCRIPT_CHECKSUM_FILE", chk_file)
|
||||
monkeypatch.setattr("seedpass.core.manager.calculate_checksum", lambda _: "abc")
|
||||
pm.handle_verify_checksum()
|
||||
out = capsys.readouterr().out
|
||||
assert "Checksum verification failed" in out
|
||||
@@ -50,13 +50,13 @@ def test_handle_verify_checksum_failure(monkeypatch, tmp_path, capsys):
|
||||
def test_handle_verify_checksum_missing(monkeypatch, tmp_path, capsys):
|
||||
pm = _make_pm()
|
||||
chk_file = tmp_path / "chk.txt"
|
||||
monkeypatch.setattr("password_manager.manager.SCRIPT_CHECKSUM_FILE", chk_file)
|
||||
monkeypatch.setattr("password_manager.manager.calculate_checksum", lambda _: "abc")
|
||||
monkeypatch.setattr("seedpass.core.manager.SCRIPT_CHECKSUM_FILE", chk_file)
|
||||
monkeypatch.setattr("seedpass.core.manager.calculate_checksum", lambda _: "abc")
|
||||
|
||||
def raise_missing(*_args, **_kwargs):
|
||||
raise FileNotFoundError
|
||||
|
||||
monkeypatch.setattr("password_manager.manager.verify_checksum", raise_missing)
|
||||
monkeypatch.setattr("seedpass.core.manager.verify_checksum", raise_missing)
|
||||
pm.handle_verify_checksum()
|
||||
note = pm.notifications.get_nowait()
|
||||
assert note.level == "WARNING"
|
||||
|
@@ -5,7 +5,7 @@ import sys
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.manager import PasswordManager, Notification
|
||||
from seedpass.core.manager import PasswordManager, Notification
|
||||
from constants import NOTIFICATION_DURATION
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ def _make_pm():
|
||||
def test_notify_sets_current(monkeypatch):
|
||||
pm = _make_pm()
|
||||
current = {"val": 100.0}
|
||||
monkeypatch.setattr("password_manager.manager.time.time", lambda: current["val"])
|
||||
monkeypatch.setattr("seedpass.core.manager.time.time", lambda: current["val"])
|
||||
pm.notify("hello")
|
||||
note = pm._current_notification
|
||||
assert hasattr(note, "message")
|
||||
@@ -32,7 +32,7 @@ def test_notify_sets_current(monkeypatch):
|
||||
def test_get_current_notification_ttl(monkeypatch):
|
||||
pm = _make_pm()
|
||||
now = {"val": 0.0}
|
||||
monkeypatch.setattr("password_manager.manager.time.time", lambda: now["val"])
|
||||
monkeypatch.setattr("seedpass.core.manager.time.time", lambda: now["val"])
|
||||
pm.notify("note1")
|
||||
|
||||
assert pm.get_current_notification().message == "note1"
|
||||
|
@@ -6,10 +6,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
class FakeNostrClient:
|
||||
@@ -50,7 +50,7 @@ def test_handle_display_totp_codes(monkeypatch, capsys):
|
||||
|
||||
# interrupt the loop after first iteration
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.timed_input",
|
||||
"seedpass.core.manager.timed_input",
|
||||
lambda *a, **k: (_ for _ in ()).throw(KeyboardInterrupt()),
|
||||
)
|
||||
|
||||
@@ -91,7 +91,7 @@ def test_display_totp_codes_excludes_archived(monkeypatch, capsys):
|
||||
)
|
||||
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.timed_input",
|
||||
"seedpass.core.manager.timed_input",
|
||||
lambda *a, **k: (_ for _ in ()).throw(KeyboardInterrupt()),
|
||||
)
|
||||
|
||||
|
@@ -6,10 +6,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
class FakeNostrClient:
|
||||
@@ -49,8 +49,8 @@ def test_edit_totp_period_from_retrieve(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
pm.entry_manager, "get_totp_time_remaining", lambda *a, **k: 1
|
||||
)
|
||||
monkeypatch.setattr("password_manager.manager.time.sleep", lambda *a, **k: None)
|
||||
monkeypatch.setattr("password_manager.manager.timed_input", lambda *a, **k: "b")
|
||||
monkeypatch.setattr("seedpass.core.manager.time.sleep", lambda *a, **k: None)
|
||||
monkeypatch.setattr("seedpass.core.manager.timed_input", lambda *a, **k: "b")
|
||||
|
||||
pm.handle_retrieve_entry()
|
||||
entry = entry_mgr.retrieve_entry(0)
|
||||
|
@@ -10,11 +10,11 @@ import sys
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.entry_types import EntryType
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.entry_types import EntryType
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_handle_list_entries(monkeypatch, capsys):
|
||||
@@ -79,9 +79,9 @@ def test_list_entries_show_details(monkeypatch, capsys):
|
||||
monkeypatch.setattr(
|
||||
pm.entry_manager, "get_totp_time_remaining", lambda *a, **k: 1
|
||||
)
|
||||
monkeypatch.setattr("password_manager.manager.time.sleep", lambda *a, **k: None)
|
||||
monkeypatch.setattr("seedpass.core.manager.time.sleep", lambda *a, **k: None)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.timed_input",
|
||||
"seedpass.core.manager.timed_input",
|
||||
lambda *a, **k: "b",
|
||||
)
|
||||
|
||||
@@ -119,7 +119,7 @@ def test_show_entry_details_by_index(monkeypatch):
|
||||
|
||||
header_calls = []
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.clear_header_with_notification",
|
||||
"seedpass.core.manager.clear_header_with_notification",
|
||||
lambda *a, **k: header_calls.append(True),
|
||||
)
|
||||
|
||||
@@ -134,9 +134,9 @@ def test_show_entry_details_by_index(monkeypatch):
|
||||
"_entry_actions_menu",
|
||||
lambda *a, **k: call_order.append("actions"),
|
||||
)
|
||||
monkeypatch.setattr("password_manager.manager.pause", lambda *a, **k: None)
|
||||
monkeypatch.setattr("seedpass.core.manager.pause", lambda *a, **k: None)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.confirm_action", lambda *a, **k: False
|
||||
"seedpass.core.manager.confirm_action", lambda *a, **k: False
|
||||
)
|
||||
pm.password_generator = SimpleNamespace(generate_password=lambda l, i: "pw123")
|
||||
monkeypatch.setattr(pm, "notify", lambda *a, **k: None)
|
||||
@@ -168,16 +168,14 @@ def _setup_manager(tmp_path):
|
||||
|
||||
def _detail_common(monkeypatch, pm):
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.clear_header_with_notification",
|
||||
"seedpass.core.manager.clear_header_with_notification",
|
||||
lambda *a, **k: None,
|
||||
)
|
||||
monkeypatch.setattr("password_manager.manager.pause", lambda *a, **k: None)
|
||||
monkeypatch.setattr("seedpass.core.manager.pause", lambda *a, **k: None)
|
||||
monkeypatch.setattr("builtins.input", lambda *a, **k: "")
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.confirm_action", lambda *a, **k: False
|
||||
)
|
||||
monkeypatch.setattr("password_manager.manager.timed_input", lambda *a, **k: "b")
|
||||
monkeypatch.setattr("password_manager.manager.time.sleep", lambda *a, **k: None)
|
||||
monkeypatch.setattr("seedpass.core.manager.confirm_action", lambda *a, **k: False)
|
||||
monkeypatch.setattr("seedpass.core.manager.timed_input", lambda *a, **k: "b")
|
||||
monkeypatch.setattr("seedpass.core.manager.time.sleep", lambda *a, **k: None)
|
||||
monkeypatch.setattr(pm, "notify", lambda *a, **k: None)
|
||||
pm.password_generator = SimpleNamespace(generate_password=lambda l, i: "pw123")
|
||||
called = []
|
||||
@@ -300,21 +298,21 @@ def test_show_entry_details_sensitive(monkeypatch, capsys, entry_type):
|
||||
pm.password_generator = SimpleNamespace(generate_password=lambda l, i: "pw123")
|
||||
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.confirm_action", lambda *a, **k: True
|
||||
"seedpass.core.manager.confirm_action", lambda *a, **k: True
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.copy_to_clipboard", lambda *a, **k: None
|
||||
"seedpass.core.manager.copy_to_clipboard", lambda *a, **k: None
|
||||
)
|
||||
monkeypatch.setattr("password_manager.manager.timed_input", lambda *a, **k: "b")
|
||||
monkeypatch.setattr("password_manager.manager.time.sleep", lambda *a, **k: None)
|
||||
monkeypatch.setattr("seedpass.core.manager.timed_input", lambda *a, **k: "b")
|
||||
monkeypatch.setattr("seedpass.core.manager.time.sleep", lambda *a, **k: None)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.TotpManager.print_qr_code", lambda *a, **k: None
|
||||
"seedpass.core.manager.TotpManager.print_qr_code", lambda *a, **k: None
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.clear_header_with_notification",
|
||||
"seedpass.core.manager.clear_header_with_notification",
|
||||
lambda *a, **k: None,
|
||||
)
|
||||
monkeypatch.setattr("password_manager.manager.pause", lambda *a, **k: None)
|
||||
monkeypatch.setattr("seedpass.core.manager.pause", lambda *a, **k: None)
|
||||
|
||||
input_val = "r" if entry_type == "managed_account" else ""
|
||||
monkeypatch.setattr("builtins.input", lambda *a, **k: input_val)
|
||||
|
@@ -6,10 +6,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode, TotpManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode, TotpManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
class FakeNostrClient:
|
||||
@@ -49,9 +49,9 @@ def test_handle_retrieve_totp_entry(monkeypatch, capsys):
|
||||
monkeypatch.setattr(
|
||||
pm.entry_manager, "get_totp_time_remaining", lambda *a, **k: 1
|
||||
)
|
||||
monkeypatch.setattr("password_manager.manager.time.sleep", lambda *a, **k: None)
|
||||
monkeypatch.setattr("seedpass.core.manager.time.sleep", lambda *a, **k: None)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.timed_input",
|
||||
"seedpass.core.manager.timed_input",
|
||||
lambda *a, **k: "b",
|
||||
)
|
||||
|
||||
|
@@ -7,10 +7,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_search_entries_prompt_for_details(monkeypatch, capsys):
|
||||
@@ -38,8 +38,8 @@ def test_search_entries_prompt_for_details(monkeypatch, capsys):
|
||||
monkeypatch.setattr(
|
||||
pm.entry_manager, "get_totp_time_remaining", lambda *a, **k: 1
|
||||
)
|
||||
monkeypatch.setattr("password_manager.manager.time.sleep", lambda *a, **k: None)
|
||||
monkeypatch.setattr("password_manager.manager.timed_input", lambda *a, **k: "b")
|
||||
monkeypatch.setattr("seedpass.core.manager.time.sleep", lambda *a, **k: None)
|
||||
monkeypatch.setattr("seedpass.core.manager.timed_input", lambda *a, **k: "b")
|
||||
|
||||
inputs = iter(["Example", "0"])
|
||||
monkeypatch.setattr("builtins.input", lambda *a, **k: next(inputs))
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import builtins
|
||||
from mnemonic import Mnemonic
|
||||
from password_manager.manager import PasswordManager
|
||||
from seedpass.core.manager import PasswordManager
|
||||
from utils import seed_prompt
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ def test_setup_existing_seed_words(monkeypatch):
|
||||
words = phrase.split()
|
||||
word_iter = iter(words)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.masked_input",
|
||||
"seedpass.core.manager.masked_input",
|
||||
lambda *_: next(word_iter),
|
||||
)
|
||||
# Ensure prompt_seed_words uses the patched function
|
||||
@@ -52,7 +52,7 @@ def test_setup_existing_seed_paste(monkeypatch):
|
||||
called["prompt"] = prompt
|
||||
return phrase
|
||||
|
||||
monkeypatch.setattr("password_manager.manager.masked_input", fake_masked_input)
|
||||
monkeypatch.setattr("seedpass.core.manager.masked_input", fake_masked_input)
|
||||
monkeypatch.setattr(
|
||||
builtins,
|
||||
"input",
|
||||
|
@@ -5,11 +5,11 @@ import sys
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def _make_pm(tmp_path: Path) -> PasswordManager:
|
||||
@@ -34,9 +34,9 @@ def _make_pm(tmp_path: Path) -> PasswordManager:
|
||||
def test_handle_search_entries_no_query(monkeypatch, tmp_path):
|
||||
pm = _make_pm(tmp_path)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.clear_header_with_notification", lambda *a, **k: None
|
||||
"seedpass.core.manager.clear_header_with_notification", lambda *a, **k: None
|
||||
)
|
||||
monkeypatch.setattr("password_manager.manager.pause", lambda: None)
|
||||
monkeypatch.setattr("seedpass.core.manager.pause", lambda: None)
|
||||
monkeypatch.setattr("builtins.input", lambda *_: "")
|
||||
|
||||
pm.handle_search_entries()
|
||||
|
@@ -5,11 +5,11 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
class FakePasswordGenerator:
|
||||
@@ -34,7 +34,7 @@ def test_manager_workflow(monkeypatch):
|
||||
backup_mgr = BackupManager(tmp_path, cfg_mgr)
|
||||
entry_mgr = EntryManager(vault, backup_mgr)
|
||||
|
||||
monkeypatch.setattr("password_manager.manager.NostrClient", FakeNostrClient)
|
||||
monkeypatch.setattr("seedpass.core.manager.NostrClient", FakeNostrClient)
|
||||
|
||||
pm = PasswordManager.__new__(PasswordManager)
|
||||
pm.encryption_mode = EncryptionMode.SEED_ONLY
|
||||
|
@@ -5,7 +5,7 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.migrations import LATEST_VERSION
|
||||
from seedpass.core.migrations import LATEST_VERSION
|
||||
|
||||
|
||||
def setup(tmp_path: Path):
|
||||
|
@@ -1,9 +1,9 @@
|
||||
from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
import pytest
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_modify_totp_entry_period_digits_and_archive(tmp_path):
|
||||
|
@@ -3,7 +3,7 @@ from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
import constants
|
||||
import password_manager.manager as manager_module
|
||||
import seedpass.core.manager as manager_module
|
||||
from utils.fingerprint_manager import FingerprintManager
|
||||
|
||||
from helpers import TEST_SEED
|
||||
|
@@ -4,9 +4,9 @@ from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
import constants
|
||||
import password_manager.manager as manager_module
|
||||
import seedpass.core.manager as manager_module
|
||||
from utils.fingerprint_manager import FingerprintManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from tests.helpers import TEST_SEED, TEST_PASSWORD, create_vault
|
||||
|
||||
|
||||
|
@@ -7,10 +7,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from nostr.client import NostrClient
|
||||
|
||||
|
||||
|
@@ -9,7 +9,7 @@ import base64
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from nostr.client import NostrClient
|
||||
import nostr.client as nostr_client
|
||||
|
||||
|
@@ -8,7 +8,7 @@ import base64
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from nostr.client import NostrClient, Manifest
|
||||
|
||||
|
||||
|
@@ -3,9 +3,9 @@ import gzip
|
||||
import math
|
||||
|
||||
from helpers import create_vault, dummy_nostr_client
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from nostr.client import prepare_snapshot
|
||||
from nostr.backup_models import KIND_SNAPSHOT_CHUNK
|
||||
|
||||
|
@@ -8,10 +8,10 @@ from nostr.coincurve_keys import Keys
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_nostr_key_determinism():
|
||||
|
@@ -15,11 +15,11 @@ import os
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from nostr.client import NostrClient, Kind, KindStandard
|
||||
|
||||
|
||||
|
@@ -6,10 +6,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode, TotpManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode, TotpManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from utils.color_scheme import color_text
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ def test_show_qr_for_nostr_keys(monkeypatch):
|
||||
monkeypatch.setattr("builtins.input", lambda *a, **k: next(inputs))
|
||||
called = []
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.TotpManager.print_qr_code",
|
||||
"seedpass.core.manager.TotpManager.print_qr_code",
|
||||
lambda data: called.append(data),
|
||||
)
|
||||
|
||||
@@ -85,7 +85,7 @@ def test_show_private_key_qr(monkeypatch, capsys):
|
||||
monkeypatch.setattr("builtins.input", lambda *a, **k: next(inputs))
|
||||
called = []
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.TotpManager.print_qr_code",
|
||||
"seedpass.core.manager.TotpManager.print_qr_code",
|
||||
lambda data: called.append(data),
|
||||
)
|
||||
|
||||
@@ -130,7 +130,7 @@ def test_qr_menu_case_insensitive(monkeypatch):
|
||||
monkeypatch.setattr("builtins.input", lambda *a, **k: next(inputs))
|
||||
called = []
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.TotpManager.print_qr_code",
|
||||
"seedpass.core.manager.TotpManager.print_qr_code",
|
||||
lambda data: called.append(data),
|
||||
)
|
||||
|
||||
|
@@ -13,7 +13,7 @@ import base64
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from nostr.client import NostrClient
|
||||
|
||||
|
||||
|
@@ -9,7 +9,7 @@ import asyncio
|
||||
from unittest.mock import patch
|
||||
|
||||
from nostr import prepare_snapshot, NostrClient
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
|
||||
|
||||
def test_prepare_snapshot_roundtrip():
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import time
|
||||
from types import SimpleNamespace
|
||||
|
||||
from password_manager.manager import PasswordManager
|
||||
from seedpass.core.manager import PasswordManager
|
||||
|
||||
|
||||
def test_sync_vault_skips_network(monkeypatch):
|
||||
|
@@ -6,7 +6,7 @@ import queue
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from constants import DEFAULT_SEED_BACKUP_FILENAME
|
||||
|
||||
|
||||
@@ -25,11 +25,11 @@ def test_handle_backup_reveal_parent_seed_confirm(monkeypatch, tmp_path, capsys)
|
||||
pm = _make_pm(tmp_path)
|
||||
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.prompt_existing_password", lambda *_: "pw"
|
||||
"seedpass.core.manager.prompt_existing_password", lambda *_: "pw"
|
||||
)
|
||||
confirms = iter([True, True])
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.confirm_action", lambda *_a, **_k: next(confirms)
|
||||
"seedpass.core.manager.confirm_action", lambda *_a, **_k: next(confirms)
|
||||
)
|
||||
saved = []
|
||||
|
||||
@@ -51,11 +51,9 @@ def test_handle_backup_reveal_parent_seed_cancel(monkeypatch, tmp_path, capsys):
|
||||
pm = _make_pm(tmp_path)
|
||||
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.prompt_existing_password", lambda *_: "pw"
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.confirm_action", lambda *_a, **_k: False
|
||||
"seedpass.core.manager.prompt_existing_password", lambda *_: "pw"
|
||||
)
|
||||
monkeypatch.setattr("seedpass.core.manager.confirm_action", lambda *_a, **_k: False)
|
||||
saved = []
|
||||
pm.encryption_manager = SimpleNamespace(
|
||||
encrypt_and_save_file=lambda data, path: saved.append((data, path))
|
||||
|
@@ -8,11 +8,11 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
|
||||
|
||||
def test_change_password_triggers_nostr_backup(monkeypatch):
|
||||
@@ -37,13 +37,11 @@ def test_change_password_triggers_nostr_backup(monkeypatch):
|
||||
pm.verify_password = lambda pw: True
|
||||
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.prompt_existing_password", lambda *_: "old"
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.prompt_for_password", lambda: "new"
|
||||
"seedpass.core.manager.prompt_existing_password", lambda *_: "old"
|
||||
)
|
||||
monkeypatch.setattr("seedpass.core.manager.prompt_for_password", lambda: "new")
|
||||
|
||||
with patch("password_manager.manager.NostrClient") as MockClient:
|
||||
with patch("seedpass.core.manager.NostrClient") as MockClient:
|
||||
mock_instance = MockClient.return_value
|
||||
mock_instance.publish_snapshot = AsyncMock(return_value=(None, "abcd"))
|
||||
pm.nostr_client = mock_instance
|
||||
|
@@ -4,7 +4,7 @@ import sys
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.password_generation import PasswordGenerator, PasswordPolicy
|
||||
from seedpass.core.password_generation import PasswordGenerator, PasswordPolicy
|
||||
|
||||
|
||||
class DummyEnc:
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import string
|
||||
from password_manager.password_generation import PasswordGenerator, PasswordPolicy
|
||||
from seedpass.core.password_generation import PasswordGenerator, PasswordPolicy
|
||||
|
||||
|
||||
class DummyEnc:
|
||||
|
@@ -4,7 +4,7 @@ import sys
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.password_generation import PasswordGenerator, PasswordPolicy
|
||||
from seedpass.core.password_generation import PasswordGenerator, PasswordPolicy
|
||||
from constants import MIN_PASSWORD_LENGTH
|
||||
|
||||
|
||||
|
@@ -5,8 +5,8 @@ from hypothesis import given, strategies as st, settings
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.password_generation import PasswordGenerator, PasswordPolicy
|
||||
from password_manager.entry_types import EntryType
|
||||
from seedpass.core.password_generation import PasswordGenerator, PasswordPolicy
|
||||
from seedpass.core.entry_types import EntryType
|
||||
|
||||
|
||||
class DummyEnc:
|
||||
|
@@ -7,12 +7,12 @@ import bcrypt
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from utils.key_derivation import derive_index_key, derive_key_from_password
|
||||
|
||||
SEED = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
|
||||
@@ -61,13 +61,11 @@ def test_password_change_and_unlock(monkeypatch):
|
||||
)
|
||||
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.prompt_existing_password", lambda *_: old_pw
|
||||
"seedpass.core.manager.prompt_existing_password", lambda *_: old_pw
|
||||
)
|
||||
monkeypatch.setattr("seedpass.core.manager.prompt_for_password", lambda: new_pw)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.prompt_for_password", lambda: new_pw
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.NostrClient",
|
||||
"seedpass.core.manager.NostrClient",
|
||||
lambda *a, **kw: SimpleNamespace(
|
||||
publish_snapshot=lambda *a, **k: (None, "abcd")
|
||||
),
|
||||
@@ -77,7 +75,7 @@ def test_password_change_and_unlock(monkeypatch):
|
||||
pm.lock_vault()
|
||||
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.prompt_existing_password", lambda *_: new_pw
|
||||
"seedpass.core.manager.prompt_existing_password", lambda *_: new_pw
|
||||
)
|
||||
monkeypatch.setattr(PasswordManager, "initialize_bip85", lambda self: None)
|
||||
monkeypatch.setattr(PasswordManager, "initialize_managers", lambda self: None)
|
||||
|
@@ -6,9 +6,9 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_pgp_key_determinism():
|
||||
|
@@ -9,11 +9,11 @@ import sys
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.portable_backup import export_backup, import_backup
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.portable_backup import export_backup, import_backup
|
||||
from utils.key_derivation import derive_index_key, derive_key_from_password
|
||||
|
||||
|
||||
|
@@ -11,7 +11,7 @@ sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
def setup_pm(tmp_path):
|
||||
import constants
|
||||
import password_manager.manager as manager_module
|
||||
import seedpass.core.manager as manager_module
|
||||
|
||||
importlib.reload(constants)
|
||||
importlib.reload(manager_module)
|
||||
@@ -30,7 +30,7 @@ def test_generate_seed_cleanup_on_failure(monkeypatch):
|
||||
|
||||
pm, const, mgr = setup_pm(tmp_path)
|
||||
|
||||
with patch("password_manager.manager.confirm_action", return_value=True):
|
||||
with patch("seedpass.core.manager.confirm_action", return_value=True):
|
||||
monkeypatch.setattr(
|
||||
pm,
|
||||
"save_and_encrypt_seed",
|
||||
|
@@ -3,7 +3,7 @@ import importlib.util
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
|
||||
|
||||
def load_script():
|
||||
@@ -33,7 +33,7 @@ def test_initialize_profile_and_manager(monkeypatch):
|
||||
pm.current_fingerprint = fingerprint
|
||||
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.prompt_existing_password",
|
||||
"seedpass.core.manager.prompt_existing_password",
|
||||
lambda *_: gtp.DEFAULT_PASSWORD,
|
||||
)
|
||||
monkeypatch.setattr(PasswordManager, "initialize_bip85", lambda self: None)
|
||||
|
@@ -11,12 +11,12 @@ sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from utils.fingerprint_manager import FingerprintManager
|
||||
import constants
|
||||
import password_manager.manager as manager_module
|
||||
from password_manager.vault import Vault
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
import seedpass.core.manager as manager_module
|
||||
from seedpass.core.vault import Vault
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def test_add_and_delete_entry(monkeypatch):
|
||||
|
@@ -5,7 +5,7 @@ from tempfile import TemporaryDirectory
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from utils.fingerprint_manager import FingerprintManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from helpers import create_vault, dummy_nostr_client
|
||||
import gzip
|
||||
from nostr.backup_models import Manifest, ChunkMeta
|
||||
@@ -32,7 +32,7 @@ def test_add_and_switch_fingerprint(monkeypatch):
|
||||
|
||||
monkeypatch.setattr("builtins.input", lambda *_args, **_kwargs: "1")
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.prompt_existing_password",
|
||||
"seedpass.core.manager.prompt_existing_password",
|
||||
lambda *_a, **_k: "pass",
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
@@ -47,7 +47,7 @@ def test_add_and_switch_fingerprint(monkeypatch):
|
||||
PasswordManager, "sync_index_from_nostr_if_missing", lambda self: None
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.NostrClient", lambda *a, **kw: object()
|
||||
"seedpass.core.manager.NostrClient", lambda *a, **kw: object()
|
||||
)
|
||||
|
||||
assert pm.handle_switch_fingerprint()
|
||||
|
@@ -9,7 +9,7 @@ import base64
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.encryption import EncryptionManager
|
||||
from seedpass.core.encryption import EncryptionManager
|
||||
from nostr.client import NostrClient, Manifest
|
||||
|
||||
|
||||
|
@@ -6,10 +6,10 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
import pytest
|
||||
|
||||
@@ -45,13 +45,13 @@ def test_pause_before_entry_actions(monkeypatch, adder, needs_confirm):
|
||||
|
||||
pause_calls = []
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.pause", lambda *a, **k: pause_calls.append(True)
|
||||
"seedpass.core.manager.pause", lambda *a, **k: pause_calls.append(True)
|
||||
)
|
||||
monkeypatch.setattr(pm, "_entry_actions_menu", lambda *a, **k: None)
|
||||
monkeypatch.setattr("builtins.input", lambda *a, **k: str(index))
|
||||
if needs_confirm:
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.confirm_action", lambda *a, **k: True
|
||||
"seedpass.core.manager.confirm_action", lambda *a, **k: True
|
||||
)
|
||||
|
||||
pm.handle_retrieve_entry()
|
||||
|
@@ -6,9 +6,9 @@ from helpers import create_vault, TEST_SEED, TEST_PASSWORD
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def setup_entry_manager(tmp_path: Path) -> EntryManager:
|
||||
|
@@ -8,10 +8,10 @@ import sys
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.manager import PasswordManager, EncryptionMode
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.manager import PasswordManager, EncryptionMode
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
|
||||
|
||||
def setup_pm(tmp_path):
|
||||
@@ -45,7 +45,7 @@ def test_password_retrieve_secret_mode(monkeypatch, capsys):
|
||||
monkeypatch.setattr("builtins.input", lambda *a, **k: next(inputs))
|
||||
called = []
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.copy_to_clipboard",
|
||||
"seedpass.core.manager.copy_to_clipboard",
|
||||
lambda text, t: called.append((text, t)),
|
||||
)
|
||||
|
||||
@@ -67,12 +67,12 @@ def test_totp_display_secret_mode(monkeypatch, capsys):
|
||||
pm.entry_manager, "get_totp_time_remaining", lambda *a, **k: 30
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.timed_input",
|
||||
"seedpass.core.manager.timed_input",
|
||||
lambda *a, **k: (_ for _ in ()).throw(KeyboardInterrupt()),
|
||||
)
|
||||
called = []
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.copy_to_clipboard",
|
||||
"seedpass.core.manager.copy_to_clipboard",
|
||||
lambda text, t: called.append((text, t)),
|
||||
)
|
||||
|
||||
@@ -94,7 +94,7 @@ def test_password_retrieve_no_secret_mode(monkeypatch, capsys):
|
||||
monkeypatch.setattr("builtins.input", lambda *a, **k: next(inputs))
|
||||
called = []
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.copy_to_clipboard",
|
||||
"seedpass.core.manager.copy_to_clipboard",
|
||||
lambda *a, **k: called.append((a, k)),
|
||||
)
|
||||
|
||||
@@ -117,12 +117,12 @@ def test_totp_display_no_secret_mode(monkeypatch, capsys):
|
||||
pm.entry_manager, "get_totp_time_remaining", lambda *a, **k: 30
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.timed_input",
|
||||
"seedpass.core.manager.timed_input",
|
||||
lambda *a, **k: (_ for _ in ()).throw(KeyboardInterrupt()),
|
||||
)
|
||||
called = []
|
||||
monkeypatch.setattr(
|
||||
"password_manager.manager.copy_to_clipboard",
|
||||
"seedpass.core.manager.copy_to_clipboard",
|
||||
lambda *a, **k: called.append((a, k)),
|
||||
)
|
||||
|
||||
|
@@ -7,10 +7,10 @@ from mnemonic import Mnemonic
|
||||
|
||||
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from password_manager.entry_management import EntryManager
|
||||
from password_manager.backup import BackupManager
|
||||
from password_manager.config_manager import ConfigManager
|
||||
from password_manager.password_generation import derive_seed_phrase
|
||||
from seedpass.core.entry_management import EntryManager
|
||||
from seedpass.core.backup import BackupManager
|
||||
from seedpass.core.config_manager import ConfigManager
|
||||
from seedpass.core.password_generation import derive_seed_phrase
|
||||
from local_bip85.bip85 import BIP85
|
||||
from bip_utils import Bip39SeedGenerator
|
||||
|
||||
|
@@ -10,7 +10,7 @@ sys.path.append(str(Path(__file__).resolve().parents[1]))
|
||||
def setup_password_manager():
|
||||
"""Instantiate PasswordManager using a temporary APP_DIR without running __init__."""
|
||||
import constants
|
||||
import password_manager.manager as manager_module
|
||||
import seedpass.core.manager as manager_module
|
||||
|
||||
# Reload modules so constants use the mocked home directory
|
||||
importlib.reload(constants)
|
||||
@@ -34,7 +34,7 @@ def test_generate_bip85_and_new_seed(monkeypatch):
|
||||
mnemonic = pm.generate_bip85_seed()
|
||||
assert len(mnemonic.split()) == 12
|
||||
|
||||
with patch("password_manager.manager.confirm_action", return_value=True):
|
||||
with patch("seedpass.core.manager.confirm_action", return_value=True):
|
||||
fingerprint = pm.generate_new_seed()
|
||||
|
||||
expected_dir = const.APP_DIR / fingerprint
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user