Enforce relay requirements and backup index

This commit is contained in:
thePR0M3TH3AN
2025-06-29 13:22:09 -04:00
parent c14cc6910f
commit b9437094bc
3 changed files with 24 additions and 1 deletions

View File

@@ -296,6 +296,10 @@ def handle_add_relay(password_manager: PasswordManager) -> None:
cfg_mgr.set_relays(relays) cfg_mgr.set_relays(relays)
_reload_relays(password_manager, relays) _reload_relays(password_manager, relays)
print(colored("Relay added.", "green")) print(colored("Relay added.", "green"))
try:
handle_post_to_nostr(password_manager)
except Exception as backup_error:
logging.error(f"Failed to backup index to Nostr: {backup_error}")
except Exception as e: except Exception as e:
logging.error(f"Error adding relay: {e}") logging.error(f"Error adding relay: {e}")
print(colored(f"Error: {e}", "red")) print(colored(f"Error: {e}", "red"))
@@ -319,6 +323,14 @@ def handle_remove_relay(password_manager: PasswordManager) -> None:
if not choice.isdigit() or not (1 <= int(choice) <= len(relays)): if not choice.isdigit() or not (1 <= int(choice) <= len(relays)):
print(colored("Invalid selection.", "red")) print(colored("Invalid selection.", "red"))
return return
if len(relays) == 1:
print(
colored(
"At least one relay must be configured. Add another before removing this one.",
"red",
)
)
return
relays.pop(int(choice) - 1) relays.pop(int(choice) - 1)
cfg_mgr.set_relays(relays) cfg_mgr.set_relays(relays)
_reload_relays(password_manager, relays) _reload_relays(password_manager, relays)

View File

@@ -68,6 +68,8 @@ class ConfigManager:
def set_relays(self, relays: List[str], require_pin: bool = True) -> None: def set_relays(self, relays: List[str], require_pin: bool = True) -> None:
"""Update relay list and save.""" """Update relay list and save."""
if not relays:
raise ValueError("At least one Nostr relay must be configured")
config = self.load_config(require_pin=require_pin) config = self.load_config(require_pin=require_pin)
config["relays"] = relays config["relays"] = relays
self.save_config(config) self.save_config(config)

View File

@@ -2,6 +2,7 @@ import bcrypt
from pathlib import Path from pathlib import Path
from tempfile import TemporaryDirectory from tempfile import TemporaryDirectory
from cryptography.fernet import Fernet from cryptography.fernet import Fernet
import pytest
import sys import sys
sys.path.append(str(Path(__file__).resolve().parents[1])) sys.path.append(str(Path(__file__).resolve().parents[1]))
@@ -67,7 +68,15 @@ def test_set_relays_persists_changes():
key = Fernet.generate_key() key = Fernet.generate_key()
enc_mgr = EncryptionManager(key, Path(tmpdir)) enc_mgr = EncryptionManager(key, Path(tmpdir))
cfg_mgr = ConfigManager(enc_mgr, Path(tmpdir)) cfg_mgr = ConfigManager(enc_mgr, Path(tmpdir))
cfg_mgr.set_relays(["wss://custom"], require_pin=False) cfg_mgr.set_relays(["wss://custom"], require_pin=False)
cfg = cfg_mgr.load_config(require_pin=False) cfg = cfg_mgr.load_config(require_pin=False)
assert cfg["relays"] == ["wss://custom"] assert cfg["relays"] == ["wss://custom"]
def test_set_relays_requires_at_least_one():
with TemporaryDirectory() as tmpdir:
key = Fernet.generate_key()
enc_mgr = EncryptionManager(key, Path(tmpdir))
cfg_mgr = ConfigManager(enc_mgr, Path(tmpdir))
with pytest.raises(ValueError):
cfg_mgr.set_relays([], require_pin=False)