Files
Loki/rust/loki-rs/Cargo.toml
T
Claude eddcf97e3b Lot 12 : notifications Web Push tenues par la façade (LOKI_PUSH=rust)
La façade sert la clé VAPID et les (dés)abonnements, et pousse elle-même
les notifications « réponse prête » quand LOKI_PUSH=rust (expérimental ;
le Go reste le défaut) : chiffrement RFC 8291 (aes128gcm, enregistrement
complété à 4096 octets comme webpush-go), signature VAPID RFC 8292 (JWT
ES256), abonnements purgés sur 404/410, par ring déjà présent via rustls.
Mêmes clés en base que le Go.

Côté Go : facade_push.go remet les routes du tunnel à la façade, et
sendPushToAll (fin de tour, fin de tâche) lui délègue l'envoi.

Parité : parity_push_test.go tire du Go les durées et onze appels de route
avec la liste des abonnements en base, rejoués par tests/push.rs ; le
chiffrement reproduit l'exemple de la RFC 8291 à l'octet près, et un envoi
de bout en bout est déchiffré côté navigateur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
2026-10-15 17:01:07 +00:00

45 lines
1.6 KiB
TOML

[package]
name = "loki-rs"
version = "0.1.0"
edition = "2024"
[dependencies]
base64 = "0.23.1"
bytes = "1.12.1"
bzip2 = "0.6.1"
flate2 = "1.1.10"
futures-util = "0.3.34"
getrandom = "0.4.3"
hex = "0.4.3"
http-body-util = "0.1.5"
image = { version = "0.25.10", default-features = false, features = ["jpeg", "png", "gif"] }
hyper = { version = "1.12.0", features = ["http1", "server", "client"] }
hyper-util = { version = "0.1.21", features = ["tokio", "server", "client-legacy", "http1"] }
regex = "1.13.1"
url = "2.5.8"
zip = { version = "2.4.2", default-features = false, features = ["deflate-flate2", "flate2"] }
ring = { version = "0.17.14", optional = true }
reqwest = { version = "0.13.5", default-features = false, features = ["rustls-no-provider", "stream", "http2"] }
rustls = { version = "0.23.46", default-features = false, features = ["ring", "std", "tls12"], optional = true }
serde = { version = "1.0.229", features = ["derive"] }
serde_json = { version = "1.0.154", features = ["raw_value"] }
sha1 = "0.11.0"
sha2 = "0.11.1"
tar = { version = "0.4.46", default-features = false }
tokio = { version = "1.53.2", features = ["rt-multi-thread", "macros", "net", "io-util", "time", "signal", "process", "sync", "fs"] }
tokio-tungstenite = "0.30.0"
[features]
# Crypto TLS (ring) pour les API externes en HTTPS. Activée par défaut ; le
# contrôle croisé Linux sous Windows s'en passe (pas d'en-têtes libc Linux).
default = ["tls"]
tls = ["dep:rustls", "dep:ring"]
[target.'cfg(unix)'.dependencies]
libc = "0.2"
[dev-dependencies]
tokio = { version = "1.53.2", features = ["test-util"] }
futures-util = "0.3.34"
tempfile = "3.27.0"