From c2f6971b86a38f4d745f94a9ccd79cfbcbda15e6 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Sun, 6 Jul 2025 18:57:18 -0400 Subject: [PATCH] Isolate test profiles --- scripts/generate_test_profile.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/scripts/generate_test_profile.py b/scripts/generate_test_profile.py index 3add6c2..3b92f8b 100644 --- a/scripts/generate_test_profile.py +++ b/scripts/generate_test_profile.py @@ -22,6 +22,13 @@ SRC_DIR = PROJECT_ROOT / "src" if str(SRC_DIR) not in sys.path: sys.path.insert(0, str(SRC_DIR)) +import constants as consts + +# Use a dedicated subdirectory for test profiles so regular data is not polluted +consts.APP_DIR = consts.APP_DIR / "tests" +consts.PARENT_SEED_FILE = consts.APP_DIR / "parent_seed.enc" +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 @@ -31,6 +38,8 @@ from password_manager.backup import BackupManager from password_manager.entry_management import EntryManager from nostr.client import NostrClient from utils.fingerprint import generate_fingerprint +from utils.fingerprint_manager import FingerprintManager +import bcrypt import asyncio import gzip @@ -52,7 +61,12 @@ def initialize_profile(profile_name: str) -> tuple[str, EntryManager, Path, str] seed_txt.write_text(seed_phrase) seed_txt.chmod(0o600) - fingerprint = generate_fingerprint(seed_phrase) or profile_name + fp_mgr = FingerprintManager(APP_DIR) + fingerprint = fp_mgr.add_fingerprint(seed_phrase) or generate_fingerprint( + seed_phrase + ) + if fingerprint is None: + fingerprint = profile_name profile_dir = APP_DIR / fingerprint profile_dir.mkdir(parents=True, exist_ok=True) @@ -79,6 +93,9 @@ def initialize_profile(profile_name: str) -> tuple[str, EntryManager, Path, str] enc_mgr = EncryptionManager(index_key, profile_dir) vault = Vault(enc_mgr, profile_dir) cfg_mgr = ConfigManager(vault, profile_dir) + # Store the default password hash so the profile can be opened + hashed = bcrypt.hashpw(DEFAULT_PASSWORD.encode(), bcrypt.gensalt()).decode() + cfg_mgr.set_password_hash(hashed) backup_mgr = BackupManager(profile_dir, cfg_mgr) entry_mgr = EntryManager(vault, backup_mgr) return seed_phrase, entry_mgr, profile_dir, fingerprint @@ -132,7 +149,7 @@ def main() -> None: parser.add_argument( "--profile", default="test_profile", - help="profile name inside ~/.seedpass", + help="profile name inside ~/.seedpass/tests", ) parser.add_argument( "--count",