mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2025-09-08 07:18:47 +00:00
Merge pull request #112 from PR0M3TH3AN/codex/replace-logger.error-with-logger.exception
Improve exception logging
This commit is contained in:
@@ -25,8 +25,7 @@ try:
|
||||
logger.info(f"Application directory created at {APP_DIR}")
|
||||
except Exception as e:
|
||||
if logger.isEnabledFor(logging.DEBUG):
|
||||
logger.error(f"Failed to create application directory: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Failed to create application directory: {e}", exc_info=True)
|
||||
|
||||
try:
|
||||
PARENT_SEED_FILE = APP_DIR / "parent_seed.enc" # Encrypted parent seed
|
||||
@@ -34,8 +33,7 @@ try:
|
||||
logger.info(f"Parent seed file path set to {PARENT_SEED_FILE}")
|
||||
except Exception as e:
|
||||
if logger.isEnabledFor(logging.DEBUG):
|
||||
logger.error(f"Error setting file paths: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Error setting file paths: {e}", exc_info=True)
|
||||
|
||||
# -----------------------------------
|
||||
# Checksum Files for Integrity
|
||||
@@ -48,8 +46,7 @@ try:
|
||||
logger.info(f"Checksum file path set: Script {SCRIPT_CHECKSUM_FILE}")
|
||||
except Exception as e:
|
||||
if logger.isEnabledFor(logging.DEBUG):
|
||||
logger.error(f"Error setting checksum file paths: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Error setting checksum file paths: {e}", exc_info=True)
|
||||
|
||||
# -----------------------------------
|
||||
# Password Generation Constants
|
||||
|
@@ -12,7 +12,6 @@ try:
|
||||
logger.info("BIP85 module imported successfully.")
|
||||
except Exception as e:
|
||||
if logger.isEnabledFor(logging.DEBUG):
|
||||
logger.error(f"Failed to import BIP85 module: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Failed to import BIP85 module: {e}", exc_info=True)
|
||||
|
||||
__all__ = ["BIP85"]
|
||||
|
@@ -41,8 +41,7 @@ class BIP85:
|
||||
self.bip32_ctx = Bip32Slip10Secp256k1.FromExtendedKey(seed_bytes)
|
||||
logging.debug("BIP32 context initialized successfully.")
|
||||
except Exception as e:
|
||||
logging.error(f"Error initializing BIP32 context: {e}")
|
||||
logging.error(traceback.format_exc()) # Log full traceback
|
||||
logging.error(f"Error initializing BIP32 context: {e}", exc_info=True)
|
||||
print(f"{Fore.RED}Error initializing BIP32 context: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
@@ -96,8 +95,7 @@ class BIP85:
|
||||
logging.debug(f"Derived entropy: {entropy.hex()}")
|
||||
return entropy
|
||||
except Exception as e:
|
||||
logging.error(f"Error deriving entropy: {e}")
|
||||
logging.error(traceback.format_exc()) # Log full traceback
|
||||
logging.error(f"Error deriving entropy: {e}", exc_info=True)
|
||||
print(f"{Fore.RED}Error deriving entropy: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
@@ -118,8 +116,7 @@ class BIP85:
|
||||
logging.debug(f"Derived mnemonic: {mnemonic}")
|
||||
return mnemonic.ToStr()
|
||||
except Exception as e:
|
||||
logging.error(f"Error generating mnemonic: {e}")
|
||||
logging.error(traceback.format_exc()) # Log full traceback
|
||||
logging.error(f"Error generating mnemonic: {e}", exc_info=True)
|
||||
print(f"{Fore.RED}Error generating mnemonic: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
@@ -130,7 +127,6 @@ class BIP85:
|
||||
logging.debug(f"Derived symmetric key: {key.hex()}")
|
||||
return key
|
||||
except Exception as e:
|
||||
logging.error(f"Error deriving symmetric key: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error deriving symmetric key: {e}", exc_info=True)
|
||||
print(f"{Fore.RED}Error deriving symmetric key: {e}")
|
||||
sys.exit(1)
|
||||
|
27
src/main.py
27
src/main.py
@@ -119,8 +119,7 @@ def handle_switch_fingerprint(password_manager: PasswordManager):
|
||||
else:
|
||||
print(colored("Failed to switch seed profile.", "red"))
|
||||
except Exception as e:
|
||||
logging.error(f"Error during fingerprint switch: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error during fingerprint switch: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to switch seed profile: {e}", "red"))
|
||||
|
||||
|
||||
@@ -133,8 +132,7 @@ def handle_add_new_fingerprint(password_manager: PasswordManager):
|
||||
try:
|
||||
password_manager.add_new_fingerprint()
|
||||
except Exception as e:
|
||||
logging.error(f"Error adding new seed profile: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error adding new seed profile: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to add new seed profile: {e}", "red"))
|
||||
|
||||
|
||||
@@ -178,8 +176,7 @@ def handle_remove_fingerprint(password_manager: PasswordManager):
|
||||
else:
|
||||
print(colored("Seed profile removal cancelled.", "yellow"))
|
||||
except Exception as e:
|
||||
logging.error(f"Error removing seed profile: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error removing seed profile: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to remove seed profile: {e}", "red"))
|
||||
|
||||
|
||||
@@ -199,8 +196,7 @@ def handle_list_fingerprints(password_manager: PasswordManager):
|
||||
for fp in fingerprints:
|
||||
print(colored(f"- {fp}", "cyan"))
|
||||
except Exception as e:
|
||||
logging.error(f"Error listing seed profiles: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error listing seed profiles: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to list seed profiles: {e}", "red"))
|
||||
|
||||
|
||||
@@ -217,8 +213,7 @@ def handle_display_npub(password_manager: PasswordManager):
|
||||
print(colored("Nostr public key not available.", "red"))
|
||||
logging.error("Nostr public key not available.")
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to display npub: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Failed to display npub: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to display npub: {e}", "red"))
|
||||
|
||||
|
||||
@@ -247,8 +242,7 @@ def handle_post_to_nostr(
|
||||
print(colored("No data available to post.", "yellow"))
|
||||
logging.warning("No data available to post to Nostr.")
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to post to Nostr: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Failed to post to Nostr: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to post to Nostr: {e}", "red"))
|
||||
|
||||
|
||||
@@ -270,8 +264,7 @@ def handle_retrieve_from_nostr(password_manager: PasswordManager):
|
||||
print(colored("Failed to retrieve data from Nostr.", "red"))
|
||||
logging.error("Failed to retrieve data from Nostr.")
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to retrieve from Nostr: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Failed to retrieve from Nostr: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to retrieve from Nostr: {e}", "red"))
|
||||
|
||||
|
||||
@@ -594,8 +587,7 @@ if __name__ == "__main__":
|
||||
password_manager = PasswordManager(encryption_mode=enc_mode)
|
||||
logger.info("PasswordManager initialized successfully.")
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to initialize PasswordManager: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Failed to initialize PasswordManager: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to initialize PasswordManager: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -632,8 +624,7 @@ if __name__ == "__main__":
|
||||
print(colored(f"Error during shutdown: {e}", "red"))
|
||||
sys.exit(0)
|
||||
except Exception as e:
|
||||
logger.error(f"An unexpected error occurred: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"An unexpected error occurred: {e}", exc_info=True)
|
||||
print(colored(f"Error: An unexpected error occurred: {e}", "red"))
|
||||
try:
|
||||
password_manager.nostr_client.close_client_pool() # Attempt to close the ClientPool
|
||||
|
@@ -47,7 +47,6 @@ class EventHandler:
|
||||
f"[New Event] ID: {evt.id} | Created At: {created_at_str} | Content: {evt.content}"
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Error handling new event: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Error handling new event: {e}", exc_info=True)
|
||||
# Optionally, handle the exception without re-raising
|
||||
# For example, continue processing other events
|
||||
|
@@ -47,8 +47,7 @@ class KeyManager:
|
||||
logger.debug("Nostr Keys initialized successfully.")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Key initialization failed: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Key initialization failed: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
def initialize_bip85(self):
|
||||
@@ -64,8 +63,7 @@ class KeyManager:
|
||||
logger.debug("BIP85 initialized successfully.")
|
||||
return bip85
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to initialize BIP85: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to initialize BIP85: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
def generate_nostr_keys(self) -> Keys:
|
||||
@@ -93,8 +91,7 @@ class KeyManager:
|
||||
logger.debug(f"Nostr keys generated for fingerprint {self.fingerprint}.")
|
||||
return keys
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to generate Nostr keys: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to generate Nostr keys: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
def get_public_key_hex(self) -> str:
|
||||
@@ -129,6 +126,5 @@ class KeyManager:
|
||||
npub = bech32_encode("npub", data)
|
||||
return npub
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to generate npub: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to generate npub: {e}", exc_info=True)
|
||||
raise
|
||||
|
@@ -73,8 +73,7 @@ class BackupManager:
|
||||
logger.info(f"Backup created successfully at '{backup_file}'.")
|
||||
print(colored(f"Backup created successfully at '{backup_file}'.", "green"))
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to create backup: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to create backup: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to create backup: {e}", "red"))
|
||||
|
||||
def restore_latest_backup(self) -> None:
|
||||
@@ -100,8 +99,9 @@ class BackupManager:
|
||||
)
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to restore from backup '{latest_backup}': {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(
|
||||
f"Failed to restore from backup '{latest_backup}': {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to restore from backup '{latest_backup}': {e}",
|
||||
@@ -129,8 +129,7 @@ class BackupManager:
|
||||
)
|
||||
print(colored(f"- {backup.name} (Created on: {creation_time})", "cyan"))
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to list backups: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to list backups: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to list backups: {e}", "red"))
|
||||
|
||||
def restore_backup_by_timestamp(self, timestamp: int) -> None:
|
||||
@@ -152,8 +151,9 @@ class BackupManager:
|
||||
)
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to restore from backup '{backup_file}': {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(
|
||||
f"Failed to restore from backup '{backup_file}': {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to restore from backup '{backup_file}': {e}", "red"
|
||||
|
@@ -58,7 +58,6 @@ class EncryptionManager:
|
||||
logger.error(
|
||||
f"Failed to initialize Fernet with provided encryption key: {e}"
|
||||
)
|
||||
logger.error(traceback.format_exc())
|
||||
print(
|
||||
colored(f"Error: Failed to initialize encryption manager: {e}", "red")
|
||||
)
|
||||
@@ -95,8 +94,7 @@ class EncryptionManager:
|
||||
)
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to encrypt and save parent seed: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to encrypt and save parent seed: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to encrypt and save parent seed: {e}", "red"))
|
||||
raise
|
||||
|
||||
@@ -126,8 +124,7 @@ class EncryptionManager:
|
||||
print(colored("Error: Invalid encryption key or corrupted data.", "red"))
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to decrypt parent seed: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to decrypt parent seed: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to decrypt parent seed: {e}", "red"))
|
||||
raise
|
||||
|
||||
@@ -143,8 +140,7 @@ class EncryptionManager:
|
||||
logger.debug("Data encrypted successfully.")
|
||||
return encrypted_data
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to encrypt data: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to encrypt data: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to encrypt data: {e}", "red"))
|
||||
raise
|
||||
|
||||
@@ -166,8 +162,7 @@ class EncryptionManager:
|
||||
print(colored("Error: Invalid encryption key or corrupted data.", "red"))
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to decrypt data: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to decrypt data: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to decrypt data: {e}", "red"))
|
||||
raise
|
||||
|
||||
@@ -199,8 +194,10 @@ class EncryptionManager:
|
||||
logger.info(f"Data encrypted and saved to '{file_path}'.")
|
||||
print(colored(f"Data encrypted and saved to '{file_path}'.", "green"))
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to encrypt and save data to '{relative_path}': {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(
|
||||
f"Failed to encrypt and save data to '{relative_path}': {e}",
|
||||
exc_info=True,
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to encrypt and save data to '{relative_path}': {e}",
|
||||
@@ -236,8 +233,9 @@ class EncryptionManager:
|
||||
print(colored("Error: Invalid encryption key or corrupted data.", "red"))
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to decrypt data from '{relative_path}': {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(
|
||||
f"Failed to decrypt data from '{relative_path}': {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to decrypt data from '{relative_path}': {e}", "red"
|
||||
@@ -263,8 +261,9 @@ class EncryptionManager:
|
||||
colored(f"JSON data encrypted and saved to '{relative_path}'.", "green")
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to save JSON data to '{relative_path}': {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(
|
||||
f"Failed to save JSON data to '{relative_path}': {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to save JSON data to '{relative_path}': {e}", "red"
|
||||
@@ -304,8 +303,9 @@ class EncryptionManager:
|
||||
logger.debug(f"JSON data loaded and decrypted from '{file_path}': {data}")
|
||||
return data
|
||||
except json.JSONDecodeError as e:
|
||||
logger.error(f"Failed to decode JSON data from '{file_path}': {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(
|
||||
f"Failed to decode JSON data from '{file_path}': {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to decode JSON data from '{file_path}': {e}", "red"
|
||||
@@ -319,8 +319,9 @@ class EncryptionManager:
|
||||
print(colored("Error: Invalid encryption key or corrupted data.", "red"))
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to load JSON data from '{file_path}': {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(
|
||||
f"Failed to load JSON data from '{file_path}': {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to load JSON data from '{file_path}': {e}", "red"
|
||||
@@ -363,8 +364,9 @@ class EncryptionManager:
|
||||
)
|
||||
print(colored(f"Checksum for '{file_path}' updated.", "green"))
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to update checksum for '{relative_path}': {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(
|
||||
f"Failed to update checksum for '{relative_path}': {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to update checksum for '{relative_path}': {e}",
|
||||
@@ -399,8 +401,10 @@ class EncryptionManager:
|
||||
logger.debug(f"Encrypted index data read from '{relative_path}'.")
|
||||
return encrypted_data
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to read encrypted index file '{relative_path}': {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(
|
||||
f"Failed to read encrypted index file '{relative_path}': {e}",
|
||||
exc_info=True,
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to read encrypted index file '{relative_path}': {e}",
|
||||
@@ -429,8 +433,9 @@ class EncryptionManager:
|
||||
logger.info("Index file updated from Nostr successfully.")
|
||||
print(colored("Index file updated from Nostr successfully.", "green"))
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to decrypt and save data from Nostr: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(
|
||||
f"Failed to decrypt and save data from Nostr: {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to decrypt and save data from Nostr: {e}", "red"
|
||||
@@ -458,8 +463,7 @@ class EncryptionManager:
|
||||
logger.debug("Seed phrase validated successfully.")
|
||||
return True
|
||||
except Exception as e:
|
||||
logging.error(f"Error validating seed phrase: {e}")
|
||||
logging.error(traceback.format_exc()) # Log full traceback
|
||||
logging.error(f"Error validating seed phrase: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to validate seed phrase: {e}", "red"))
|
||||
return False
|
||||
|
||||
@@ -485,7 +489,6 @@ class EncryptionManager:
|
||||
logger.debug("Seed derived successfully from mnemonic.")
|
||||
return seed
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to derive seed from mnemonic: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to derive seed from mnemonic: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to derive seed from mnemonic: {e}", "red"))
|
||||
raise
|
||||
|
@@ -92,8 +92,7 @@ class EntryManager:
|
||||
logger.debug(f"Next index determined: {next_index}")
|
||||
return next_index
|
||||
except Exception as e:
|
||||
logger.error(f"Error determining next index: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Error determining next index: {e}", exc_info=True)
|
||||
print(colored(f"Error determining next index: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -141,8 +140,7 @@ class EntryManager:
|
||||
return index # Return the assigned index
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to add entry: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to add entry: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to add entry: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -155,8 +153,7 @@ class EntryManager:
|
||||
try:
|
||||
return self.vault.get_encrypted_index()
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to retrieve encrypted index file: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to retrieve encrypted index file: {e}", exc_info=True)
|
||||
print(
|
||||
colored(f"Error: Failed to retrieve encrypted index file: {e}", "red")
|
||||
)
|
||||
@@ -182,8 +179,9 @@ class EntryManager:
|
||||
return None
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to retrieve entry at index {index}: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(
|
||||
f"Failed to retrieve entry at index {index}: {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(f"Error: Failed to retrieve entry at index {index}: {e}", "red")
|
||||
)
|
||||
@@ -247,8 +245,7 @@ class EntryManager:
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to modify entry at index {index}: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to modify entry at index {index}: {e}", exc_info=True)
|
||||
print(
|
||||
colored(f"Error: Failed to modify entry at index {index}: {e}", "red")
|
||||
)
|
||||
@@ -292,8 +289,7 @@ class EntryManager:
|
||||
return entries
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to list entries: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Failed to list entries: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to list entries: {e}", "red"))
|
||||
return []
|
||||
|
||||
@@ -329,8 +325,7 @@ class EntryManager:
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to delete entry at index {index}: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Failed to delete entry at index {index}: {e}", exc_info=True)
|
||||
print(
|
||||
colored(f"Error: Failed to delete entry at index {index}: {e}", "red")
|
||||
)
|
||||
@@ -354,8 +349,7 @@ class EntryManager:
|
||||
print(colored(f"[+] Checksum updated successfully.", "green"))
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to update checksum: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Failed to update checksum: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to update checksum: {e}", "red"))
|
||||
|
||||
def backup_index_file(self) -> None:
|
||||
@@ -384,8 +378,7 @@ class EntryManager:
|
||||
print(colored(f"[+] Backup created at '{backup_path}'.", "green"))
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to create backup: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Failed to create backup: {e}", exc_info=True)
|
||||
print(colored(f"Warning: Failed to create backup: {e}", "yellow"))
|
||||
|
||||
def restore_from_backup(self, backup_path: str) -> None:
|
||||
@@ -420,8 +413,9 @@ class EntryManager:
|
||||
self.update_checksum()
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to restore from backup '{backup_path}': {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(
|
||||
f"Failed to restore from backup '{backup_path}': {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to restore from backup '{backup_path}': {e}", "red"
|
||||
@@ -451,7 +445,6 @@ class EntryManager:
|
||||
print("-" * 40)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to list all entries: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Failed to list all entries: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to list all entries: {e}", "red"))
|
||||
return
|
||||
|
@@ -141,8 +141,7 @@ class PasswordManager:
|
||||
self.fingerprint_manager = FingerprintManager(APP_DIR)
|
||||
logger.debug("FingerprintManager initialized successfully.")
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to initialize FingerprintManager: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to initialize FingerprintManager: {e}", exc_info=True)
|
||||
print(
|
||||
colored(f"Error: Failed to initialize FingerprintManager: {e}", "red")
|
||||
)
|
||||
@@ -187,8 +186,7 @@ class PasswordManager:
|
||||
self.select_fingerprint(selected_fingerprint)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error during seed profile selection: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Error during seed profile selection: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to select seed profile: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -218,8 +216,7 @@ class PasswordManager:
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error adding new seed profile: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Error adding new seed profile: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to add new seed profile: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -290,8 +287,7 @@ class PasswordManager:
|
||||
print(colored("Invalid password. Exiting.", "red"))
|
||||
sys.exit(1)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to set up EncryptionManager: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to set up EncryptionManager: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to set up encryption: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -313,8 +309,7 @@ class PasswordManager:
|
||||
seed_bytes = Bip39SeedGenerator(self.parent_seed).Generate()
|
||||
self.bip85 = BIP85(seed_bytes)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to load parent seed: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to load parent seed: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to load parent seed: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -385,8 +380,7 @@ class PasswordManager:
|
||||
return True # Return True to indicate success
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error during seed profile switching: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error during seed profile switching: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to switch seed profiles: {e}", "red"))
|
||||
return False # Return False to indicate failure
|
||||
|
||||
@@ -454,8 +448,7 @@ class PasswordManager:
|
||||
self.initialize_bip85()
|
||||
logging.debug("Parent seed decrypted and validated successfully.")
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to decrypt parent seed: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Failed to decrypt parent seed: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to decrypt parent seed: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -655,8 +648,7 @@ class PasswordManager:
|
||||
mnemonic = bip85.derive_mnemonic(index=0, words_num=12)
|
||||
return mnemonic
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to generate BIP-85 seed: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Failed to generate BIP-85 seed: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to generate BIP-85 seed: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -702,8 +694,7 @@ class PasswordManager:
|
||||
self.initialize_managers()
|
||||
self.sync_index_from_nostr_if_missing()
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to encrypt and save parent seed: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Failed to encrypt and save parent seed: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to encrypt and save parent seed: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -716,8 +707,7 @@ class PasswordManager:
|
||||
self.bip85 = BIP85(seed_bytes)
|
||||
logging.debug("BIP-85 initialized successfully.")
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to initialize BIP-85: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Failed to initialize BIP-85: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to initialize BIP-85: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -763,8 +753,7 @@ class PasswordManager:
|
||||
logger.debug("Managers re-initialized for the new fingerprint.")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to initialize managers: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logger.error(f"Failed to initialize managers: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to initialize managers: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -840,12 +829,13 @@ class PasswordManager:
|
||||
"Encrypted index posted to Nostr after entry addition."
|
||||
)
|
||||
except Exception as nostr_error:
|
||||
logging.error(f"Failed to post updated index to Nostr: {nostr_error}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(
|
||||
f"Failed to post updated index to Nostr: {nostr_error}",
|
||||
exc_info=True,
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error during password generation: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error during password generation: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to generate password: {e}", "red"))
|
||||
|
||||
def handle_retrieve_entry(self) -> None:
|
||||
@@ -912,8 +902,7 @@ class PasswordManager:
|
||||
else:
|
||||
print(colored("Error: Failed to retrieve the password.", "red"))
|
||||
except Exception as e:
|
||||
logging.error(f"Error during password retrieval: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error during password retrieval: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to retrieve password: {e}", "red"))
|
||||
|
||||
def handle_modify_entry(self) -> None:
|
||||
@@ -1009,12 +998,13 @@ class PasswordManager:
|
||||
"Encrypted index posted to Nostr after entry modification."
|
||||
)
|
||||
except Exception as nostr_error:
|
||||
logging.error(f"Failed to post updated index to Nostr: {nostr_error}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(
|
||||
f"Failed to post updated index to Nostr: {nostr_error}",
|
||||
exc_info=True,
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error during modifying entry: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error during modifying entry: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to modify entry: {e}", "red"))
|
||||
|
||||
def delete_entry(self) -> None:
|
||||
@@ -1049,12 +1039,13 @@ class PasswordManager:
|
||||
"Encrypted index posted to Nostr after entry deletion."
|
||||
)
|
||||
except Exception as nostr_error:
|
||||
logging.error(f"Failed to post updated index to Nostr: {nostr_error}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(
|
||||
f"Failed to post updated index to Nostr: {nostr_error}",
|
||||
exc_info=True,
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error during entry deletion: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error during entry deletion: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to delete entry: {e}", "red"))
|
||||
|
||||
def handle_verify_checksum(self) -> None:
|
||||
@@ -1075,8 +1066,7 @@ class PasswordManager:
|
||||
)
|
||||
logging.error("Checksum verification failed.")
|
||||
except Exception as e:
|
||||
logging.error(f"Error during checksum verification: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error during checksum verification: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to verify checksum: {e}", "red"))
|
||||
|
||||
def get_encrypted_data(self) -> Optional[bytes]:
|
||||
@@ -1095,8 +1085,7 @@ class PasswordManager:
|
||||
print(colored("Error: Failed to retrieve encrypted index data.", "red"))
|
||||
return None
|
||||
except Exception as e:
|
||||
logging.error(f"Error retrieving encrypted data: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error retrieving encrypted data: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to retrieve encrypted data: {e}", "red"))
|
||||
return None
|
||||
|
||||
@@ -1111,8 +1100,9 @@ class PasswordManager:
|
||||
logging.info("Index file updated from Nostr successfully.")
|
||||
print(colored("Index file updated from Nostr successfully.", "green"))
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to decrypt and save data from Nostr: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(
|
||||
f"Failed to decrypt and save data from Nostr: {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to decrypt and save data from Nostr: {e}", "red"
|
||||
@@ -1129,8 +1119,7 @@ class PasswordManager:
|
||||
self.backup_manager.create_backup()
|
||||
print(colored("Backup created successfully.", "green"))
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to create backup: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Failed to create backup: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to create backup: {e}", "red"))
|
||||
|
||||
def restore_database(self) -> None:
|
||||
@@ -1145,8 +1134,7 @@ class PasswordManager:
|
||||
)
|
||||
)
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to restore backup: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Failed to restore backup: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to restore backup: {e}", "red"))
|
||||
|
||||
def handle_backup_reveal_parent_seed(self) -> None:
|
||||
@@ -1222,8 +1210,7 @@ class PasswordManager:
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
logging.error(f"Error during parent seed backup/reveal: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error during parent seed backup/reveal: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to backup/reveal parent seed: {e}", "red"))
|
||||
|
||||
def verify_password(self, password: str) -> bool:
|
||||
@@ -1258,8 +1245,7 @@ class PasswordManager:
|
||||
logging.warning("Password verification failed.")
|
||||
return is_correct
|
||||
except Exception as e:
|
||||
logging.error(f"Error verifying password: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Error verifying password: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to verify password: {e}", "red"))
|
||||
return False
|
||||
|
||||
@@ -1311,8 +1297,7 @@ class PasswordManager:
|
||||
"User password hashed and stored successfully (using alternative method)."
|
||||
)
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to store hashed password: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Failed to store hashed password: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to store hashed password: {e}", "red"))
|
||||
raise
|
||||
|
||||
@@ -1381,8 +1366,6 @@ class PasswordManager:
|
||||
logging.error(
|
||||
f"Failed to post updated index to Nostr after password change: {nostr_error}"
|
||||
)
|
||||
logging.error(traceback.format_exc())
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to change password: {e}")
|
||||
logging.error(traceback.format_exc())
|
||||
logging.error(f"Failed to change password: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to change password: {e}", "red"))
|
||||
|
@@ -68,8 +68,7 @@ class PasswordGenerator:
|
||||
|
||||
logger.debug("PasswordGenerator initialized successfully.")
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to initialize PasswordGenerator: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Failed to initialize PasswordGenerator: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to initialize PasswordGenerator: {e}", "red"))
|
||||
raise
|
||||
|
||||
@@ -177,8 +176,7 @@ class PasswordGenerator:
|
||||
return password
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error generating password: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Error generating password: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to generate password: {e}", "red"))
|
||||
raise
|
||||
|
||||
@@ -331,7 +329,6 @@ class PasswordGenerator:
|
||||
return "".join(password_chars)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error ensuring password complexity: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Error ensuring password complexity: {e}", exc_info=True)
|
||||
print(colored(f"Error: Failed to ensure password complexity: {e}", "red"))
|
||||
raise
|
||||
|
@@ -21,8 +21,7 @@ try:
|
||||
logger.info("Modules imported successfully.")
|
||||
except Exception as e:
|
||||
if logger.isEnabledFor(logging.DEBUG):
|
||||
logger.error(f"Failed to import one or more modules: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Failed to import one or more modules: {e}", exc_info=True)
|
||||
|
||||
__all__ = [
|
||||
"derive_key_from_password",
|
||||
|
@@ -52,8 +52,9 @@ def calculate_checksum(file_path: str) -> Optional[str]:
|
||||
)
|
||||
return None
|
||||
except Exception as e:
|
||||
logging.error(f"Error calculating checksum for '{file_path}': {e}")
|
||||
logging.error(traceback.format_exc()) # Log full traceback
|
||||
logging.error(
|
||||
f"Error calculating checksum for '{file_path}': {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to calculate checksum for '{file_path}': {e}", "red"
|
||||
@@ -87,8 +88,9 @@ def verify_checksum(current_checksum: str, checksum_file_path: str) -> bool:
|
||||
print(colored(f"Error: Checksum file '{checksum_file_path}' not found.", "red"))
|
||||
return False
|
||||
except Exception as e:
|
||||
logging.error(f"Error reading checksum file '{checksum_file_path}': {e}")
|
||||
logging.error(traceback.format_exc()) # Log full traceback
|
||||
logging.error(
|
||||
f"Error reading checksum file '{checksum_file_path}': {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to read checksum file '{checksum_file_path}': {e}",
|
||||
@@ -118,8 +120,9 @@ def update_checksum(content: str, checksum_file_path: str) -> bool:
|
||||
logging.debug(f"Updated checksum for '{checksum_file_path}' to: {new_checksum}")
|
||||
return True
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to update checksum for '{checksum_file_path}': {e}")
|
||||
logging.error(traceback.format_exc()) # Log full traceback
|
||||
logging.error(
|
||||
f"Failed to update checksum for '{checksum_file_path}': {e}", exc_info=True
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to update checksum for '{checksum_file_path}': {e}",
|
||||
@@ -178,8 +181,10 @@ def initialize_checksum(file_path: str, checksum_file_path: str) -> bool:
|
||||
print(colored(f"Initialized checksum for '{file_path}'.", "green"))
|
||||
return True
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to initialize checksum file '{checksum_file_path}': {e}")
|
||||
logging.error(traceback.format_exc()) # Log full traceback
|
||||
logging.error(
|
||||
f"Failed to initialize checksum file '{checksum_file_path}': {e}",
|
||||
exc_info=True,
|
||||
)
|
||||
print(
|
||||
colored(
|
||||
f"Error: Failed to initialize checksum file '{checksum_file_path}': {e}",
|
||||
|
@@ -43,6 +43,5 @@ def generate_fingerprint(seed_phrase: str, length: int = 16) -> Optional[str]:
|
||||
|
||||
return fingerprint
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to generate fingerprint: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to generate fingerprint: {e}", exc_info=True)
|
||||
return None
|
||||
|
@@ -61,7 +61,6 @@ class FingerprintManager:
|
||||
logger.error(
|
||||
f"Failed to create application directory at {self.app_dir}: {e}"
|
||||
)
|
||||
logger.error(traceback.format_exc())
|
||||
raise
|
||||
|
||||
def _load_fingerprints(self) -> List[str]:
|
||||
@@ -84,8 +83,7 @@ class FingerprintManager:
|
||||
)
|
||||
return []
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to load fingerprints: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to load fingerprints: {e}", exc_info=True)
|
||||
return []
|
||||
|
||||
def _save_fingerprints(self):
|
||||
@@ -97,8 +95,7 @@ class FingerprintManager:
|
||||
json.dump({"fingerprints": self.fingerprints}, f, indent=4)
|
||||
logger.debug(f"Fingerprints saved: {self.fingerprints}")
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to save fingerprints: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to save fingerprints: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
def add_fingerprint(self, seed_phrase: str) -> Optional[str]:
|
||||
@@ -154,8 +151,9 @@ class FingerprintManager:
|
||||
logger.info(f"Fingerprint {fingerprint} removed successfully.")
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to remove fingerprint {fingerprint}: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(
|
||||
f"Failed to remove fingerprint {fingerprint}: {e}", exc_info=True
|
||||
)
|
||||
return False
|
||||
else:
|
||||
logger.warning(f"Fingerprint {fingerprint} does not exist.")
|
||||
|
@@ -96,8 +96,7 @@ def derive_key_from_password(password: str, iterations: int = 100_000) -> bytes:
|
||||
return key_b64
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error deriving key from password: {e}")
|
||||
logger.error(traceback.format_exc()) # Log full traceback
|
||||
logger.error(f"Error deriving key from password: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
|
||||
@@ -139,8 +138,7 @@ def derive_key_from_parent_seed(parent_seed: str, fingerprint: str = None) -> by
|
||||
|
||||
return derived_key
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to derive key using HKDF: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
logger.error(f"Failed to derive key using HKDF: {e}", exc_info=True)
|
||||
raise
|
||||
|
||||
|
||||
|
@@ -89,8 +89,9 @@ def prompt_new_password() -> str:
|
||||
logging.info("Password prompt interrupted by user.")
|
||||
sys.exit(0)
|
||||
except Exception as e:
|
||||
logging.error(f"Unexpected error during password prompt: {e}")
|
||||
logging.error(traceback.format_exc()) # Log full traceback
|
||||
logging.error(
|
||||
f"Unexpected error during password prompt: {e}", exc_info=True
|
||||
)
|
||||
print(colored(f"Error: {e}", "red"))
|
||||
attempts += 1
|
||||
|
||||
@@ -132,8 +133,9 @@ def prompt_existing_password(prompt_message: str = "Enter your password: ") -> s
|
||||
logging.info("Existing password prompt interrupted by user.")
|
||||
sys.exit(0)
|
||||
except Exception as e:
|
||||
logging.error(f"Unexpected error during existing password prompt: {e}")
|
||||
logging.error(traceback.format_exc()) # Log full traceback
|
||||
logging.error(
|
||||
f"Unexpected error during existing password prompt: {e}", exc_info=True
|
||||
)
|
||||
print(colored(f"Error: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
@@ -171,8 +173,9 @@ def confirm_action(
|
||||
logging.info("Action confirmation interrupted by user.")
|
||||
sys.exit(0)
|
||||
except Exception as e:
|
||||
logging.error(f"Unexpected error during action confirmation: {e}")
|
||||
logging.error(traceback.format_exc()) # Log full traceback
|
||||
logging.error(
|
||||
f"Unexpected error during action confirmation: {e}", exc_info=True
|
||||
)
|
||||
print(colored(f"Error: {e}", "red"))
|
||||
sys.exit(1)
|
||||
|
||||
|
Reference in New Issue
Block a user