Add pubkey ban support

Temporary use nostr-db as a db backend due to breaking API change
    in the library
This commit is contained in:
Tony Klink 2024-01-23 10:30:47 -06:00
parent a178cdee05
commit 0bbce25d39
Signed by: klink
GPG key ID: 85175567C4D19231
12 changed files with 561 additions and 917 deletions

View file

@ -67,17 +67,26 @@ pub async fn client_connection(
}
// }
}
crate::bussy::Command::DbResRelayMessage(client_id, events) => {
crate::bussy::Command::DbResRelayMessages(client_id, relay_messages) => {
if client.client_id == client_id {
if let Some(sender) = &client.client_connection {
if !sender.is_closed() {
for event in events {
sender.send(Ok(Message::text(event))).unwrap();
for message in relay_messages {
sender.send(Ok(Message::text(message.as_json()))).unwrap();
}
}
}
}
}
crate::bussy::Command::DbResEventCounts(client_id, relay_message) => {
if client.client_id == client_id {
if let Some(sender) = &client.client_connection {
if !sender.is_closed() {
sender.send(Ok(Message::text(relay_message.as_json()))).unwrap();
}
}
}
}
crate::bussy::Command::DbResOkWithStatus(client_id, status) => {
if client.client_id == client_id {
if let Some(sender) = &client.client_connection {
@ -177,7 +186,7 @@ async fn socket_on_message(context: &Context, client: &mut Client, msg: Message)
Err(e) => {
log::error!("error while parsing client message request: {}", e);
let response = nostr::RelayMessage::new_notice("Invalid message");
let response = nostr::RelayMessage::notice("Invalid message");
let message = Message::text(response.as_json());
send(client, message);
@ -212,7 +221,7 @@ async fn handle_msg(context: &Context, client: &mut Client, client_message: Clie
ClientMessage::Count {
subscription_id,
filters,
} => handle_count(client, subscription_id, filters).await,
} => handle_count(context, client, subscription_id, filters).await,
ClientMessage::Close(subscription_id) => handle_close(client, subscription_id).await,
ClientMessage::Auth(event) => handle_auth(client, event).await,
_ => (),
@ -224,7 +233,7 @@ async fn handle_event(context: &Context, client: &Client, event: Box<Event>) {
if let Err(err) = event.verify() {
let relay_message =
nostr::RelayMessage::new_ok(event.id, false, "Failed to verify event signature");
nostr::RelayMessage::ok(event.id, false, "Failed to verify event signature");
let message = crate::bussy::Message {
source: channels::MSG_RELAY,
content: crate::bussy::Command::PipelineResRelayMessageOk(
@ -253,7 +262,7 @@ async fn handle_req(
client: &mut Client,
subscription_id: SubscriptionId,
filters: Vec<Filter>,
) {
) {
let subscription = Subscription::new(subscription_id.clone(), filters);
let needs_historical_events = subscription.needs_historical_events();
@ -263,6 +272,7 @@ async fn handle_req(
client.ip(),
&subscription_error.message
);
let message = format!(
"[\"CLOSED\", \"{}\", \"{}\"]",
subscription_id, subscription_error.message
@ -282,6 +292,7 @@ async fn handle_req(
return;
};
log::info!("[SUBSCRIPTION] needs historical events");
if needs_historical_events {
context
.pubsub
@ -296,12 +307,24 @@ async fn handle_req(
}
}
async fn handle_count(client: &Client, subscription_id: SubscriptionId, filters: Vec<Filter>) {
// context.pubsub.send(new nostr event) then handle possible errors
async fn handle_count(
context: &Context,
client: &Client,
subscription_id: SubscriptionId,
filters: Vec<Filter>,
) {
let subscription = Subscription::new(subscription_id, filters);
let message = Message::text("COUNT not implemented");
send(client, message);
context
.pubsub
.publish(
channels::MSG_NOOSE,
crate::bussy::Message {
source: channels::MSG_RELAY,
content: crate::bussy::Command::DbReqEventCounts(client.client_id, subscription),
},
)
.await
}
async fn handle_close(client: &mut Client, subscription_id: SubscriptionId) {