Compare commits

..

6 Commits

Author SHA1 Message Date
Mike Dilger
db8b29dfc4
Updates for pocket ScreenResult (including sending 'redacted' with some CLOSED) 2025-02-20 12:28:44 +13:00
Mike Dilger
dccf8afcf5
[BREAKING] Update pocket 2025-02-20 11:57:20 +13:00
Mike Dilger
1568a63110
Use CLOSED not EOSE if the filter has any ids set 2025-02-20 11:10:27 +13:00
Mike Dilger
8743bd33df
move sample to port 8081 2025-02-20 04:36:45 +13:00
Mike Dilger
9ca0f5b45c
ignore invalid headers 2025-02-20 04:14:12 +13:00
Mike Dilger
26d1f0505e
cargo update 2025-02-20 03:51:17 +13:00
10 changed files with 171 additions and 104 deletions

151
Cargo.lock generated
View File

@ -90,9 +90,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
[[package]]
name = "aws-lc-rs"
version = "1.12.1"
version = "1.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ea835662a0af02443aa1396d39be523bbf8f11ee6fad20329607c480bea48c3"
checksum = "3c6a895b664295a4ba0c2c0203c7075ea585dd75cd5c37a8efac829e13e460ef"
dependencies = [
"aws-lc-sys",
"paste",
@ -101,9 +101,9 @@ dependencies = [
[[package]]
name = "aws-lc-sys"
version = "0.25.0"
version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71b2ddd3ada61a305e1d8bb6c005d1eaa7d14d903681edfc400406d523a9b491"
checksum = "0f9dd2e03ee80ca2822dd6ea431163d2ef259f2066a4d6ccaca6d9dcb386aa43"
dependencies = [
"bindgen",
"cc",
@ -230,15 +230,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "bytes"
version = "1.9.0"
version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b"
checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9"
[[package]]
name = "cc"
version = "1.2.10"
version = "1.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229"
checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9"
dependencies = [
"jobserver",
"libc",
@ -312,9 +312,9 @@ dependencies = [
[[package]]
name = "cmake"
version = "0.1.52"
version = "0.1.54"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e"
checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0"
dependencies = [
"cc",
]
@ -333,9 +333,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
[[package]]
name = "cpufeatures"
version = "0.2.16"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3"
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
dependencies = [
"libc",
]
@ -381,15 +381,15 @@ dependencies = [
[[package]]
name = "data-encoding"
version = "2.7.0"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e60eed09d8c01d3cee5b7d30acb059b76614c918fa0f992e0dd6eeb10daad6f"
checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010"
[[package]]
name = "derive_more"
version = "0.99.18"
version = "0.99.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce"
checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f"
dependencies = [
"convert_case",
"proc-macro2",
@ -465,9 +465,9 @@ dependencies = [
[[package]]
name = "equivalent"
version = "1.0.1"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "errno"
@ -627,6 +627,18 @@ dependencies = [
"wasi 0.11.0+wasi-snapshot-preview1",
]
[[package]]
name = "getrandom"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8"
dependencies = [
"cfg-if",
"libc",
"wasi 0.13.3+wasi-0.2.2",
"windows-targets",
]
[[package]]
name = "gimli"
version = "0.31.1"
@ -755,9 +767,9 @@ dependencies = [
[[package]]
name = "httparse"
version = "1.9.5"
version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946"
checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a"
[[package]]
name = "httpdate"
@ -773,9 +785,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hyper"
version = "1.5.2"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0"
checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
dependencies = [
"bytes",
"futures-channel",
@ -1120,9 +1132,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "miniz_oxide"
version = "0.8.3"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924"
checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b"
dependencies = [
"adler2",
]
@ -1175,9 +1187,9 @@ dependencies = [
[[package]]
name = "once_cell"
version = "1.20.2"
version = "1.20.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
[[package]]
name = "page_size"
@ -1281,7 +1293,7 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pocket-db"
version = "0.1.0"
source = "git+https://github.com/mikedilger/pocket?branch=master#e6d55e205cc140cc04728960c2ca4e6e906808ef"
source = "git+https://github.com/mikedilger/pocket?branch=master#57513d3a22b89a20313c018a01b5281d98d40c47"
dependencies = [
"heed",
"libc",
@ -1292,7 +1304,7 @@ dependencies = [
[[package]]
name = "pocket-types"
version = "0.1.0"
source = "git+https://github.com/mikedilger/pocket?branch=master#e6d55e205cc140cc04728960c2ca4e6e906808ef"
source = "git+https://github.com/mikedilger/pocket?branch=master#57513d3a22b89a20313c018a01b5281d98d40c47"
dependencies = [
"derive_more",
"secp256k1 0.28.2",
@ -1446,15 +1458,14 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "ring"
version = "0.17.8"
version = "0.17.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
checksum = "e75ec5e92c4d8aede845126adc388046234541629e76029599ed35a003c7ed24"
dependencies = [
"cc",
"cfg-if",
"getrandom 0.2.15",
"libc",
"spin",
"untrusted",
"windows-sys 0.52.0",
]
@ -1482,9 +1493,9 @@ dependencies = [
[[package]]
name = "rustix"
version = "0.38.43"
version = "0.38.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6"
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
dependencies = [
"bitflags",
"errno",
@ -1495,9 +1506,9 @@ dependencies = [
[[package]]
name = "rustls"
version = "0.23.21"
version = "0.23.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8"
checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395"
dependencies = [
"aws-lc-rs",
"log",
@ -1519,9 +1530,9 @@ dependencies = [
[[package]]
name = "rustls-pki-types"
version = "1.10.1"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37"
checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
[[package]]
name = "rustls-webpki"
@ -1537,9 +1548,9 @@ dependencies = [
[[package]]
name = "ryu"
version = "1.0.18"
version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd"
[[package]]
name = "scopeguard"
@ -1615,9 +1626,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.137"
version = "1.0.138"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "930cfb6e6abf99298aaad7d29abbef7a9999a9a8806a40088f55f0dcec03146b"
checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949"
dependencies = [
"itoa",
"memchr",
@ -1677,9 +1688,9 @@ dependencies = [
[[package]]
name = "smallvec"
version = "1.13.2"
version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
[[package]]
name = "socket2"
@ -1712,12 +1723,6 @@ dependencies = [
"syn",
]
[[package]]
name = "spin"
version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
[[package]]
name = "stable_deref_trait"
version = "1.2.0"
@ -1732,9 +1737,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
version = "2.0.96"
version = "2.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80"
checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1"
dependencies = [
"proc-macro2",
"quote",
@ -1763,13 +1768,13 @@ dependencies = [
[[package]]
name = "tempfile"
version = "3.15.0"
version = "3.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704"
checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230"
dependencies = [
"cfg-if",
"fastrand",
"getrandom 0.2.15",
"getrandom 0.3.1",
"once_cell",
"rustix",
"windows-sys 0.59.0",
@ -1892,9 +1897,9 @@ dependencies = [
[[package]]
name = "toml"
version = "0.8.19"
version = "0.8.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148"
dependencies = [
"serde",
"serde_spanned",
@ -1913,9 +1918,9 @@ dependencies = [
[[package]]
name = "toml_edit"
version = "0.22.22"
version = "0.22.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5"
checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474"
dependencies = [
"indexmap",
"serde",
@ -1944,15 +1949,15 @@ dependencies = [
[[package]]
name = "typenum"
version = "1.17.0"
version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
[[package]]
name = "unicode-ident"
version = "1.0.14"
version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
[[package]]
name = "untrusted"
@ -2013,6 +2018,15 @@ version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasi"
version = "0.13.3+wasi-0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2"
dependencies = [
"wit-bindgen-rt",
]
[[package]]
name = "which"
version = "4.4.2"
@ -2131,13 +2145,22 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "winnow"
version = "0.6.24"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a"
checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1"
dependencies = [
"memchr",
]
[[package]]
name = "wit-bindgen-rt"
version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c"
dependencies = [
"bitflags",
]
[[package]]
name = "write16"
version = "1.0.0"

View File

@ -2,7 +2,7 @@
data_directory = "./sample"
ip_address = "127.0.0.1"
port = 8080
port = 8081
hostname = "localhost"
chorus_is_behind_a_proxy = false
use_tls = false

View File

@ -1,4 +1,5 @@
use chorus::error::{ChorusError, Error};
use pocket_db::ScreenResult;
use pocket_types::{Filter, Id, Pubkey, Tags};
use std::env;
@ -50,7 +51,8 @@ fn main() -> Result<(), Error> {
let mut filter_buffer: [u8; 128] = [0; 128];
let filter =
Filter::from_parts(&[], &[pk], &[], tags, None, None, None, &mut filter_buffer)?;
let events = store.find_events(filter, true, 0, 0, |_| true)?;
let (events, _redacted) =
store.find_events(filter, true, 0, 0, |_| ScreenResult::Match)?;
for event in events.iter() {
store.remove_event(event.id())?;
}

View File

@ -1,4 +1,5 @@
use chorus::error::Error;
use pocket_db::ScreenResult;
use pocket_types::{Event, Filter};
use std::env;
@ -23,9 +24,9 @@ fn main() -> Result<(), Error> {
let mut buffer: [u8; 128] = [0; 128];
let (_incount, _outcount, filter) = Filter::from_json(b"{}", &mut buffer)?;
let screen = |_: &Event| -> bool { true };
let screen = |_: &Event| -> ScreenResult { ScreenResult::Match };
let mut events = store.find_events(
let (mut events, _redacted) = store.find_events(
filter,
config.allow_scraping,
config.allow_scrape_if_limited_to,

View File

@ -1,4 +1,5 @@
use chorus::error::Error;
use pocket_db::ScreenResult;
use pocket_types::{Event, Filter, Kind};
use std::env;
use std::io::Write;
@ -33,9 +34,9 @@ fn main() -> Result<(), Error> {
let mut buffer: [u8; 128] = [0; 128];
let (_incount, _outcount, filter) = Filter::from_json(b"{}", &mut buffer)?;
let screen = |_: &Event| -> bool { true };
let screen = |_: &Event| -> ScreenResult { ScreenResult::Match };
let mut events = store.find_events(
let (mut events, _redacted) = store.find_events(
filter,
config.allow_scraping,
config.allow_scrape_if_limited_to,

View File

@ -40,6 +40,7 @@ lazy_static! {
let (shutting_down, _) = tokio::sync::watch::channel(false);
let mut http1builder = http1::Builder::new();
http1builder.ignore_invalid_headers(true);
http1builder.keep_alive(true);
http1builder.timer(TokioTimer::new());
http1builder.header_read_timeout(Duration::from_secs(5));

View File

@ -27,7 +27,7 @@ use hyper_tungstenite::tungstenite;
use hyper_tungstenite::{HyperWebsocket, WebSocketStream};
use hyper_util::rt::TokioIo;
use neg_storage::NegentropyStorageVector;
use pocket_db::Store;
use pocket_db::{ScreenResult, Store};
use pocket_types::{Id, OwnedFilter, Pubkey};
use speedy::{Readable, Writable};
use std::borrow::Cow;
@ -482,15 +482,21 @@ impl WebSocketService {
'subs: for (subid, filters) in self.subscriptions.iter() {
for filter in filters.iter() {
if filter.event_matches(event)?
&& nostr::screen_outgoing_event(event, &event_flags, authorized_user)
{
let message = NostrReply::Event(subid, event);
// note, this is not currently counted in throttling
self.websocket
.send(Message::text(message.as_json()))
.await?;
continue 'subs;
if filter.event_matches(event)? {
let screen_result =
nostr::screen_outgoing_event(event, &event_flags, authorized_user);
if screen_result == ScreenResult::Redacted {
// TBD: Update subscription so the final close can
// let them know there were redactions from
// the post-EOSE data
} else if screen_result == ScreenResult::Match {
let message = NostrReply::Event(subid, event);
// note, this is not currently counted in throttling
self.websocket
.send(Message::text(message.as_json()))
.await?;
continue 'subs;
}
}
}
}

View File

@ -5,6 +5,7 @@ use crate::reply::{NostrReply, NostrReplyPrefix};
use crate::WebSocketService;
use hyper_tungstenite::tungstenite::Message;
use negentropy::{Bytes, Negentropy};
use pocket_db::ScreenResult;
use pocket_types::json::{eat_whitespace, json_unescape, verify_char};
use pocket_types::{read_hex, Event, Filter, Hll8, Kind, OwnedFilter, Pubkey, Time};
use url::Url;
@ -146,6 +147,10 @@ impl WebSocketService {
}
}
let completes = filters.iter().all(|f| f.completes());
let mut redacted: bool = false;
// NOTE on private events (DMs, GiftWraps)
// As seen above, we will send CLOSED auth-required if they ask for DMs and are not
// AUTHed yet.
@ -157,11 +162,11 @@ impl WebSocketService {
let mut events: Vec<&Event> = Vec::new();
for filter in filters.iter() {
let screen = |event: &Event| {
let screen = |event: &Event| -> ScreenResult {
let event_flags = event_flags(event, &user);
screen_outgoing_event(event, &event_flags, authorized_user)
};
let filter_events = {
let (filter_events, was_redacted) = {
let config = &*GLOBALS.config.read();
GLOBALS.store.get().unwrap().find_events(
filter,
@ -172,6 +177,7 @@ impl WebSocketService {
)?
};
events.extend(filter_events);
redacted = redacted || was_redacted;
}
// sort
@ -200,13 +206,27 @@ impl WebSocketService {
self.send(Message::text(reply.as_json())).await?;
}
// eose
let reply = NostrReply::Eose(subid);
self.send(Message::text(reply.as_json())).await?;
if completes {
// Closed
let reply = if redacted {
NostrReply::Closed(subid, NostrReplyPrefix::None, "".to_owned())
} else {
NostrReply::Closed(
subid,
NostrReplyPrefix::Redacted,
"Some matching events could not be served to you.".to_owned(),
)
};
self.send(Message::text(reply.as_json())).await?;
} else {
// EOSE
let reply = NostrReply::Eose(subid);
self.send(Message::text(reply.as_json())).await?;
}
}
}
if !count {
if !count && !completes {
// Store subscription
self.subscriptions.insert(subid.to_owned(), filters);
@ -523,11 +543,11 @@ impl WebSocketService {
// Find all matching events
let mut events: Vec<&Event> = Vec::new();
let screen = |event: &Event| {
let screen = |event: &Event| -> ScreenResult {
let event_flags = event_flags(event, &user);
screen_outgoing_event(event, &event_flags, authorized_user)
};
let filter_events = {
let (filter_events, _redacted) = {
let config = &*GLOBALS.config.read();
GLOBALS.store.get().unwrap().find_events(
&filter,
@ -767,59 +787,63 @@ pub fn screen_outgoing_event(
event: &Event,
event_flags: &EventFlags,
authorized_user: bool,
) -> bool {
) -> ScreenResult {
// Forbid if it is a private event (DM or GiftWrap) and theey are neither the recipient
// nor the author
if event.kind() == Kind::from(4) || event.kind() == Kind::from(1059) {
return event_flags.tags_current_user || event_flags.author_is_current_user;
if event_flags.tags_current_user || event_flags.author_is_current_user {
return ScreenResult::Match;
} else {
return ScreenResult::Redacted;
}
}
// Forbid (and delete) if it has an expired expiration tag
if matches!(event.is_expired(), Ok(true)) {
let _ = GLOBALS.store.get().unwrap().remove_event(event.id());
return false;
return ScreenResult::Mismatch;
}
// Allow if an open relay
if GLOBALS.config.read().open_relay {
return true;
return ScreenResult::Match;
}
// Allow Relay Lists
if GLOBALS.config.read().serve_relay_lists
&& (event.kind() == Kind::from(10002) || event.kind() == Kind::from(10050))
{
return true;
return ScreenResult::Match;
}
// Allow if event kind ephemeral
if event.kind().is_ephemeral() && GLOBALS.config.read().serve_ephemeral {
return true;
return ScreenResult::Match;
}
// Allow if an authorized_user is asking
if authorized_user {
return true;
return ScreenResult::Match;
}
// Everybody can see events from our authorized users
if event_flags.author_is_an_authorized_user {
return true;
return ScreenResult::Match;
}
// Allow if event is explicitly approved
if let Ok(Some(true)) = crate::get_event_approval(GLOBALS.store.get().unwrap(), event.id()) {
return true;
return ScreenResult::Match;
}
// Allow if author is explicitly approved
if let Ok(Some(true)) = crate::get_pubkey_approval(GLOBALS.store.get().unwrap(), event.pubkey())
{
return true;
return ScreenResult::Match;
}
// Do not allow the rest
false
ScreenResult::Redacted
}
pub struct EventFlags {

View File

@ -9,6 +9,7 @@ pub enum NostrReplyPrefix {
Duplicate,
Blocked,
RateLimited,
Redacted,
Restricted,
Invalid,
Error,
@ -23,6 +24,7 @@ impl fmt::Display for NostrReplyPrefix {
NostrReplyPrefix::Duplicate => write!(f, "duplicate: "),
NostrReplyPrefix::Blocked => write!(f, "blocked: "),
NostrReplyPrefix::RateLimited => write!(f, "rate-limited: "),
NostrReplyPrefix::Redacted => write!(f, "redacted: "),
NostrReplyPrefix::Restricted => write!(f, "restricted: "),
NostrReplyPrefix::Invalid => write!(f, "invalid: "),
NostrReplyPrefix::Error => write!(f, "error: "),

View File

@ -5,6 +5,7 @@ use http_body_util::combinators::BoxBody;
use http_body_util::{BodyExt, Full};
use hyper::body::{Bytes, Incoming};
use hyper::{Request, Response, StatusCode};
use pocket_db::ScreenResult;
use pocket_types::{Event, Filter, Id, Kind, Pubkey};
use serde::Serialize;
use serde_json::{json, Map, Value};
@ -340,15 +341,21 @@ pub fn handle_inner(pubkey: Pubkey, command: Value) -> Result<Option<Value>, Err
let (_incount, _outcount, filter) = Filter::from_json(b"{}", &mut buffer)?;
filter
};
let screen = |e: &Event| -> bool {
!allowed_kinds.contains(&e.kind())
&& !e.kind().is_ephemeral()
&& !crate::is_authorized_user(e.pubkey())
let screen = |e: &Event| -> ScreenResult {
if allowed_kinds.contains(&e.kind()) {
ScreenResult::Mismatch
} else if e.kind().is_ephemeral() {
ScreenResult::Mismatch
} else if crate::is_authorized_user(e.pubkey()) {
ScreenResult::Mismatch
} else {
ScreenResult::Match
}
};
let mut need_moderation: Vec<EventNeedingModeration> = Vec::new();
let mut events = GLOBALS
let (mut events, _redacted) = GLOBALS
.store
.get()
.unwrap()