mirror of
https://github.com/mikedilger/chorus.git
synced 2026-05-03 06:51:42 +00:00
Compare commits
6 Commits
1e2ca3f8c8
...
db8b29dfc4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db8b29dfc4 | ||
|
|
dccf8afcf5 | ||
|
|
1568a63110 | ||
|
|
8743bd33df | ||
|
|
9ca0f5b45c | ||
|
|
26d1f0505e |
151
Cargo.lock
generated
151
Cargo.lock
generated
@ -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"
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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())?;
|
||||
}
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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));
|
||||
|
||||
26
src/lib.rs
26
src/lib.rs
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
62
src/nostr.rs
62
src/nostr.rs
@ -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 {
|
||||
|
||||
@ -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: "),
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user