mirror of
https://github.com/scsibug/nostr-rs-relay.git
synced 2024-11-09 21:29:06 -05:00
refactor: simplify NOTICE messages
This commit is contained in:
parent
048199e30b
commit
ed3a6b9692
|
@ -1,4 +1,4 @@
|
||||||
FROM rust:1.58.1 as builder
|
FROM rust:1.59.0 as builder
|
||||||
|
|
||||||
RUN USER=root cargo new --bin nostr-rs-relay
|
RUN USER=root cargo new --bin nostr-rs-relay
|
||||||
WORKDIR ./nostr-rs-relay
|
WORKDIR ./nostr-rs-relay
|
||||||
|
|
24
src/main.rs
24
src/main.rs
|
@ -21,6 +21,7 @@ use nostr_rs_relay::info::RelayInfo;
|
||||||
use nostr_rs_relay::nip05;
|
use nostr_rs_relay::nip05;
|
||||||
use nostr_rs_relay::subscription::Subscription;
|
use nostr_rs_relay::subscription::Subscription;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use serde_json::json;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::convert::Infallible;
|
use std::convert::Infallible;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
@ -61,7 +62,7 @@ async fn handle_web_request(
|
||||||
) {
|
) {
|
||||||
// Request for / as websocket
|
// Request for / as websocket
|
||||||
("/", true) => {
|
("/", true) => {
|
||||||
debug!("websocket with upgrade request");
|
trace!("websocket with upgrade request");
|
||||||
//assume request is a handshake, so create the handshake response
|
//assume request is a handshake, so create the handshake response
|
||||||
let response = match handshake::server::create_response_with_body(&request, || {
|
let response = match handshake::server::create_response_with_body(&request, || {
|
||||||
Body::empty()
|
Body::empty()
|
||||||
|
@ -355,6 +356,11 @@ fn convert_to_msg(msg: String) -> Result<NostrMessage> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Turn a string into a NOTICE message ready to send over a WebSocket
|
||||||
|
fn make_notice_message(msg: &str) -> Message {
|
||||||
|
Message::text(json!(["NOTICE", msg]).to_string())
|
||||||
|
}
|
||||||
|
|
||||||
/// Handle new client connections. This runs through an event loop
|
/// Handle new client connections. This runs through an event loop
|
||||||
/// for all client communication.
|
/// for all client communication.
|
||||||
async fn nostr_server(
|
async fn nostr_server(
|
||||||
|
@ -414,8 +420,7 @@ async fn nostr_server(
|
||||||
ws_stream.send(Message::Ping(Vec::new())).await.ok();
|
ws_stream.send(Message::Ping(Vec::new())).await.ok();
|
||||||
},
|
},
|
||||||
Some(notice_msg) = notice_rx.recv() => {
|
Some(notice_msg) = notice_rx.recv() => {
|
||||||
let n = notice_msg.to_string().replace("\"", "");
|
ws_stream.send(make_notice_message(¬ice_msg)).await.ok();
|
||||||
ws_stream.send(Message::Text(format!("[\"NOTICE\",\"{}\"]", n))).await.ok();
|
|
||||||
},
|
},
|
||||||
Some(query_result) = query_rx.recv() => {
|
Some(query_result) = query_rx.recv() => {
|
||||||
// database informed us of a query result we asked for
|
// database informed us of a query result we asked for
|
||||||
|
@ -455,7 +460,7 @@ async fn nostr_server(
|
||||||
convert_to_msg(m)
|
convert_to_msg(m)
|
||||||
},
|
},
|
||||||
Some(Ok(Message::Binary(_))) => {
|
Some(Ok(Message::Binary(_))) => {
|
||||||
ws_stream.send(Message::Text(format!("[\"NOTICE\",\"{}\"]", "binary messages are not accepted"))).await.ok();
|
ws_stream.send(make_notice_message("binary messages are not accepted")).await.ok();
|
||||||
continue;
|
continue;
|
||||||
},
|
},
|
||||||
Some(Ok(Message::Ping(_))) | Some(Ok(Message::Pong(_))) => {
|
Some(Ok(Message::Ping(_))) | Some(Ok(Message::Pong(_))) => {
|
||||||
|
@ -501,7 +506,7 @@ async fn nostr_server(
|
||||||
},
|
},
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
info!("client {:?} sent an invalid event", cid);
|
info!("client {:?} sent an invalid event", cid);
|
||||||
ws_stream.send(Message::Text(format!("[\"NOTICE\",\"{}\"]", "event was invalid"))).await.ok();
|
ws_stream.send(make_notice_message("event was invalid")).await.ok();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -523,8 +528,7 @@ async fn nostr_server(
|
||||||
},
|
},
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
info!("Subscription error: {}", e);
|
info!("Subscription error: {}", e);
|
||||||
let s = e.to_string().replace("\"", "");
|
ws_stream.send(make_notice_message(&e.to_string())).await.ok();
|
||||||
ws_stream.send(Message::Text(format!("[\"NOTICE\",\"{}\"]", s))).await.ok();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -545,7 +549,7 @@ async fn nostr_server(
|
||||||
},
|
},
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
info!("invalid command ignored");
|
info!("invalid command ignored");
|
||||||
ws_stream.send(Message::Text(format!("[\"NOTICE\",\"{}\"]", "could not parse command"))).await.ok();
|
ws_stream.send(make_notice_message("could not parse command")).await.ok();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -555,11 +559,11 @@ async fn nostr_server(
|
||||||
}
|
}
|
||||||
Err(Error::EventMaxLengthError(s)) => {
|
Err(Error::EventMaxLengthError(s)) => {
|
||||||
info!("client {:?} sent event larger ({} bytes) than max size", cid, s);
|
info!("client {:?} sent event larger ({} bytes) than max size", cid, s);
|
||||||
ws_stream.send(Message::Text(format!("[\"NOTICE\",\"{}\"]", "event exceeded max size"))).await.ok();
|
ws_stream.send(make_notice_message("event exceeded max size")).await.ok();
|
||||||
},
|
},
|
||||||
Err(Error::ProtoParseError) => {
|
Err(Error::ProtoParseError) => {
|
||||||
info!("client {:?} sent event that could not be parsed", cid);
|
info!("client {:?} sent event that could not be parsed", cid);
|
||||||
ws_stream.send(Message::Text(format!("[\"NOTICE\",\"{}\"]", "could not parse command"))).await.ok();
|
ws_stream.send(make_notice_message("could not parse command")).await.ok();
|
||||||
},
|
},
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
info!("got non-fatal error from client: {:?}, error: {:?}", cid, e);
|
info!("got non-fatal error from client: {:?}, error: {:?}", cid, e);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user