mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-18 12:46:56 +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
@@ -73,6 +73,8 @@ pub struct Config {
|
||||
pub settings: bool,
|
||||
/// Fichiers de la discussion tenus par la façade (`LOKI_FILES=rust`).
|
||||
pub files: Option<Arc<crate::convfiles::ConvFiles>>,
|
||||
/// Notifications Web Push tenues par la façade (`LOKI_PUSH=rust`).
|
||||
pub push: Option<Arc<crate::push::Push>>,
|
||||
}
|
||||
|
||||
struct Proxy {
|
||||
@@ -104,6 +106,7 @@ pub async fn serve(
|
||||
dictate: cfg.dictate,
|
||||
settings: cfg.settings,
|
||||
files: cfg.files,
|
||||
push: cfg.push,
|
||||
internal_token: cfg.internal_token.clone(),
|
||||
},
|
||||
});
|
||||
@@ -159,6 +162,12 @@ impl Proxy {
|
||||
{
|
||||
return chatapi::serve_internal(chat, req).await;
|
||||
}
|
||||
if from_go
|
||||
&& let Some(p) = &self.ctx.push
|
||||
&& path == crate::push::INTERNAL_SEND
|
||||
{
|
||||
return crate::push::serve_internal(self.ctx.store.clone(), p.clone(), req).await;
|
||||
}
|
||||
if from_go
|
||||
&& let Some(d) = &self.ctx.dictate
|
||||
&& path == crate::dictate::INTERNAL_STOP
|
||||
@@ -185,6 +194,11 @@ impl Proxy {
|
||||
{
|
||||
return chatapi::serve(&self.ctx, chat, req, from_go).await;
|
||||
}
|
||||
if let Some(p) = &self.ctx.push
|
||||
&& crate::push::handles(path)
|
||||
{
|
||||
return crate::push::serve(&self.ctx, p, req, from_go).await;
|
||||
}
|
||||
if let Some(f) = &self.ctx.files
|
||||
&& crate::convfiles::handles(path)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user