feat: secrets masqués — couverture universelle clés API/mots de passe + clic pour copier (#188)
CI / lint (push) Successful in 2m40s
CI / security (push) Successful in 1m33s
CI / test (push) Successful in 4m19s
CI / build (push) Successful in 1m31s
CI / e2e (push) Successful in 16m56s

This commit is contained in:
2026-10-08 13:22:27 -04:00
parent 634ba8a272
commit e01e837a2a
20 changed files with 520 additions and 65 deletions
+36 -1
View File
@@ -1,6 +1,6 @@
# ObsiGate — Roadmap
> **Version :** 2.54.0 | **Dernière mise à jour :** 2026-10-08
> **Version :** 2.55.0 | **Dernière mise à jour :** 2026-10-08
> **Ce fichier ne contient que le travail à venir** (🔵 En cours + ⚪ Backlog) et un index compact
> vers les fonctionnalités livrées.
> - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)**
@@ -494,6 +494,40 @@
---
## ✅ Terminé — Secrets masqués
### 188. Secrets masqués — couverture universelle des clés API & mots de passe + clic pour copier
- **Effort :** 1 jour | **Impact :** 🟡
- **Statut :** ✅ **livré le 2026-10-08** — ouvert le 2026-10-08
- **Fiche :** [features/secret-mask-188.md](./features/secret-mask-188.md)
- **Description :** le redacteur (`secret_redactor.py`) ne couvrait que les
JWT, clés `sk-`/`AKIA`/`ghp_`, connection strings et affectations
`key=value` de 20+ caractères — la plupart des clés API réelles et **tous
les mots de passe courts** passaient en clair dans l'aperçu markdown, et
un masque affiché n'était pas récupérable sans ouvrir la source. #188
couvre la majorité des formats de clés, masque les mots de passe quelle
que soit leur longueur et rend chaque masque **cliquable** dans l'aperçu
authentifié (copie dans le presse-papiers) sans jamais exposer la valeur
à l'extérieur (partages, PDF, IA/MCP).
- **Sous-tâches :**
- [x] **A1** Détection universelle : table de formats fournisseur (OpenAI,
Stripe, GitLab, GitHub, Google, AWS, Slack, SendGrid, Hugging Face,
npm, Docker, Resend, Square, Atlassian, Discord, Telegram,
`Bearer …`) + plancher des affectations génériques 20 → 8 caractères
- [x] **A2** Mots de passe : `[MOT DE PASSE MASQUÉ]` toute longueur /
quote (`password=`, `"passwd":`, `db_password=`, `mot de passe=`) ;
`PWD=` shell épargné
- [x] **A3** Clic → copie : placeholders markdown-safe (blocs de code
compris) réécrits en `<span class="secret-mask" data-secret>`
côté aperçu authentifié (listener délégué, toast + infobulle
i18n FR/EN) ; libellé seul pour partages / PDF / IA / MCP ;
code masqué non re-coloré (highlight.js perdrait le badge)
- [x] **A4** Guide in-app FR/EN, `GUIDES/AUTHENTIFICATION_SECURITE.md`,
README FR/EN, tests `TestSecretRedactor` (+33)
---
## ⚪ Backlog — Priorité 4 (P4)
### 73. Synchronisation multi-appareils — Obsidian Sync compatible
@@ -686,6 +720,7 @@
| 184 | Tableur — peinture de format complète, multi-lignes/colonnes, grille A → Z × 1000 (croissance par blocs) | 2.54.0 | [features/xlsx-sheet-input-181.md](./features/xlsx-sheet-input-181.md) |
| 185 | Tableur — barre de menus Google Sheets (10 menus), ruban Sheets, grille unie | 2.54.0 | [features/xlsx-menus-185.md](./features/xlsx-menus-185.md) |
| 186 | Création d'un fichier Excel (`.xlsx`) depuis la modale « Créer un fichier » | 2.54.0 | [features/create-file-xlsx-186.md](./features/create-file-xlsx-186.md) |
| 188 | Secrets — détection universelle des clés API & mots de passe, masque cliquable (clic = copie) | Unreleased | [features/secret-mask-188.md](./features/secret-mask-188.md) |
| 159 | Desktop — gestion des vaults & dossiers : retrait par menu contextuel + section Configuration (ajout vault/dossier racine) | 2.50.0 | [features/desktop-tauri.md](./features/desktop-tauri.md) |
| 160 | Desktop — premier lancement professionnel (répertoire `%USERPROFILE%\ObsiGate` + `Prise en main.md`) et section Configuration harmonisée | 2.51.0 | [features/desktop-tauri.md](./features/desktop-tauri.md) |
| BUG-047 | Versionnage — source unique `VERSION` + bump SemVer automatique au commit (hooks + tag) | 2.3.0 | [DEVELOPMENT_AND_RELEASES.md](./DEVELOPMENT_AND_RELEASES.md) |