mirror of
https://github.com/PR0M3TH3AN/SeedPass.git
synced 2025-09-08 07:18:47 +00:00
Merge pull request #27 from PR0M3TH3AN/codex/move-seed-profiles-and-nostr-in-settings
Restructure menu system
This commit is contained in:
38
README.md
38
README.md
@@ -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
|
||||||
|
|
||||||
|
118
src/main.py
118
src/main.py
@@ -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()
|
||||||
|
Reference in New Issue
Block a user