+33
−1
apps/api/src/adaptateurs/poussee.ts
0 → 100644
+141
−0
+79
−0
+10
−0
Loading
Le volet mobile met la notification avant tout le reste, et le serveur avant l'application : c'est ce qui est livré ici. Aucune ligne d'application mobile. Choisir son instance, d'abord Remarque juste : Kastell est libre et auto-hébergeable, une application liée à un serveur choisi par nous ferait de l'auto-hébergeur un utilisateur de seconde zone. Le cahier des charges gagne une section entière — la 4 — et douze exigences, EM-75 à EM-86. Cela ne se règle pas dans un écran de paramètres. Le choix déplace la question de confiance, et casse l'hypothèse implicite de la notification : quel serveur a le droit de faire sonner ce téléphone ? Les serveurs d'Apple n'acceptent que des messages signés par la clé de l'éditeur de l'application. Une instance auto-hébergée ne peut donc pas, seule, faire sonner une application publiée par quelqu'un d'autre — contrainte de plateforme, aucune ruse n'en sort. D'où le relais : facultatif, désigné par l'instance, refusable appareil par appareil, et acceptable seulement parce qu'il ne transporte rien de plus que le heurtoir. Sans relais, l'instance reste entière. Elle ne réveille personne, et le dit — à la sonde d'état, à la page Sécurité, et à l'application avant tout enrôlement. Le SMS et l'appel vocal restent les canaux de premier rang, ce qui rend cette situation vivable plutôt que bancale. La règle du heurtoir portée par le type, pas par la discipline « Heurtoir » ne prend ni texte, ni nom d'organisation, ni intitulé de crise : il n'existe aucun champ où les mettre. Un contrôle sérialise ce qui part et vérifie que ni l'organisation, ni la personne, ni son adresse n'y figurent. Un téléphone ne s'enrôle pas tout seul Le code naît d'une session web munie d'un second facteur récent — autoriser un appareil est du même ordre qu'un acte d'administration, et une session ouverte le matin ne vaut pas consentement le soir. Dix minutes, un seul usage, alphabet sans O ni 0 ni I ni 1, et il porte l'adresse de l'instance : le téléphone n'a rien à retaper, ce qui est aussi le meilleur garde-fou contre l'instance imitée. L'appareil reçoit une identité distincte du compte. On le révoque seul, la session web n'est pas affectée, son jeton est effacé, et il est refusé dès la requête suivante avec un message qui dit quoi faire. Ce qui coupe le canal, éprouvé cas par cas Notification refusée, relais refusé, jeton mort, appareil révoqué, relais absent : cinq façons de ne pas sonner, cinq contrôles. Un jeton mort est consigné comme échec, pas avalé en silence — c'est le genre de chose qu'on découvre la seule nuit où cela compte. Deux corrections de mes propres tests Le code TOTP de l'activation ne se rejoue pas pour la connexion : c'est la protection anti-rejeu qui parle, et le produit a raison. Et « digest() » n'existe pas sans pgcrypto — l'empreinte se calcule là où elle se calcule déjà, en JavaScript. 486 → 517 garanties. Éprouvé dans le navigateur : la page Sécurité annonce que cette instance ne fera sonner aucun téléphone, et refuse d'autoriser un appareil à un compte sans second facteur. Reste l'application elle-même — M1. Elle demande une chaîne de construction native que je ne peux pas éprouver ici, et je préfère ne pas livrer d'écran mobile que je n'aurais pas vu tourner. Signed-off-by:Kourser <contact@kourser.bzh> Co-Authored-By:
Claude Opus 5 <noreply@anthropic.com>