Merge pull request #27 from PR0M3TH3AN/codex/move-seed-profiles-and-nostr-in-settings

Restructure menu system
This commit is contained in:
thePR0M3TH3AN
2025-06-29 15:27:55 -04:00
committed by GitHub
2 changed files with 90 additions and 66 deletions

View File

@@ -125,16 +125,10 @@ python src/main.py
1. Add Entry 1. Add Entry
2. Retrieve Entry 2. Retrieve Entry
3. Modify an Existing Entry 3. Modify an Existing Entry
4. Backup to Nostr 4. Settings
5. Restore from Nostr 5. Exit
6. Switch Seed Profile
7. Add a New Seed Profile
8. Remove an Existing Seed Profile
9. List All Seed Profiles
10. Settings
11. Exit
Enter your choice (1-11): Enter your choice (1-5):
``` ```
### Managing Multiple Seeds ### Managing Multiple Seeds
@@ -142,18 +136,18 @@ python src/main.py
SeedPass allows you to manage multiple seed profiles (previously referred to as "fingerprints"). Each seed profile has its own parent seed and associated data, enabling you to compartmentalize your passwords. SeedPass allows you to manage multiple seed profiles (previously referred to as "fingerprints"). Each seed profile has its own parent seed and associated data, enabling you to compartmentalize your passwords.
- **Add a New Seed Profile:** - **Add a New Seed Profile:**
- Select option `8` from the main menu. - From the main menu, select **Settings** then **Profiles** and choose "Add a New Seed Profile".
- Choose to enter an existing seed or generate a new one. - Choose to enter an existing seed or generate a new one.
- If generating a new seed, you'll be provided with a 12-word BIP-85 seed phrase. **Ensure you write this down and store it securely.** - If generating a new seed, you'll be provided with a 12-word BIP-85 seed phrase. **Ensure you write this down and store it securely.**
- **Switch Between Seed Profiles:** - **Switch Between Seed Profiles:**
- Select option `7` from the main menu. - From the **Profiles** menu, select "Switch Seed Profile".
- You'll see a list of available seed profiles. - You'll see a list of available seed profiles.
- Enter the number corresponding to the seed profile you wish to switch to. - Enter the number corresponding to the seed profile you wish to switch to.
- Enter the master password associated with that seed profile. - Enter the master password associated with that seed profile.
- **List All Seed Profiles:** - **List All Seed Profiles:**
- Select option `10` from the main menu to view all existing seed profiles. - In the **Profiles** menu, choose "List All Seed Profiles" to view all existing profiles.
**Note:** The term "seed profile" is used to represent different sets of seeds you can manage within SeedPass. This provides an intuitive way to handle multiple identities or sets of passwords. **Note:** The term "seed profile" is used to represent different sets of seeds you can manage within SeedPass. This provides an intuitive way to handle multiple identities or sets of passwords.
@@ -169,16 +163,16 @@ wss://relay.primal.net
You can manage the relay list or change the PIN through the **Settings** menu: You can manage the relay list or change the PIN through the **Settings** menu:
1. From the main menu, choose option `10` (**Settings**). 1. From the main menu, choose option `4` (**Settings**).
2. Select `1` to view your current relays. 2. Select `2` (**Nostr**) to open the Nostr submenu.
3. Choose `2` to add a new relay URL. 3. Choose `3` to view your current relays.
4. Select `3` to remove a relay by number. 4. Select `4` to add a new relay URL.
5. Choose `4` to reset to the default relay list. 5. Choose `5` to remove a relay by number.
6. Select `5` to change the settings PIN. 6. Select `6` to reset to the default relay list.
7. Choose `6` to display your Nostr public key. 7. Choose `7` to display your Nostr public key.
8. Select `7` to verify the script checksum. 8. Select `8` to return to the Settings menu.
9. Choose `8` to back up the parent seed. 9. From the Settings menu you can select `3` to change the settings PIN.
10. Select `9` to return to the main menu. 10. Choose `4` to verify the script checksum or `5` to back up the parent seed.
## Running Tests ## Running Tests

View File

