Compare commits

..

3 Commits

Author SHA1 Message Date
0140fa5efe chore: Release
Some checks failed
Continuous integration / Check (push) Successful in 52s
Continuous integration / Test Suite (push) Successful in 1m9s
Continuous integration / Trunk (push) Successful in 58s
Continuous integration / Rustfmt (push) Failing after 38s
Continuous integration / build (push) Successful in 1m36s
Continuous integration / Disallow unused dependencies (push) Failing after 2m16s
2025-08-21 16:47:03 -07:00
832b322b77 web: much more compact read mail headers 2025-08-21 16:45:35 -07:00
66dbcf2cfd server: style tweak for tls_report summary 2025-08-21 11:21:10 -07:00
7 changed files with 374 additions and 189 deletions

419
Cargo.lock generated
View File

@@ -70,8 +70,8 @@ version = "4.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6b346764dd0814805de8abf899fe03065bcee69bb1a4771c785817e39f3978f"
dependencies = [
"cssparser",
"html5ever",
"cssparser 0.35.0",
"html5ever 0.35.0",
"maplit",
"tendril",
"url",
@@ -351,9 +351,9 @@ dependencies = [
[[package]]
name = "async-trait"
version = "0.1.89"
version = "0.1.88"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
dependencies = [
"proc-macro2",
"quote",
@@ -756,7 +756,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b409ed3b3b89db66e81ed7df221d30a1d78c298e719472cac30b21dfdacf9ce"
dependencies = [
"chrono",
"derive_more",
"derive_more 2.0.1",
"semver 1.0.26",
"serde",
]
@@ -854,7 +854,7 @@ dependencies = [
"rusoto_s3 0.48.0",
"serde",
"sqlx",
"thiserror 2.0.16",
"thiserror 2.0.14",
"tokio 1.47.1",
"tracing",
"urlencoding",
@@ -906,7 +906,7 @@ dependencies = [
"semver 1.0.26",
"serde",
"serde_json",
"thiserror 2.0.16",
"thiserror 2.0.14",
]
[[package]]
@@ -971,12 +971,24 @@ dependencies = [
[[package]]
name = "chrono-tz"
version = "0.10.4"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6139a8597ed92cf816dfb33f5dd6cf0bb93a6adc938f11039f371bc5bcd26c3"
checksum = "d59ae0466b83e838b81a54256c39d5d7c20b9d7daa10510a242d9b75abd5936e"
dependencies = [
"chrono",
"phf 0.12.1",
"chrono-tz-build",
"phf 0.11.3",
]
[[package]]
name = "chrono-tz-build"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "433e39f13c9a060046954e0592a8d0a4bcb1040125cbf91cb8ee58964cfb350f"
dependencies = [
"parse-zoneinfo",
"phf 0.11.3",
"phf_codegen 0.11.3",
]
[[package]]
@@ -991,9 +1003,9 @@ dependencies = [
[[package]]
name = "clap"
version = "4.5.45"
version = "4.5.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fc0e74a703892159f5ae7d3aac52c8e6c392f5ae5f359c70b5881d60aaac318"
checksum = "1c1f056bae57e3e54c3375c41ff79619ddd13460a17d7438712bd0d83fda4ff8"
dependencies = [
"clap_builder",
"clap_derive",
@@ -1013,9 +1025,9 @@ dependencies = [
[[package]]
name = "clap_derive"
version = "4.5.45"
version = "4.5.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14cb31bb0a7d536caef2639baa7fad459e15c3144efefa6dbd1c84562c4739f6"
checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491"
dependencies = [
"heck 0.5.0",
"proc-macro2",
@@ -1352,8 +1364,8 @@ version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30983955a71311b6268dca9ea211b75136367ab3ed7d27d78617587d7d9beebf"
dependencies = [
"cssparser",
"html5ever",
"cssparser 0.35.0",
"html5ever 0.35.0",
"indexmap 2.10.0",
"lru 0.16.0",
"precomputed-hash",
@@ -1365,6 +1377,19 @@ dependencies = [
"url",
]
[[package]]
name = "cssparser"
version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7c66d1cd8ed61bf80b38432613a7a2f09401ab8d0501110655f8b341484a3e3"
dependencies = [
"cssparser-macros",
"dtoa-short",
"itoa 1.0.15",
"phf 0.11.3",
"smallvec 1.15.1",
]
[[package]]
name = "cssparser"
version = "0.35.0"
@@ -1537,6 +1562,17 @@ dependencies = [
"syn 2.0.104",
]
[[package]]
name = "derive_more"
version = "0.99.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
]
[[package]]
name = "derive_more"
version = "2.0.1"
@@ -1849,12 +1885,12 @@ dependencies = [
[[package]]
name = "fs4"
version = "0.13.1"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8640e34b88f7652208ce9e88b1a37a2ae95227d84abec377ccd3c5cfeb141ed4"
checksum = "f7e180ac76c23b45e767bd7ae9579bc0bb458618c4bc71835926e098e61d15f8"
dependencies = [
"rustix",
"windows-sys 0.59.0",
"rustix 0.38.44",
"windows-sys 0.52.0",
]
[[package]]
@@ -2039,7 +2075,7 @@ version = "0.2.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cba6ae63eb948698e300f645f87c70f76630d505f23b8907cf1e193ee85048c1"
dependencies = [
"unicode-width",
"unicode-width 0.2.1",
]
[[package]]
@@ -2506,14 +2542,41 @@ dependencies = [
[[package]]
name = "html2text"
version = "0.15.3"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6f46aa147cd47f2ec7e1c6b5c756f6333875816f7ac287472aec0d73688b40c"
checksum = "74cda84f06c1cc83476f79ae8e2e892b626bdadafcb227baec54c918cadc18a0"
dependencies = [
"html5ever",
"html5ever 0.26.0",
"markup5ever 0.11.0",
"tendril",
"thiserror 2.0.16",
"unicode-width",
"unicode-width 0.1.14",
"xml5ever",
]
[[package]]
name = "html5ever"
version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
dependencies = [
"log",
"mac",
"markup5ever 0.11.0",
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "html5ever"
version = "0.29.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c"
dependencies = [
"log",
"mac",
"markup5ever 0.14.1",
"match_token 0.1.0",
]
[[package]]
@@ -2523,8 +2586,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55d958c2f74b664487a2035fe1dadb032c48718a03b63f3ab0b8537db8549ed4"
dependencies = [
"log",
"markup5ever",
"match_token",
"markup5ever 0.35.0",
"match_token 0.35.0",
]
[[package]]
@@ -2844,18 +2907,18 @@ dependencies = [
[[package]]
name = "ical"
version = "0.11.0"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b7cab7543a8b7729a19e2c04309f902861293dcdae6558dfbeb634454d279f6"
checksum = "d4bad4eb99ee34e58a1e642114eded65b4ea5ea3c1584971a1afc12a3b927670"
dependencies = [
"thiserror 1.0.69",
]
[[package]]
name = "icalendar"
version = "0.17.2"
version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "557f23d5e90d205464cfc9e2f3d7c117b0c3e963830a2a623aa8d69a186041a3"
checksum = "9e69a1b52143a7fc94b55d008e8ab30506ebc93774ddb2752ee44266378fc5d6"
dependencies = [
"chrono",
"iso8601",
@@ -3182,13 +3245,13 @@ dependencies = [
"mailparse",
"serde",
"serde_json",
"thiserror 2.0.16",
"thiserror 2.0.14",
"tracing",
]
[[package]]
name = "letterbox-notmuch"
version = "0.17.36"
version = "0.17.37"
dependencies = [
"itertools",
"log",
@@ -3197,13 +3260,13 @@ dependencies = [
"rayon",
"serde",
"serde_json",
"thiserror 2.0.16",
"thiserror 2.0.14",
"tracing",
]
[[package]]
name = "letterbox-procmail2notmuch"
version = "0.17.36"
version = "0.17.37"
dependencies = [
"anyhow",
"clap",
@@ -3216,7 +3279,7 @@ dependencies = [
[[package]]
name = "letterbox-server"
version = "0.17.36"
version = "0.17.37"
dependencies = [
"ammonia",
"anyhow",
@@ -3240,8 +3303,8 @@ dependencies = [
"html2text",
"ical",
"icalendar",
"letterbox-notmuch 0.17.36",
"letterbox-shared 0.17.36",
"letterbox-notmuch 0.17.37",
"letterbox-shared 0.17.37",
"linkify",
"lol_html",
"mailparse",
@@ -3255,7 +3318,7 @@ dependencies = [
"serde_json",
"sqlx",
"tantivy",
"thiserror 2.0.16",
"thiserror 2.0.14",
"tokio 1.47.1",
"tower-http",
"tracing",
@@ -3282,10 +3345,10 @@ dependencies = [
[[package]]
name = "letterbox-shared"
version = "0.17.36"
version = "0.17.37"
dependencies = [
"build-info",
"letterbox-notmuch 0.17.36",
"letterbox-notmuch 0.17.37",
"regex",
"serde",
"sqlx",
@@ -3295,7 +3358,7 @@ dependencies = [
[[package]]
name = "letterbox-web"
version = "0.17.36"
version = "0.17.37"
dependencies = [
"build-info",
"build-info-build",
@@ -3307,14 +3370,14 @@ dependencies = [
"graphql_client",
"human_format",
"itertools",
"letterbox-shared 0.17.36",
"letterbox-shared 0.17.37",
"log",
"seed",
"seed_hooks",
"serde",
"serde_json",
"strum_macros 0.27.2",
"thiserror 2.0.16",
"thiserror 2.0.14",
"uuid",
"wasm-bindgen",
"wasm-bindgen-test",
@@ -3428,6 +3491,12 @@ dependencies = [
"memchr",
]
[[package]]
name = "linux-raw-sys"
version = "0.4.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
[[package]]
name = "linux-raw-sys"
version = "0.9.4"
@@ -3473,14 +3542,14 @@ checksum = "b63d49c99bfbf3400dd6450e516515b7014fcb49b5cb533f4b725a00c1462a36"
dependencies = [
"bitflags 2.9.1",
"cfg-if 1.0.1",
"cssparser",
"cssparser 0.35.0",
"encoding_rs",
"hashbrown 0.15.5",
"memchr",
"mime",
"precomputed-hash",
"selectors 0.30.0",
"thiserror 2.0.16",
"thiserror 2.0.14",
]
[[package]]
@@ -3536,6 +3605,34 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
[[package]]
name = "markup5ever"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
dependencies = [
"log",
"phf 0.10.1",
"phf_codegen 0.10.0",
"string_cache",
"string_cache_codegen",
"tendril",
]
[[package]]
name = "markup5ever"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18"
dependencies = [
"log",
"phf 0.11.3",
"phf_codegen 0.11.3",
"string_cache",
"string_cache_codegen",
"tendril",
]
[[package]]
name = "markup5ever"
version = "0.35.0"
@@ -3547,6 +3644,17 @@ dependencies = [
"web_atoms",
]
[[package]]
name = "match_token"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.104",
]
[[package]]
name = "match_token"
version = "0.35.0"
@@ -4052,7 +4160,7 @@ dependencies = [
"futures-sink",
"js-sys",
"pin-project-lite",
"thiserror 2.0.16",
"thiserror 2.0.14",
"tracing",
]
@@ -4084,7 +4192,7 @@ dependencies = [
"opentelemetry_sdk",
"prost",
"reqwest",
"thiserror 2.0.16",
"thiserror 2.0.14",
"tokio 1.47.1",
"tonic",
"tracing",
@@ -4116,7 +4224,7 @@ dependencies = [
"percent-encoding",
"rand 0.9.2",
"serde_json",
"thiserror 2.0.16",
"thiserror 2.0.14",
"tokio 1.47.1",
"tokio-stream",
"tracing",
@@ -4235,6 +4343,15 @@ dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "parse-zoneinfo"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24"
dependencies = [
"regex",
]
[[package]]
name = "paste"
version = "1.0.15"
@@ -4273,7 +4390,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1db05f56d34358a8b1066f67cbb203ee3e7ed2ba674a6263a1d5ec6db2204323"
dependencies = [
"memchr",
"thiserror 2.0.16",
"thiserror 2.0.14",
"ucd-trie",
]
@@ -4310,6 +4427,15 @@ dependencies = [
"sha2 0.10.9",
]
[[package]]
name = "phf"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
dependencies = [
"phf_shared 0.10.0",
]
[[package]]
name = "phf"
version = "0.11.3"
@@ -4321,12 +4447,13 @@ dependencies = [
]
[[package]]
name = "phf"
version = "0.12.1"
name = "phf_codegen"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "913273894cec178f401a31ec4b656318d95473527be05c0752cc41cdc32be8b7"
checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
dependencies = [
"phf_shared 0.12.1",
"phf_generator 0.10.0",
"phf_shared 0.10.0",
]
[[package]]
@@ -4335,10 +4462,20 @@ version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a"
dependencies = [
"phf_generator",
"phf_generator 0.11.3",
"phf_shared 0.11.3",
]
[[package]]
name = "phf_generator"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
dependencies = [
"phf_shared 0.10.0",
"rand 0.8.5",
]
[[package]]
name = "phf_generator"
version = "0.11.3"
@@ -4355,7 +4492,7 @@ version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216"
dependencies = [
"phf_generator",
"phf_generator 0.11.3",
"phf_shared 0.11.3",
"proc-macro2",
"quote",
@@ -4364,20 +4501,20 @@ dependencies = [
[[package]]
name = "phf_shared"
version = "0.11.3"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
dependencies = [
"siphasher",
"siphasher 0.3.11",
]
[[package]]
name = "phf_shared"
version = "0.12.1"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06005508882fb681fd97892ecff4b7fd0fee13ef1aa569f8695dae7ab9099981"
checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
dependencies = [
"siphasher",
"siphasher 1.0.1",
]
[[package]]
@@ -4593,9 +4730,9 @@ dependencies = [
[[package]]
name = "quick-xml"
version = "0.38.2"
version = "0.38.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d200a41a7797e6461bd04e4e95c3347053a731c32c87f066f2f0dda22dbdbba8"
checksum = "9845d9dccf565065824e69f9f235fafba1587031eda353c1f1561cd6a6be78f4"
dependencies = [
"memchr",
"serde",
@@ -4615,7 +4752,7 @@ dependencies = [
"rustc-hash",
"rustls",
"socket2 0.5.10",
"thiserror 2.0.16",
"thiserror 2.0.14",
"tokio 1.47.1",
"tracing",
"web-time",
@@ -4636,7 +4773,7 @@ dependencies = [
"rustls",
"rustls-pki-types",
"slab",
"thiserror 2.0.16",
"thiserror 2.0.14",
"tinyvec",
"tracing",
"web-time",
@@ -4759,9 +4896,9 @@ dependencies = [
[[package]]
name = "rayon"
version = "1.11.0"
version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
dependencies = [
"either",
"rayon-core",
@@ -4769,9 +4906,9 @@ dependencies = [
[[package]]
name = "rayon-core"
version = "1.13.0"
version = "1.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
dependencies = [
"crossbeam-deque 0.8.6",
"crossbeam-utils 0.8.21",
@@ -4887,9 +5024,9 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "reqwest"
version = "0.12.23"
version = "0.12.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb"
checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531"
dependencies = [
"base64 0.22.1",
"bytes 1.10.1",
@@ -5181,6 +5318,19 @@ dependencies = [
"semver 1.0.26",
]
[[package]]
name = "rustix"
version = "0.38.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
dependencies = [
"bitflags 2.9.1",
"errno",
"libc",
"linux-raw-sys 0.4.15",
"windows-sys 0.59.0",
]
[[package]]
name = "rustix"
version = "1.0.8"
@@ -5190,7 +5340,7 @@ dependencies = [
"bitflags 2.9.1",
"errno",
"libc",
"linux-raw-sys",
"linux-raw-sys 0.9.4",
"windows-sys 0.60.2",
]
@@ -5298,16 +5448,16 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "scraper"
version = "0.24.0"
version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5f3a24d916e78954af99281a455168d4a9515d65eca99a18da1b813689c4ad9"
checksum = "527e65d9d888567588db4c12da1087598d0f6f8b346cc2c5abc91f05fc2dffe2"
dependencies = [
"cssparser",
"cssparser 0.34.0",
"ego-tree",
"getopts",
"html5ever",
"html5ever 0.29.1",
"precomputed-hash",
"selectors 0.31.0",
"selectors 0.26.0",
"tendril",
]
@@ -5386,18 +5536,18 @@ dependencies = [
[[package]]
name = "selectors"
version = "0.30.0"
version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3df44ba8a7ca7a4d28c589e04f526266ed76b6cc556e33fe69fa25de31939a65"
checksum = "fd568a4c9bb598e291a08244a5c1f5a8a6650bee243b5b0f8dbb3d9cc1d87fe8"
dependencies = [
"bitflags 2.9.1",
"cssparser",
"derive_more",
"cssparser 0.34.0",
"derive_more 0.99.20",
"fxhash",
"log",
"new_debug_unreachable",
"phf 0.11.3",
"phf_codegen",
"phf_codegen 0.11.3",
"precomputed-hash",
"servo_arc",
"smallvec 1.15.1",
@@ -5405,18 +5555,18 @@ dependencies = [
[[package]]
name = "selectors"
version = "0.31.0"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5685b6ae43bfcf7d2e7dfcfb5d8e8f61b46442c902531e41a32a9a8bf0ee0fb6"
checksum = "3df44ba8a7ca7a4d28c589e04f526266ed76b6cc556e33fe69fa25de31939a65"
dependencies = [
"bitflags 2.9.1",
"cssparser",
"derive_more",
"cssparser 0.35.0",
"derive_more 2.0.1",
"fxhash",
"log",
"new_debug_unreachable",
"phf 0.11.3",
"phf_codegen",
"phf_codegen 0.11.3",
"precomputed-hash",
"servo_arc",
"smallvec 1.15.1",
@@ -5500,9 +5650,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.143"
version = "1.0.142"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a"
checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7"
dependencies = [
"itoa 1.0.15",
"memchr",
@@ -5649,6 +5799,12 @@ version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
[[package]]
name = "siphasher"
version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
[[package]]
name = "siphasher"
version = "1.0.1"
@@ -5776,7 +5932,7 @@ dependencies = [
"serde_json",
"sha2 0.10.9",
"smallvec 1.15.1",
"thiserror 2.0.16",
"thiserror 2.0.14",
"time 0.3.41",
"tokio 1.47.1",
"tokio-stream",
@@ -5859,7 +6015,7 @@ dependencies = [
"smallvec 1.15.1",
"sqlx-core",
"stringprep",
"thiserror 2.0.16",
"thiserror 2.0.14",
"time 0.3.41",
"tracing",
"whoami",
@@ -5897,7 +6053,7 @@ dependencies = [
"smallvec 1.15.1",
"sqlx-core",
"stringprep",
"thiserror 2.0.16",
"thiserror 2.0.14",
"time 0.3.41",
"tracing",
"whoami",
@@ -5922,7 +6078,7 @@ dependencies = [
"serde",
"serde_urlencoded",
"sqlx-core",
"thiserror 2.0.16",
"thiserror 2.0.14",
"time 0.3.41",
"tracing",
"url",
@@ -5968,7 +6124,7 @@ version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0"
dependencies = [
"phf_generator",
"phf_generator 0.11.3",
"phf_shared 0.11.3",
"proc-macro2",
"quote",
@@ -6108,9 +6264,9 @@ dependencies = [
[[package]]
name = "tantivy"
version = "0.25.0"
version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "502915c7381c5cb2d2781503962610cb880ad8f1a0ca95df1bae645d5ebf2545"
checksum = "64a966cb0e76e311f09cf18507c9af192f15d34886ee43d7ba7c7e3803660c43"
dependencies = [
"aho-corasick",
"arc-swap",
@@ -6152,7 +6308,7 @@ dependencies = [
"tantivy-stacker",
"tantivy-tokenizer-api",
"tempfile",
"thiserror 2.0.16",
"thiserror 2.0.14",
"time 0.3.41",
"uuid",
"winapi 0.3.9",
@@ -6160,18 +6316,18 @@ dependencies = [
[[package]]
name = "tantivy-bitpacker"
version = "0.9.0"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3b04eed5108d8283607da6710fe17a7663523440eaf7ea5a1a440d19a1448b6"
checksum = "1adc286a39e089ae9938935cd488d7d34f14502544a36607effd2239ff0e2494"
dependencies = [
"bitpacking",
]
[[package]]
name = "tantivy-columnar"
version = "0.6.0"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b628488ae936c83e92b5c4056833054ca56f76c0e616aee8339e24ac89119cd"
checksum = "6300428e0c104c4f7db6f95b466a6f5c1b9aece094ec57cdd365337908dc7344"
dependencies = [
"downcast-rs 2.0.1",
"fastdivide",
@@ -6185,9 +6341,9 @@ dependencies = [
[[package]]
name = "tantivy-common"
version = "0.10.0"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f880aa7cab0c063a47b62596d10991cdd0b6e0e0575d9c5eeb298b307a25de55"
checksum = "e91b6ea6090ce03dc72c27d0619e77185d26cc3b20775966c346c6d4f7e99d7f"
dependencies = [
"async-trait",
"byteorder",
@@ -6209,9 +6365,9 @@ dependencies = [
[[package]]
name = "tantivy-query-grammar"
version = "0.25.0"
version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "768fccdc84d60d86235d42d7e4c33acf43c418258ff5952abf07bd7837fcd26b"
checksum = "e810cdeeebca57fc3f7bfec5f85fdbea9031b2ac9b990eb5ff49b371d52bbe6a"
dependencies = [
"nom 7.1.3",
"serde",
@@ -6220,9 +6376,9 @@ dependencies = [
[[package]]
name = "tantivy-sstable"
version = "0.6.0"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8292095d1a8a2c2b36380ec455f910ab52dde516af36321af332c93f20ab7d5"
checksum = "709f22c08a4c90e1b36711c1c6cad5ae21b20b093e535b69b18783dd2cb99416"
dependencies = [
"futures-util",
"itertools",
@@ -6234,9 +6390,9 @@ dependencies = [
[[package]]
name = "tantivy-stacker"
version = "0.6.0"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23d38a379411169f0b3002c9cba61cdfe315f757e9d4f239c00c282497a0749d"
checksum = "2bcdebb267671311d1e8891fd9d1301803fdb8ad21ba22e0a30d0cab49ba59c1"
dependencies = [
"murmurhash32",
"rand_distr",
@@ -6245,9 +6401,9 @@ dependencies = [
[[package]]
name = "tantivy-tokenizer-api"
version = "0.6.0"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23024f6aeb25ceb1a0e27740c84bdb0fae52626737b7e9a9de6ad5aa25c7b038"
checksum = "dfa942fcee81e213e09715bbce8734ae2180070b97b33839a795ba1de201547d"
dependencies = [
"serde",
]
@@ -6261,7 +6417,7 @@ dependencies = [
"fastrand",
"getrandom 0.3.3",
"once_cell",
"rustix",
"rustix 1.0.8",
"windows-sys 0.59.0",
]
@@ -6287,11 +6443,11 @@ dependencies = [
[[package]]
name = "thiserror"
version = "2.0.16"
version = "2.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0"
checksum = "0b0949c3a6c842cbde3f1686d6eea5a010516deb7085f79db747562d4102f41e"
dependencies = [
"thiserror-impl 2.0.16",
"thiserror-impl 2.0.14",
]
[[package]]
@@ -6307,9 +6463,9 @@ dependencies = [
[[package]]
name = "thiserror-impl"
version = "2.0.16"
version = "2.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960"
checksum = "cc5b44b4ab9c2fdd0e0512e6bece8388e214c0749f5862b114cc5b7a25daf227"
dependencies = [
"proc-macro2",
"quote",
@@ -6984,7 +7140,7 @@ dependencies = [
"log",
"rand 0.9.2",
"sha1",
"thiserror 2.0.16",
"thiserror 2.0.14",
"utf-8",
]
@@ -7039,6 +7195,12 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"
[[package]]
name = "unicode-width"
version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
[[package]]
name = "unicode-width"
version = "0.2.1"
@@ -7344,7 +7506,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57ffde1dc01240bdf9992e3205668b235e59421fd085e8a317ed98da0178d414"
dependencies = [
"phf 0.11.3",
"phf_codegen",
"phf_codegen 0.11.3",
"string_cache",
"string_cache_codegen",
]
@@ -7403,7 +7565,7 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
"windows-sys 0.48.0",
"windows-sys 0.59.0",
]
[[package]]
@@ -7744,6 +7906,17 @@ version = "0.8.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7"
[[package]]
name = "xml5ever"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4034e1d05af98b51ad7214527730626f019682d797ba38b51689212118d8e650"
dependencies = [
"log",
"mac",
"markup5ever 0.11.0",
]
[[package]]
name = "xtracing"
version = "0.3.2"
@@ -7758,7 +7931,7 @@ dependencies = [
"opentelemetry",
"opentelemetry-otlp",
"opentelemetry_sdk",
"thiserror 2.0.16",
"thiserror 2.0.14",
"tokio 1.47.1",
"tracing",
"tracing-appender",

View File

@@ -8,7 +8,7 @@ authors = ["Bill Thiede <git@xinu.tv>"]
edition = "2021"
license = "UNLICENSED"
publish = ["xinu"]
version = "0.17.36"
version = "0.17.37"
repository = "https://git.z.xinu.tv/wathiede/letterbox"
[profile.dev]

View File

@@ -12,8 +12,8 @@ version.workspace = true
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
chrono-tz = "0.10"
html2text = "0.15"
chrono-tz = "0.8"
html2text = "0.6"
ammonia = "4.1.0"
anyhow = "1.0.98"
askama = { version = "0.14.0", features = ["derive"] }
@@ -32,9 +32,9 @@ futures = "0.3.31"
headers = "0.4.0"
html-escape = "0.2.13"
icalendar = "0.17.1"
ical = "0.11"
letterbox-notmuch = { path = "../notmuch", version = "0.17.36", registry = "xinu" }
letterbox-shared = { path = "../shared", version = "0.17.36", registry = "xinu" }
ical = "0.10"
letterbox-notmuch = { path = "../notmuch", version = "0.17.37", registry = "xinu" }
letterbox-shared = { path = "../shared", version = "0.17.37", registry = "xinu" }
linkify = "0.10.0"
lol_html = "2.3.0"
mailparse = "0.16.1"
@@ -43,11 +43,11 @@ memmap = "0.7.0"
quick-xml = { version = "0.38.1", features = ["serialize"] }
regex = "1.11.1"
reqwest = { version = "0.12.15", features = ["blocking"] }
scraper = "0.24.0"
scraper = "0.23.1"
serde = { version = "1.0.219", features = ["derive"] }
serde_json = "1.0.140"
sqlx = { version = "0.8.5", features = ["postgres", "runtime-tokio", "time"] }
tantivy = { version = "0.25.0", optional = true }
tantivy = { version = "0.24.1", optional = true }
thiserror = "2.0.12"
tokio = "1.44.2"
tower-http = { version = "0.6.2", features = ["trace"] }

View File

@@ -1,8 +1,10 @@
<!DOCTYPE html>
<html>
<head>
<title>TLS Report</title>
</head>
<body>
<h3>TLS Report Summary:</h3>
<p>Organization: {{ report.organization_name }}</p>
@@ -10,34 +12,37 @@
<p>Contact: {{ report.contact_info }}</p>
<p>Report ID: {{ report.report_id }}</p>
<h4>Policies:</h4>
<h4><b>Policies:</b></h4>
{% for policy in report.policies %}
<h5>Policy Domain: {{ policy.policy.policy_domain }}</h5>
<ul>
<li>Policy Type: {{ policy.policy.policy_type }}</li>
<li>Policy String: {{ policy.policy.policy_string | join(", ") }}</li>
<li>Successful Sessions: {{ policy.summary.total_successful_session_count }}</li>
<li>Failed Sessions: {{ policy.summary.total_failure_session_count }}</li>
</ul>
<h5><b>Policy Domain:</b> {{ policy.policy.policy_domain }}</h5>
<ul>
<li><b>Policy Type:</b> {{ policy.policy.policy_type }}</li>
<li><b>Policy String:</b> {{ policy.policy.policy_string | join(", ") }}</li>
<li><b>Successful Sessions:</b> {{ policy.summary.total_successful_session_count }}</li>
<li><b>Failed Sessions:</b> {{ policy.summary.total_failure_session_count }}</li>
</ul>
<ul>
{% for mx_host in policy.policy.mx_host %}
<li>Hostname: {{ mx_host.hostname }}, Failures: {{ mx_host.failure_count }}, Result: {{ mx_host.result_type }}</li>
{% endfor %}
</ul>
<ul>
{% for mx_host in policy.policy.mx_host %}
<li><b>Hostname:</b> {{ mx_host.hostname }}, <b>Failures:</b> {{ mx_host.failure_count }}, <b>Result:</b> {{
mx_host.result_type }}</li>
{% endfor %}
</ul>
<ul>
{% for detail in policy.failure_details %}
<li>Result: {{ detail.result_type }}, Sending IP: {{ detail.sending_mta_ip }}, Failed Sessions: {{ detail.failed_session_count }}
{% if detail.failure_reason_code != "" %}
(Reason: {{ detail.failure_reason_code }})
{% endif %}
</li>
(Receiving IP: {{ detail.receiving_ip }})
(Receiving MX: {{ detail.receiving_mx_hostname }})
(Additional Info: {{ detail.additional_info }})
{% endfor %}
</ul>
<ul>
{% for detail in policy.failure_details %}
<li><b>Result:</b> {{ detail.result_type }}, <b>Sending IP:</b> {{ detail.sending_mta_ip }}, <b>Failed
Sessions:</b> {{ detail.failed_session_count }}
{% if detail.failure_reason_code != "" %}
(<b>Reason:</b> {{ detail.failure_reason_code }})
{% endif %}
</li>
(<b>Receiving IP:</b> {{ detail.receiving_ip }})
(<b>Receiving MX:</b> {{ detail.receiving_mx_hostname }})
(<b>Additional Info:</b> {{ detail.additional_info }})
{% endfor %}
</ul>
{% endfor %}
</body>
</html>

View File

@@ -12,7 +12,7 @@ version.workspace = true
[dependencies]
build-info = "0.0.41"
letterbox-notmuch = { path = "../notmuch", version = "0.17.36", registry = "xinu" }
letterbox-notmuch = { path = "../notmuch", version = "0.17.37", registry = "xinu" }
regex = "1.11.1"
serde = { version = "1.0.219", features = ["derive"] }
sqlx = "0.8.5"

View File

@@ -33,7 +33,7 @@ wasm-bindgen = "=0.2.100"
uuid = { version = "1.16.0", features = [
"js",
] } # direct dep to set js feature, prevents Rng issues
letterbox-shared = { path = "../shared/", version = "0.17.36", registry = "xinu" }
letterbox-shared = { path = "../shared/", version = "0.17.37", registry = "xinu" }
seed_hooks = { version = "0.4.1", registry = "xinu" }
strum_macros = "0.27.1"
gloo-console = "0.3.0"

View File

@@ -901,13 +901,22 @@ fn render_closed_header(msg: &ShowThreadQueryThreadOnEmailThreadMessages) -> Nod
.collect();
let show_x_original_to = !*to_xinu.borrow() && msg.x_original_to.is_some();
let show_delivered_to = !*to_xinu.borrow() && !show_x_original_to && msg.delivered_to.is_some();
let common_style = C!["text-sm", "pr-2", "text-gray-500"];
div![
C!["flex", "p-4", "bg-neutral-800"],
div![avatar],
C!["flex", "bg-neutral-800"],
div![C!["self-center"], avatar],
div![
C!["px-4", "mr-auto"],
span![
C!["font-semibold", "text-sm"],
C![
"mx-2",
"flex-1",
"flex",
"flex-nowrap",
"items-center",
"truncate",
],
div![
C!["font-semibold", "text-white"],
&common_style,
from_detail.as_ref().map(|addr| attrs! {
At::Title => addr
}),
@@ -915,7 +924,7 @@ fn render_closed_header(msg: &ShowThreadQueryThreadOnEmailThreadMessages) -> Nod
],
" ",
IF!(!msg.to.is_empty() => div![
C!["text-xs"],
&common_style,
span![
C!["font-semibold"],
"To: "
@@ -926,7 +935,7 @@ fn render_closed_header(msg: &ShowThreadQueryThreadOnEmailThreadMessages) -> Nod
" "
]),
IF!(!msg.cc.is_empty() => div![
C!["text-xs", "max-w-full", "overflow-clip", "text-ellipsis"],
&common_style,
span![
C!["font-semibold"],
"CC: "
@@ -934,7 +943,7 @@ fn render_closed_header(msg: &ShowThreadQueryThreadOnEmailThreadMessages) -> Nod
cc_addrs
]),
IF!(show_x_original_to => div![
C!["text-xs"],
&common_style,
span![
C!["font-semibold"],
"Original To: "
@@ -953,7 +962,7 @@ fn render_closed_header(msg: &ShowThreadQueryThreadOnEmailThreadMessages) -> Nod
]
]),
IF!(show_delivered_to => div![
C!["text-xs"],
&common_style,
span![
C!["font-semibold"],
"Delivered To: "
@@ -972,27 +981,25 @@ fn render_closed_header(msg: &ShowThreadQueryThreadOnEmailThreadMessages) -> Nod
]
]),
],
span![
C!["text-right"],
msg.timestamp
.map(|ts| div![C!["text-xs", "text-nowrap"], human_age(ts)]),
div![
C!["p-2"],
i![C![
"mx-4",
"read-status",
"far",
if is_unread {
"fa-envelope"
} else {
"fa-envelope-open"
},
]],
ev(Ev::Click, move |e| {
e.stop_propagation();
Msg::SetUnread(id, !is_unread)
})
],
msg.timestamp.map(|ts| div![
C!["text-xs", "text-nowrap", "justify-self-end", "self-center"],
human_age(ts)
]),
div![
i![C![
"m-2",
"read-status",
"far",
if is_unread {
"fa-envelope"
} else {
"fa-envelope-open"
},
]],
ev(Ev::Click, move |e| {
e.stop_propagation();
Msg::SetUnread(id, !is_unread)
})
]
]
}
@@ -1007,7 +1014,7 @@ fn message_render(msg: &ShowThreadQueryThreadOnEmailThreadMessages, open: bool)
};
let from = from.map(|f| f.replace('.', "-").replace('@', "-"));
div![
C!["lg:mb-4"],
C!["pb-1"],
div![
if open {
render_open_header(&msg)