@mostajs/backup-ui-html
v0.1.0
Published
IHM zéro-dépendance de @mostajs/backup : liste des sauvegardes, intégrité ET authenticité en verdicts distincts, test de restauration avec recomptage, restauration en simulation par défaut. Rendu pur (état → HTML) — l'hôte exécute.
Maintainers
Readme
@mostajs/backup-ui-html
Auteur : Dr Hamid MADANI [email protected] · Licence : AGPL-3.0-or-later Niveau : N2 · Zéro dépendance runtime
IHM de @mostajs/backup. Rendu pur (état → HTML) : elle ne sauvegarde
rien, ne restaure rien, n'ouvre aucune base et ne détient aucune clé. L'hôte exécute.
Ce que l'IHM rend évident
Une IHM de sauvegarde n'est pas un tableau de fichiers. Trois choses doivent sauter aux yeux, parce que ce sont les trois façons de perdre les données d'un client :
1. Une sauvegarde jamais restaurée n'est pas une sauvegarde. Une archive « présente » n'est pas une archive « restaurable ». Tant que le test de restauration n'a pas tourné, elle s'affiche NON TESTÉE — jamais verte. C'est la panne la plus banale du métier, et elle vient toujours d'un voyant vert accordé trop tôt.
2. Intégrité ≠ authenticité. Deux colonnes distinctes, jamais fondues. L'empreinte dit « pas corrompue » ; la signature dit « produite par nous ». Un attaquant qui modifie un fichier et recalcule son empreinte passe l'intégrité — seule la signature le trahit. Et une archive valide signée par un tiers est le piège le plus subtil : tout est cryptographiquement correct, mais ce n'est pas la vôtre.
3. Une restauration est destructrice. Simulation par défaut, confirmation explicite, et le bouton change de couleur quand il devient dangereux. Le rapport confronte annoncé et relu en base : une restauration qu'on ne recompte pas n'est pas vérifiée.
Garde-fous
- Aucune clé privée n'est jamais rendue ni renvoyée au navigateur (les publiques sont masquées).
- Une archive scellée l'affiche : l'hébergeur voit qu'il ne peut pas l'ouvrir.
- L'IHM réclame une clé de secours — une clé perdue rend l'archive irrécupérable.
- Le module ne persiste rien.
Demo-app
npm run example # http://localhost:8790Ce n'est pas une maquette : le serveur peuple une vraie base sqljs, la sauvegarde (signée + scellée pour le client), la vérifie, la restaure dans une base jetable et recompte, puis la restaure pour de vrai. C'est à la fois la démo et le modèle à recopier.
Tests
npm test # 19 tests de rendu (mjs-unit)
node test-scripts/e2e-demo.mjs # E2E : la demo-app sauvegarde et restaure VRAIMENTLes tests vérifient ce que l'IHM refuse d'afficher en vert — et l'E2E prouve qu'elle ne passe au vert qu'après le test de restauration.