@@ -357,8 +357,33 @@ def handle_reset_relays(password_manager: PasswordManager) -> None:
print(colored(f"Error: {e}", "red")) print(colored(f"Error: {e}", "red"))
def handle_settings(password_manager: PasswordManager) -> None: def handle_profiles_menu(password_manager: PasswordManager) -> None:
"""Interactive settings menu for relay list and password changes.""" """Submenu for managing seed profiles."""
while True:
print("\nProfiles:")
print("1. Switch Seed Profile")
print("2. Add a New Seed Profile")
print("3. Remove an Existing Seed Profile")
print("4. List All Seed Profiles")
print("5. Back")
choice = input("Select an option: ").strip()
if choice == "1":
if not password_manager.handle_switch_fingerprint():
print(colored("Failed to switch seed profile.", "red"))
elif choice == "2":
handle_add_new_fingerprint(password_manager)
elif choice == "3":
handle_remove_fingerprint(password_manager)
elif choice == "4":
handle_list_fingerprints(password_manager)
elif choice == "5":
break
else:
print(colored("Invalid choice.", "red"))
def handle_nostr_menu(password_manager: PasswordManager) -> None:
"""Submenu for Nostr-related actions and relay configuration."""
cfg_mgr = password_manager.config_manager cfg_mgr = password_manager.config_manager
if cfg_mgr is None: if cfg_mgr is None:
print(colored("Configuration manager unavailable.", "red")) print(colored("Configuration manager unavailable.", "red"))
@@ -370,34 +395,58 @@ def handle_settings(password_manager: PasswordManager) -> None:
return return
while True: while True:
print("\nSettings:") print("\nNostr Settings:")
print("1. View current relays") print("1. Backup to Nostr")
print("2. Add a relay URL") print("2. Restore from Nostr")
print("3. Remove a relay by number") print("3. View current relays")
print("4. Reset to default relays") print("4. Add a relay URL")
print("5. Change password") print("5. Remove a relay by number")
print("6. Display Nostr Public Key") print("6. Reset to default relays")
print("7. Verify Script Checksum") print("7. Display Nostr Public Key")
print("8. Backup Parent Seed") print("8. Back")
print("9. Back")
choice = input("Select an option: ").strip() choice = input("Select an option: ").strip()
if choice == "1": if choice == "1":
handle_view_relays(cfg_mgr) handle_post_to_nostr(password_manager)
elif choice == "2": elif choice == "2":
handle_add_relay(password_manager) handle_retrieve_from_nostr(password_manager)
elif choice == "3": elif choice == "3":
handle_remove_relay(password_manager) handle_view_relays(cfg_mgr)
elif choice == "4": elif choice == "4":
handle_reset_relays(password_manager) handle_add_relay(password_manager)
elif choice == "5": elif choice == "5":
password_manager.change_password() handle_remove_relay(password_manager)
elif choice == "6": elif choice == "6":
handle_display_npub(password_manager) handle_reset_relays(password_manager)
elif choice == "7": elif choice == "7":
password_manager.handle_verify_checksum() handle_display_npub(password_manager)
elif choice == "8": elif choice == "8":
break
else:
print(colored("Invalid choice.", "red"))
def handle_settings(password_manager: PasswordManager) -> None:
"""Interactive settings menu with submenus for profiles and Nostr."""
while True:
print("\nSettings:")
print("1. Profiles")
print("2. Nostr")
print("3. Change password")
print("4. Verify Script Checksum")
print("5. Backup Parent Seed")
print("6. Back")
choice = input("Select an option: ").strip()
if choice == "1":
handle_profiles_menu(password_manager)
elif choice == "2":
handle_nostr_menu(password_manager)
elif choice == "3":
password_manager.change_password()
elif choice == "4":
password_manager.handle_verify_checksum()
elif choice == "5":
password_manager.handle_backup_reveal_parent_seed() password_manager.handle_backup_reveal_parent_seed()
elif choice == "9": elif choice == "6":
break break
else: else:
print(colored("Invalid choice.", "red")) print(colored("Invalid choice.", "red"))
@@ -412,25 +461,19 @@ def display_menu(password_manager: PasswordManager):
1. Add Entry 1. Add Entry
2. Retrieve Entry 2. Retrieve Entry
3. Modify an Existing Entry 3. Modify an Existing Entry
4. Backup to Nostr 4. Settings
5. Restore from Nostr 5. Exit
6. Switch Seed Profile
7. Add a New Seed Profile
8. Remove an Existing Seed Profile
9. List All Seed Profiles
10. Settings
11. Exit
""" """
while True: while True:
# Flush logging handlers # Flush logging handlers
for handler in logging.getLogger().handlers: for handler in logging.getLogger().handlers:
handler.flush() handler.flush()
print(colored(menu, "cyan")) print(colored(menu, "cyan"))
choice = input("Enter your choice (1-11): ").strip() choice = input("Enter your choice (1-5): ").strip()
if not choice: if not choice:
print( print(
colored( colored(
"No input detected. Please enter a number between 1 and 11.", "No input detected. Please enter a number between 1 and 5.",
"yellow", "yellow",
) )
) )
@@ -453,21 +496,8 @@ def display_menu(password_manager: PasswordManager):
elif choice == "3": elif choice == "3":
password_manager.handle_modify_entry() password_manager.handle_modify_entry()
elif choice == "4": elif choice == "4":
handle_post_to_nostr(password_manager)
elif choice == "5":
handle_retrieve_from_nostr(password_manager)
elif choice == "6":
if not password_manager.handle_switch_fingerprint():
print(colored("Failed to switch seed profile.", "red"))
elif choice == "7":
handle_add_new_fingerprint(password_manager)
elif choice == "8":
handle_remove_fingerprint(password_manager)
elif choice == "9":
handle_list_fingerprints(password_manager)
elif choice == "10":
handle_settings(password_manager) handle_settings(password_manager)
elif choice == "11": elif choice == "5":
logging.info("Exiting the program.") logging.info("Exiting the program.")
print(colored("Exiting the program.", "green")) print(colored("Exiting the program.", "green"))
password_manager.nostr_client.close_client_pool() password_manager.nostr_client.close_client_pool()