Reply to failed EVENTs with better prefixes

This commit is contained in:
Mike Dilger 2024-02-18 08:58:32 +13:00
parent e1f29354be
commit f576106a05

View File

@ -124,12 +124,31 @@ impl WebSocketService {
// Read the event into the session buffer // Read the event into the session buffer
let (_incount, event) = Event::from_json(&input[inpos..], &mut self.buffer)?; let (_incount, event) = Event::from_json(&input[inpos..], &mut self.buffer)?;
// Check if the event passes muster if GLOBALS.config.read().await.verify_events {
if !validate_event(&event).await? { // 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( let reply = NostrReply::Ok(
event.id(), event.id(),
false, false,
NostrReplyPrefix::Blocked, prefix,
"this personal relay only accepts events related to its users".to_owned(), "this personal relay only accepts events related to its users".to_owned(),
); );
self.websocket.send(Message::text(reply.as_json())).await?; self.websocket.send(Message::text(reply.as_json())).await?;
@ -257,12 +276,7 @@ impl WebSocketService {
} }
} }
async fn validate_event(event: &Event<'_>) -> Result<bool, Error> { async fn screen_event(event: &Event<'_>) -> Result<bool, Error> {
// Verify event is valid
if GLOBALS.config.read().await.verify_events {
event.verify()?;
}
// Accept relay lists from anybody // Accept relay lists from anybody
if event.kind() == Kind(10002) { if event.kind() == Kind(10002) {
return Ok(true); return Ok(true);