feat(licence): ecran d'activation au demarrage
ensureLicence() en tete d'init(), avant tout le reste : un ecran d'authentification qui s'affiche puis se fait recouvrir donnerait l'impression que le coffre etait accessible. L'ecran reprend les classes de l'ecran d'authentification — zero style nouveau hormis un z-index. Le statut est demande deux fois avant de le montrer : un demarrage a froid lent manquerait la fenetre de reponse, et le silence se lirait comme un refus. Une cle refusee ne dit pas pourquoi, et le journal note le verdict sans jamais la cle. ATTENTION : tant que LicencePublicKeyBlob est a zero, l'ecran est infranchissable. Poser la cle publique avant de deployer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -286,6 +286,36 @@ tools\licence.ps1 -For "a@b.com" -Name "Ami" # une licence
|
||||
`VerifyAgainstKey` prend la cle publique en parametre exactement pour que
|
||||
l'auto-test n'ait pas besoin d'un second jeu de constantes de production.
|
||||
|
||||
### Ecran d'activation au demarrage
|
||||
|
||||
`ensureLicence()` (js/app.js) est appele **en tete d'`init()`**, avant tout le
|
||||
reste : un ecran d'authentification qui s'affiche puis se fait recouvrir
|
||||
donnerait l'impression que le coffre etait accessible. Il ne rend la main que
|
||||
sur une licence acceptee — pas de bouton « plus tard ».
|
||||
|
||||
- Balisage `#licenceScreen` dans index.html, **place apres `#authScreen`** et
|
||||
reprenant ses classes (`.auth-screen`, `.auth-card`, `.auth-hint`,
|
||||
`.auth-form`) : zero style nouveau, sauf `#licenceScreen { z-index: 300 }`
|
||||
pour passer au-dessus du bandeau (100) et du voile d'attente (200).
|
||||
- Pont : `cmd://licence/status` et `cmd://licence/activate?key=`, reponse par
|
||||
`Bridge.onLicenceResult(ok, porteur)`. La cle est du base64url plus un point,
|
||||
donc rien a encoder de special sur le trajet.
|
||||
- **Le statut est demande deux fois** avant de montrer l'ecran : un demarrage a
|
||||
froid lent peut manquer la fenetre de 3 s, et le silence se lirait comme un
|
||||
refus — presenter l'activation a quelqu'un qui a deja paye coute plus cher
|
||||
qu'un second appel.
|
||||
- Une cle refusee ne dit **pas pourquoi** : signature invalide, recopie fautive
|
||||
et charge utile trafiquee se ressemblent, et detailler n'aiderait que celui
|
||||
qui essaie d'en fabriquer une. Le journal note le verdict, **jamais la cle**.
|
||||
- Hors du navigateur hote (`Bridge.active` faux : dev en navigateur, harnais de
|
||||
test) il n'y a pas de licence a verifier — la porte est ouverte.
|
||||
|
||||
**ORDRE OBLIGATOIRE.** Tant que `LicencePublicKeyBlob` est a zero, aucune
|
||||
licence n'est valide et l'ecran d'activation est **infranchissable** — l'exe
|
||||
construit ne s'ouvre plus. Poser la cle publique AVANT de deployer :
|
||||
`-Init` → coller les 72 octets → reconstruire → `-For` pour s'emettre une
|
||||
licence a soi.
|
||||
|
||||
**Ce que ca arrete** : sans la cle privee, personne ne fabrique de licence
|
||||
valable. **Ce que ca n'arrete pas** : rapiecer l'exe pour sauter l'appel — vrai
|
||||
de tout schema hors ligne. La seule parade reelle serait de deporter une
|
||||
|
||||
Reference in New Issue
Block a user