mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-21 14:08:11 +02:00
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
This commit is contained in:
20 files changed
+1320
-5
No files matched your search
@@ -130,6 +130,9 @@ fn serve() -> ExitCode {
|
||||
// LOKI_FILES=rust : les fichiers de la discussion (dépôt, panneau
|
||||
// Fichiers, archive, téléchargement, images).
|
||||
let files_rust = held_by_facade("LOKI_FILES");
|
||||
// LOKI_PUSH=rust : les notifications Web Push (le Go lui délègue ses
|
||||
// envois de fin de tour et de fin de tâche).
|
||||
let push_rust = held_by_facade("LOKI_PUSH");
|
||||
let mut env = vec![(auth::INTERNAL_ENV.to_string(), token.clone())];
|
||||
if chat_rust {
|
||||
env.push(("LOKI_CHAT".into(), "rust".into()));
|
||||
@@ -146,7 +149,10 @@ fn serve() -> ExitCode {
|
||||
if files_rust {
|
||||
env.push(("LOKI_FILES".into(), "rust".into()));
|
||||
}
|
||||
if chat_rust || models_rust || dictate_rust || settings_rust || files_rust {
|
||||
if push_rust {
|
||||
env.push(("LOKI_PUSH".into(), "rust".into()));
|
||||
}
|
||||
if chat_rust || models_rust || dictate_rust || settings_rust || files_rust || push_rust {
|
||||
env.push(("LOKI_FACADE_ADDR".into(), format!("127.0.0.1:{web_port}")));
|
||||
}
|
||||
let sup = child::Supervisor::spawn(go_bin, go_port, env);
|
||||
@@ -216,6 +222,7 @@ fn serve() -> ExitCode {
|
||||
dictate,
|
||||
settings: settings_rust,
|
||||
files,
|
||||
push: push_rust.then(|| std::sync::Arc::new(loki_rs::push::Push::new())),
|
||||
};
|
||||
let res = proxy::serve(listener, cfg, shutdown_signal()).await;
|
||||
eprintln!("[loki-rs] arrêt demandé — arrêt du serveur Go");
|
||||
|
||||
Reference in new issue
Block a user