From 7215d37fe9325b61e278e43cfd8059292c4e1daa Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 8 Feb 2023 11:52:07 +0200 Subject: [PATCH] feat: more detailed error messages for rejected event --- __init__.py | 2 -- client_manager.py | 29 +++++++++++++++++++---------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/__init__.py b/__init__.py index 18687e4..849456f 100644 --- a/__init__.py +++ b/__init__.py @@ -26,8 +26,6 @@ from .models import NostrRelay from .views import * # noqa from .views_api import * # noqa - - settings.lnbits_relay_information = { "name": "LNbits Nostr Relay", "description": "Multiple relays are supported", diff --git a/client_manager.py b/client_manager.py index 8bd0c11..1d7c3d2 100644 --- a/client_manager.py +++ b/client_manager.py @@ -121,6 +121,10 @@ class NostrClientConnection: return True return False + async def _broadcast_event(self, e: NostrEvent): + if self.broadcast_event: + await self.broadcast_event(self, e) + async def _handle_message(self, data: List) -> List: if len(data) < 2: return [] @@ -140,31 +144,36 @@ class NostrClientConnection: async def _handle_event(self, e: NostrEvent): resp_nip20: List[Any] = ["OK", e.id] + + if not self.client_config.is_author_allowed(e.pubkey): + resp_nip20 += [False, f"Public key '{e.pubkey}' is not allowed in relay '{self.relay_id}'!"] + await self.websocket.send_text(json.dumps(resp_nip20)) + return None + try: e.check_signature() + except ValueError as ex: + resp_nip20 += [False, "invalid: wrong event `id` or `sig`"] + await self.websocket.send_text(json.dumps(resp_nip20)) + return None - if not self.client_config.is_author_allowed(e.pubkey): - raise ValueError(f"Public key '{e.pubkey}' is not allowed in relay '{self.relay_id}'!") - + try: if e.is_replaceable_event(): await delete_events( self.relay_id, NostrFilter(kinds=[e.kind], authors=[e.pubkey]) ) await create_event(self.relay_id, e) - if self.broadcast_event: - await self.broadcast_event(self, e) + await self._broadcast_event(e) + if e.is_delete_event(): await self._handle_delete_event(e) resp_nip20 += [True, ""] - except ValueError as ex: - #todo: handle the other Value Errors - logger.debug(ex) - resp_nip20 += [False, "invalid: wrong event `id` or `sig`"] except Exception as ex: logger.debug(ex) event = await get_event(self.relay_id, e.id) # todo: handle NIP20 in detail - resp_nip20 += [event != None, f"error: failed to create event"] + message = "error: failed to create event" + resp_nip20 += [event != None, message] await self.websocket.send_text(json.dumps(resp_nip20))