From 7774db8c47a30a409ee80adbf6e63cbc3114ac1a Mon Sep 17 00:00:00 2001 From: 0xtr Date: Sun, 25 Dec 2022 00:16:55 +0100 Subject: [PATCH] feat: add event kind blacklist Adds a list to the config where you can specify which event kinds to blacklist. The blacklist check will run right after verifying that the pubkey is allowed to post events to the relay. --- config.toml | 5 +++++ src/config.rs | 2 ++ src/db.rs | 20 +++++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/config.toml b/config.toml index 6bcf6c7..7e4c02f 100644 --- a/config.toml +++ b/config.toml @@ -100,6 +100,11 @@ reject_future_seconds = 1800 # backpressure to senders if writes are slow. #event_persist_buffer = 4096 +# Event kind blacklist. Events with these kinds will be discarded. +#event_kind_blacklist = [ +# 70202, +#] + [authorization] # Pubkey addresses in this array are whitelisted for event publishing. # Only valid events by these authors will be accepted, if the variable diff --git a/src/config.rs b/src/config.rs index 99e4377..3d22984 100644 --- a/src/config.rs +++ b/src/config.rs @@ -60,6 +60,7 @@ pub struct Limits { pub max_ws_frame_bytes: Option, pub broadcast_buffer: usize, // events to buffer for subscribers (prevents slow readers from consuming memory) pub event_persist_buffer: usize, // events to buffer for database commits (block senders if database writes are too slow) + pub event_kind_blacklist: Option> } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -225,6 +226,7 @@ impl Default for Settings { max_ws_frame_bytes: Some(2 << 17), // 128K broadcast_buffer: 16384, event_persist_buffer: 4096, + event_kind_blacklist: None, }, authorization: Authorization { pubkey_whitelist: None, // Allow any address to publish diff --git a/src/db.rs b/src/db.rs index 5106880..2f809cf 100644 --- a/src/db.rs +++ b/src/db.rs @@ -232,6 +232,24 @@ pub async fn db_writer( } } + // Check that event kind isn't blacklisted + let kinds_blacklist = &settings.limits.event_kind_blacklist.clone(); + if let Some(event_kind_blacklist) = kinds_blacklist { + if event_kind_blacklist.contains(&event.kind) { + info!( + "Rejecting event {}, blacklisted kind", + &event.get_event_id_prefix() + ); + notice_tx + .try_send(Notice::blocked( + event.id, + "event kind is blocked by relay" + )) + .ok(); + continue; + } + } + // send any metadata events to the NIP-05 verifier if nip05_active && event.is_kind_metadata() { // we are sending this prior to even deciding if we @@ -901,4 +919,4 @@ pub async fn db_query( let ok: Result<()> = Ok(()); ok }); -} +} \ No newline at end of file