feat: more detailed error messages for rejected event

This commit is contained in:
Vlad Stan 2023-02-08 11:52:07 +02:00
parent 5339dde64a
commit 7215d37fe9
2 changed files with 19 additions and 12 deletions

View file

@ -26,8 +26,6 @@ from .models import NostrRelay
from .views import * # noqa from .views import * # noqa
from .views_api import * # noqa from .views_api import * # noqa
settings.lnbits_relay_information = { settings.lnbits_relay_information = {
"name": "LNbits Nostr Relay", "name": "LNbits Nostr Relay",
"description": "Multiple relays are supported", "description": "Multiple relays are supported",

View file

@ -121,6 +121,10 @@ class NostrClientConnection:
return True return True
return False 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: async def _handle_message(self, data: List) -> List:
if len(data) < 2: if len(data) < 2:
return [] return []
@ -140,31 +144,36 @@ class NostrClientConnection:
async def _handle_event(self, e: NostrEvent): async def _handle_event(self, e: NostrEvent):
resp_nip20: List[Any] = ["OK", e.id] 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: try:
e.check_signature() 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): try:
raise ValueError(f"Public key '{e.pubkey}' is not allowed in relay '{self.relay_id}'!")
if e.is_replaceable_event(): if e.is_replaceable_event():
await delete_events( await delete_events(
self.relay_id, NostrFilter(kinds=[e.kind], authors=[e.pubkey]) self.relay_id, NostrFilter(kinds=[e.kind], authors=[e.pubkey])
) )
await create_event(self.relay_id, e) await create_event(self.relay_id, e)
if self.broadcast_event: await self._broadcast_event(e)
await self.broadcast_event(self, e)
if e.is_delete_event(): if e.is_delete_event():
await self._handle_delete_event(e) await self._handle_delete_event(e)
resp_nip20 += [True, ""] 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: except Exception as ex:
logger.debug(ex) logger.debug(ex)
event = await get_event(self.relay_id, e.id) event = await get_event(self.relay_id, e.id)
# todo: handle NIP20 in detail # 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)) await self.websocket.send_text(json.dumps(resp_nip20))