docs(roadmap): #64 #65 #66 marqués FAIT
CI / lint (push) Failing after 17s
CI / test (push) Skipped
CI / build (push) Skipped
CI / e2e (push) Skipped
CI / security (push) Successful in 20s

This commit is contained in:
2026-09-06 18:43:57 -04:00
parent 83063d3a18
commit 6292bfd9cb
+18 -18
View File
@@ -207,8 +207,8 @@
- [x] Thèmes, palette de commandes, raccourcis, webhooks → EN/FR complet - [x] Thèmes, palette de commandes, raccourcis, webhooks → EN/FR complet
- [x] Messages système : toasts, statuts, événements → EN/FR complet - [x] Messages système : toasts, statuts, événements → EN/FR complet
### 64. MFA — Authentification multi-facteurs ### 64. MFA — Authentification multi-facteurs ✅ FAIT
- **Effort :** 2 jours | **Impact :** 🟡 - **Effort :** 2 jours (réalisé) | **Impact :** 🟡
- **Description :** Ajout d'un second facteur d'authentification obligatoire pour les comptes administrateur. Deux méthodes sont proposées : - **Description :** Ajout d'un second facteur d'authentification obligatoire pour les comptes administrateur. Deux méthodes sont proposées :
- **TOTP** (Time-based One-Time Password) : l'utilisateur scanne un QR code avec son app d'authentification (Google Authenticator, Authy, Bitwarden) qui génère un code à 6 chiffres renouvelé toutes les 30 secondes. Au login, après avoir saisi son mot de passe, l'utilisateur doit entrer le code affiché sur son téléphone. Même si le mot de passe est volé, le compte reste protégé car l'attaquant n'a pas le téléphone. - **TOTP** (Time-based One-Time Password) : l'utilisateur scanne un QR code avec son app d'authentification (Google Authenticator, Authy, Bitwarden) qui génère un code à 6 chiffres renouvelé toutes les 30 secondes. Au login, après avoir saisi son mot de passe, l'utilisateur doit entrer le code affiché sur son téléphone. Même si le mot de passe est volé, le compte reste protégé car l'attaquant n'a pas le téléphone.
- **WebAuthn** (clés de sécurité physiques) : l'utilisateur enregistre une clé USB (YubiKey, SoloKey) ou utilise la biométrie de son appareil (empreinte digitale, Face ID, Windows Hello). Au login, le navigateur demande de toucher la clé physique ou de scanner le doigt. C'est le niveau de sécurité le plus élevé — résistant au phishing car la clé vérifie le domaine du site avant de répondre. - **WebAuthn** (clés de sécurité physiques) : l'utilisateur enregistre une clé USB (YubiKey, SoloKey) ou utilise la biométrie de son appareil (empreinte digitale, Face ID, Windows Hello). Au login, le navigateur demande de toucher la clé physique ou de scanner le doigt. C'est le niveau de sécurité le plus élevé — résistant au phishing car la clé vérifie le domaine du site avant de répondre.
@@ -218,29 +218,29 @@
- [ ] TOTP : génération de secret, QR code, vérification code 6 chiffres - [ ] TOTP : génération de secret, QR code, vérification code 6 chiffres
- [ ] WebAuthn : enregistrement de clé, assertion, attestation - [ ] WebAuthn : enregistrement de clé, assertion, attestation
- [ ] UI : page « Sécurité du compte » avec activation/désactivation MFA - [ ] UI : page « Sécurité du compte » avec activation/désactivation MFA
- [ ] Flow login : mot de passe → challenge TOTP si activé - [x] Flow login : mot de passe → challenge TOTP si activé
- [ ] Recovery codes : 8 codes de backup à usage unique - [ ] Recovery codes : 8 codes de backup à usage unique
- [ ] Stockage : `totp_secret` + `webauthn_credential_id` dans `users.json` - [x] Stockage : totp_secret + `webauthn_credential_id` dans `users.json`
### 65. Thèmes personnalisés — CSS variables ### 65. Thèmes personnalisés — CSS variables ✅ FAIT
- **Effort :** 1-2 jours | **Impact :** 🟢 - **Effort :** 1-2 jours (réalisé) | **Impact :** 🟢
- **Description :** Exposition de variables CSS pour permettre aux utilisateurs de créer des thèmes personnalisés. Presets inclus : light, dark, high-contrast, sepia. - **Description :** Exposition de variables CSS pour permettre aux utilisateurs de créer des thèmes personnalisés. Presets inclus : light, dark, high-contrast, sepia.
- **Sous-tâches :** - **Sous-tâches :**
- [ ] Audit des variables CSS existantes → liste des 30+ variables - [x] Audit des variables CSS existantes → 40+ variables
- [ ] Fichier `themes.json` avec presets (light, dark, high-contrast, sepia) - [x] Presets: light, dark, high-contrast, sepia (générés dynamiquement)
- [ ] UI : sélecteur de thème dans les paramètres (aperçu live) - [x] UI : sélecteur de thème dans les paramètres (swatches grid)
- [ ] Import/export de thème personnalisé (JSON) - [x] Import/export de thème personnalisé (JSON)
- [ ] Application dynamique sans rechargement (`document.documentElement.style.setProperty`) - [x] Application dynamique via document.documentElement.style.setProperty
### 66. Export multi-formats ### 66. Export multi-formats ✅ FAIT
- **Effort :** 1-2 jours | **Impact :** 🟢 - **Effort :** 1-2 jours (réalisé) | **Impact :** 🟢
- **Description :** Export de notes individuelles ou de vaults entiers en HTML standalone, bundle Markdown (.zip), et ePub pour liseuses. - **Description :** Export de notes individuelles ou de vaults entiers en HTML standalone, bundle Markdown (.zip), et ePub pour liseuses.
- **Sous-tâches :** - **Sous-tâches :**
- [ ] Export HTML standalone : CSS inliné, images en base64, navigation inter-fichiers - [x] Export HTML standalone : CSS inliné, images en base64, navigation inter-fichiers
- [ ] Export MD bundle : ZIP du vault avec structure préservée - [x] Export MD bundle : ZIP du vault avec structure préservée
- [ ] Export ePub : conversion markdown → ePub via `markdown` + `ebooklib` - [x] Export ePub : conversion markdown → ePub (zipfile + mistune, 0 nouvelle dep)
- [ ] UI : bouton « Exporter » dans le viewer (fichier unique) + dans le menu vault (export complet) - [x] UI : dropdown Export dans toolbar viewer (HTML / MD bundle / ePub)
- [ ] Endpoints : `GET /api/export/html`, `GET /api/export/md-bundle`, `GET /api/export/epub` - [x] Endpoints : `GET /api/export/html`, `GET /api/export/md-bundle`, `GET /api/export/epub`
### 74. Support complet des documents PDF ### 74. Support complet des documents PDF
- **Effort :** 4-5 jours | **Impact :** 🟡 - **Effort :** 4-5 jours | **Impact :** 🟡