From f576106a05990833f547baa069a9d7934eed73c3 Mon Sep 17 00:00:00 2001 From: Mike Dilger Date: Sun, 18 Feb 2024 08:58:32 +1300 Subject: [PATCH] Reply to failed EVENTs with better prefixes --- src/nostr.rs | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/nostr.rs b/src/nostr.rs index 83703d8..e09ab14 100644 --- a/src/nostr.rs +++ b/src/nostr.rs @@ -124,12 +124,31 @@ impl WebSocketService { // Read the event into the session buffer let (_incount, event) = Event::from_json(&input[inpos..], &mut self.buffer)?; - // Check if the event passes muster - if !validate_event(&event).await? { + if GLOBALS.config.read().await.verify_events { + // Verify the event is valid (id is hash, signature is valid) + if let Err(e) = event.verify() { + let reply = NostrReply::Ok( + event.id(), + false, + NostrReplyPrefix::Invalid, + format!("{}", e), + ); + self.websocket.send(Message::text(reply.as_json())).await?; + return Ok(()); + } + } + + // Screen the event to see if we are willing to accept it + if !screen_event(&event).await? { + let prefix = if self.user.is_some() { + NostrReplyPrefix::Restricted + } else { + NostrReplyPrefix::AuthRequired + }; let reply = NostrReply::Ok( event.id(), false, - NostrReplyPrefix::Blocked, + prefix, "this personal relay only accepts events related to its users".to_owned(), ); self.websocket.send(Message::text(reply.as_json())).await?; @@ -257,12 +276,7 @@ impl WebSocketService { } } -async fn validate_event(event: &Event<'_>) -> Result { - // Verify event is valid - if GLOBALS.config.read().await.verify_events { - event.verify()?; - } - +async fn screen_event(event: &Event<'_>) -> Result { // Accept relay lists from anybody if event.kind() == Kind(10002) { return Ok(true);