Files
2026-08-21 09:33:04 +02:00

5.6 KiB

Delta 0.2.6-pre.005 — création Wallet et lifecycle de session Rust

Base requise

0.2.6-pre.004-fix.001 appliquée
workspace.package.version = 0.2.6-pre.4.fix.1

Les preuves opérateur de pre.004-fix.001 sont vertes : cargo fmt --all, audit structurel Python, cargo check --workspace, cargo clippy --workspace --all-targets, cargo test -p ksp-app-wallet-desk, cargo test --workspace et cargo tauri dev -c crates/ksp-app-wallet-desk/tauri.conf.json, sans les warnings unused_imports corrigés par le fix.

Type de livraison

ksp-general-0.2.6-pre.005.zip

Cette tranche modifie le runtime Rust/frontend ; le signal technique devient :

workspace.package.version = 0.2.6-pre.5
commit = v0.2.6-pre.005

Aucun tag stable.

Objet

Rendre enfin possible la création d'un vrai .kspwallet depuis Wallet Desk et poser le lifecycle de session backend avant les unlock VIEW/OWNER de wallets existants.

Session Rust durable

AppState possède désormais :

Mutex<WalletSession>

avec les états actuellement matérialisés :

NoSelection
Locked { wallet_id, path, locked_info }
Owner { wallet_id, path, view_enabled, wallet: WalletOwner }

Le chemin complet et WalletOwner restent exclusivement en Rust.

Transitions pre.005 :

select_wallet   -> drop session précédente -> inspect -> Locked
create_wallet   -> drop session précédente -> create file -> Owner
deselect_wallet -> drop handle/path -> NoSelection
lock_wallet     -> drop Owner -> inspect file -> Locked
refresh_wallets -> deselect backend -> refresh inventory

Les unlock VIEW/OWNER de fichiers existants restent hors scope et arrivent en pre.006.

Création native

Le formulaire Create transmet :

filename
OWNER password
VIEW password optionnel
alias interne optionnel
note initiale optionnelle

Rust valide le filename root-scoped puis appelle exclusivement :

ksp_wallet_lib::create_wallet_file_v1

La publication reste no-clobber et la destination reste sous ResolvedWalletConfig::effective_wallets_directory().

Le String OWNER est immédiatement déplacé dans OwnerPassword; le String VIEW optionnel est immédiatement déplacé dans ViewPassword. Les request DTOs de password ne dérivent ni Debug ni Clone.

Après succès, le WalletOwner retourné est conservé dans WalletSession::Owner. La réponse WalletAuthorizedDto expose seulement les informations autorisées nécessaires à l'UI :

wallet_id / filename
capability = owner
format_version
view_enabled
Pubkey
alias optionnel
notes protégées

Aucun password, seed, keypair, secret bytes ou path complet n'est sérialisé.

Frontend et purge

La carte Wallet courant sait maintenant afficher l'état OWNER après création avec fa-lock-open, Pubkey, alias et notes. Le formulaire Create est fonctionnel ; le bouton VIEW active/désactive son champ password.

Les opérations suivantes purgent les inputs password/alias/note et toute projection autorisée devenue invalide :

sélection d'un autre wallet
Lock
Deselect
Refresh
échec de transition

Après une création réussie, l'inventory est relu par list_wallets sans détruire la session OWNER. Un Refresh utilisateur appelle au contraire refresh_wallets, qui purge d'abord la session backend pour garder UI et Rust synchronisés.

Les logs frontend/backend n'incluent ni password, ni alias, ni note. Ils peuvent inclure le filename/root-scoped wallet id et les états/capabilities.

Commandes Tauri

Ajouts :

create_wallet
deselect_wallet
lock_wallet

select_wallet installe désormais réellement la session Locked au lieu de retourner seulement une projection éphémère.

DTOs

Ajouts :

WalletCreateRequestDto
WalletAuthorizedDto
WalletNoteDto
WalletSessionDto
WalletSessionStateDto

WalletCreateRequestDto est strictement frontend -> Rust. Les autres DTOs ne transportent aucun password.

Tests et canaris

La tranche ajoute/étend des canaris pour :

NoSelection sans identité
request de création non Clone/Debug par conception
create/session backend owned
commands create/deselect/lock présentes
form Create présente
passwords absents de WalletAuthorizedDto
purge frontend explicite
inventory locked toujours sans identité protégée

Les tests existants de ksp-wallet-lib restent l'autorité pour la cryptographie, le no-clobber, la persistance et les garanties VIEW/OWNER du format V1.

Dépendances

Aucune dépendance Cargo ou npm n'est ajoutée/modifiée dans cette tranche.

Aucune commande npm directe n'est nécessaire.

Validation opérateur requise

cargo fmt --all
python3 scripts/audit_rust_workspace_rules.py
cargo check --workspace
cargo clippy --workspace --all-targets
cargo test -p ksp-app-wallet-desk
cargo test --workspace
KSP_WALLETS_DIRECTORY=var/wallet-desk-pre005 cargo tauri dev -c crates/ksp-app-wallet-desk/tauri.conf.json

Vérification UI recommandée :

Create / Import
-> choisir un filename *.kspwallet neuf
-> saisir OWNER password
-> activer ou non VIEW et saisir son password si activé
-> alias/note optionnels
-> Create wallet
-> vérifier session OWNER + fa-lock-open + Pubkey
-> vérifier apparition dans DataTable
-> Lock -> fa-lock + purge Pubkey/alias/notes
-> Deselect -> NoSelection
-> recréer même filename -> échec no-clobber
-> Refresh pendant OWNER -> session purgée

Toujours aucun cargo tauri build à ce stade.

Suite

Après validation de pre.005, pre.006 ajoutera l'unlock manuel VIEW/OWNER et le provider Config KSP_SECRET_WALLET_PASS_*, sans auto-unlock silencieux.