mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2025-09-09 15:58:48 +00:00
105 lines
3.7 KiB
Python
105 lines
3.7 KiB
Python
import sys
|
|
from pathlib import Path
|
|
from tempfile import TemporaryDirectory
|
|
|
|
sys.path.append(str(Path(__file__).resolve().parents[1]))
|
|
|
|
from utils.fingerprint_manager import FingerprintManager
|
|
from seedpass.core.manager import PasswordManager, EncryptionMode
|
|
from helpers import create_vault, dummy_nostr_client
|
|
import gzip
|
|
from nostr.backup_models import Manifest, ChunkMeta
|
|
|
|
|
|
VALID_SEED = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
|
|
|
|
|
|
def test_add_and_switch_fingerprint(monkeypatch):
|
|
with TemporaryDirectory() as tmpdir:
|
|
app_dir = Path(tmpdir)
|
|
fm = FingerprintManager(app_dir)
|
|
|
|
fingerprint = fm.add_fingerprint(VALID_SEED)
|
|
assert fingerprint in fm.list_fingerprints()
|
|
expected_dir = app_dir / fingerprint
|
|
assert expected_dir.exists()
|
|
|
|
pm = PasswordManager.__new__(PasswordManager)
|
|
pm.encryption_mode = EncryptionMode.SEED_ONLY
|
|
pm.fingerprint_manager = fm
|
|
pm.encryption_manager = object()
|
|
pm.current_fingerprint = None
|
|
|
|
monkeypatch.setattr("builtins.input", lambda *_args, **_kwargs: "1")
|
|
monkeypatch.setattr(
|
|
PasswordManager,
|
|
"setup_encryption_manager",
|
|
lambda self, d, password=None, exit_on_fail=True: True,
|
|
)
|
|
monkeypatch.setattr(PasswordManager, "load_parent_seed", lambda self, d: None)
|
|
monkeypatch.setattr(PasswordManager, "initialize_bip85", lambda self: None)
|
|
monkeypatch.setattr(PasswordManager, "initialize_managers", lambda self: None)
|
|
monkeypatch.setattr(
|
|
PasswordManager, "sync_index_from_nostr_if_missing", lambda self: None
|
|
)
|
|
monkeypatch.setattr(
|
|
"seedpass.core.manager.NostrClient", lambda *a, **kw: object()
|
|
)
|
|
|
|
assert pm.handle_switch_fingerprint(password="pass")
|
|
assert pm.current_fingerprint == fingerprint
|
|
assert fm.current_fingerprint == fingerprint
|
|
assert pm.fingerprint_dir == expected_dir
|
|
|
|
|
|
def test_sync_index_missing_bad_data(monkeypatch, dummy_nostr_client):
|
|
client, _relay = dummy_nostr_client
|
|
with TemporaryDirectory() as tmpdir:
|
|
dir_path = Path(tmpdir)
|
|
vault, _enc = create_vault(dir_path)
|
|
|
|
pm = PasswordManager.__new__(PasswordManager)
|
|
pm.fingerprint_dir = dir_path
|
|
pm.vault = vault
|
|
pm.nostr_client = client
|
|
pm.sync_vault = lambda *a, **k: None
|
|
|
|
manifest = Manifest(
|
|
ver=1,
|
|
algo="aes-gcm",
|
|
chunks=[ChunkMeta(id="c0", size=1, hash="00")],
|
|
delta_since=None,
|
|
)
|
|
monkeypatch.setattr(
|
|
client,
|
|
"fetch_latest_snapshot",
|
|
lambda: (manifest, [gzip.compress(b"garbage")]),
|
|
)
|
|
monkeypatch.setattr(client, "fetch_deltas_since", lambda *_a, **_k: [])
|
|
|
|
result = pm.attempt_initial_sync()
|
|
assert result is False
|
|
index_path = dir_path / "seedpass_entries_db.json.enc"
|
|
assert not index_path.exists()
|
|
|
|
|
|
def test_attempt_initial_sync_incomplete_data(monkeypatch, dummy_nostr_client):
|
|
client, _relay = dummy_nostr_client
|
|
with TemporaryDirectory() as tmpdir:
|
|
dir_path = Path(tmpdir)
|
|
vault, _enc = create_vault(dir_path)
|
|
|
|
pm = PasswordManager.__new__(PasswordManager)
|
|
pm.fingerprint_dir = dir_path
|
|
pm.vault = vault
|
|
pm.nostr_client = client
|
|
pm.sync_vault = lambda *a, **k: None
|
|
|
|
# Simulate relay snapshot retrieval failure due to missing chunks
|
|
monkeypatch.setattr(client, "fetch_latest_snapshot", lambda: None)
|
|
|
|
result = pm.attempt_initial_sync()
|
|
assert result is False
|
|
index_path = dir_path / "seedpass_entries_db.json.enc"
|
|
assert not index_path.exists()
|