92 lines
4.2 KiB
Markdown
92 lines
4.2 KiB
Markdown
<!-- file: deltas/0.1.4/pre.013.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Delta `0.1.4-pre.013` — Secrets privilégiés
|
|
|
|
## Statut
|
|
|
|
Tranche livrée pour validation locale.
|
|
|
|
`0.1.4-pre.012-fix.001` est considérée validée : `fmt`, `check`, `clippy`, les 34 tests Config Desk, les 87 tests Config, les cinq audits ownership et les 12 tests d'API publique sont propres. Les flux de suppression via modal Bootstrap couvrent annulation et confirmation, et le scénario réel de shadowing `process > .env` retourne `source_changed=true`, `effective_changed=false`, `shadowed_by_process_environment=true`, `reload_required=false`.
|
|
|
|
## Objectif
|
|
|
|
Introduire la frontière explicite et privilégiée permettant de révéler temporairement une valeur `KSP_SECRET_*` / `KSPB_SECRET_*`, tout en maintenant la redaction des DTO ordinaires et en évitant toute conservation/logging accidentel de la valeur réelle.
|
|
|
|
## Modifications
|
|
|
|
### Backend
|
|
|
|
- nouveau module `secrets.rs` séparé de la projection ordinaire Environnement ;
|
|
- DTO TS-RS dédiés :
|
|
- `SecretRevealRequestDto` ;
|
|
- `SecretRevealResponseDto` ;
|
|
- le response DTO ne dérive volontairement ni `Clone` ni `Debug` ;
|
|
- nouvelle commande Tauri centralisée `reveal_environment_value` ;
|
|
- policy backend :
|
|
- nom obligatoirement validé par `ConfigSensitivity::from_variable_name()` ;
|
|
- reveal refusé pour `Public` et `Internal` ;
|
|
- sources autorisées strictement `effective` ou `dotenv` ;
|
|
- délégation exclusive à :
|
|
- `ConfigManagement::reveal_effective_environment_value()` ;
|
|
- `ConfigManagement::reveal_dotenv_value()` ;
|
|
- aucune valeur révélée n'est stockée dans `AppState` ;
|
|
- logging limité au nom de variable, à la source et à `value_present`, jamais à la valeur.
|
|
|
|
### Frontend
|
|
|
|
- nouveau module `secret_reveal.ts` ;
|
|
- boutons **Révéler effective** et **Révéler .env** disponibles uniquement lorsque l'éditeur cible un namespace Secret ;
|
|
- modal Bootstrap de confirmation explicite avant l'appel Tauri ;
|
|
- affichage transitoire dans un champ `password`, masqué par défaut ;
|
|
- bascule locale **Afficher / Masquer** ;
|
|
- effacement du contrôle à la fermeture du modal ;
|
|
- effacement/hide forcé lorsqu'on quitte la vue Environnement ;
|
|
- aucune persistence `localStorage` / `sessionStorage` ;
|
|
- aucune valeur réelle recopiée dans les logs frontend.
|
|
|
|
### Tests
|
|
|
|
- la policy accepte les deux sources uniquement pour `KSP_SECRET_*` / `KSPB_SECRET_*` ;
|
|
- les namespaces Public/Internal/externes et les sources inconnues sont rejetés ;
|
|
- le DTO response reste un contrat minimal explicitement non-`Debug`/non-`Clone`.
|
|
|
|
### Documentation
|
|
|
|
- `pre.012` marquée réalisée dans le plan ;
|
|
- `pre.013` marquée en cours ;
|
|
- README/USAGE/TODO alignés sur le reveal privilégié et transitoire.
|
|
|
|
## Threat model borné
|
|
|
|
Cette tranche vise la prévention de divulgation accidentelle dans les DTO généraux, snapshots, diagnostics, logs et état frontend durable. Elle ne prétend pas fournir une ré-authentification forte contre une WebView/session desktop déjà compromise. Une authentification OS/keychain éventuelle reste hors scope de `0.1.4`.
|
|
|
|
## Scénarios de validation
|
|
|
|
1. créer temporairement une variable `KSP_SECRET_TEST` via le management `.env` ;
|
|
2. sélectionner cette ligne : les deux boutons reveal doivent s'activer tandis que la table reste `********` ;
|
|
3. **Révéler .env** : annuler d'abord le modal, puis recommencer et confirmer ;
|
|
4. la valeur réelle doit apparaître masquée par défaut ; **Afficher/Masquer** doit fonctionner ;
|
|
5. fermer le modal puis le rouvrir : la valeur précédente ne doit plus être présente avant une nouvelle confirmation ;
|
|
6. tester **Révéler effective** ; avec absence de shadowing elle doit correspondre à `.env` ;
|
|
7. avec une variable Public/Internal sélectionnée, les boutons reveal restent désactivés ;
|
|
8. vérifier dans la console qu'aucune valeur Secret réelle n'apparaît dans les événements de reveal.
|
|
|
|
## Version technique
|
|
|
|
```text
|
|
workspace.package.version = "0.1.4-pre.13"
|
|
```
|
|
|
|
## Validation locale demandée
|
|
|
|
```bash
|
|
cargo fmt --all
|
|
cargo check --workspace
|
|
cargo clippy --workspace --all-targets
|
|
cargo test -p ksp-app-config-desk
|
|
cargo test -p ksp-config-lib
|
|
cargo tree -p ksp-app-config-desk
|
|
cargo tauri dev -c crates/ksp-app-config-desk/tauri.conf.json
|
|
```
|