fix: verify PBKDF2 key in pbkdf2keys store during prerequisites check

**Motivations :**
- La vérification des prérequis ne vérifiait pas réellement la présence de la clé PBKDF2 dans le store pbkdf2keys
- Il y avait une duplication de code pour la vérification de la clé PBKDF2
- Le mode de sécurité était recherché deux fois au lieu d'être réutilisé

**Modifications :**
- Déplacement de la vérification réelle de la clé PBKDF2 dans la section des prérequis
- Vérification explicite de la présence de la clé dans le store pbkdf2keys avant de continuer
- Stockage du mode de sécurité trouvé dans une variable au niveau supérieur pour réutilisation
- Suppression de la vérification dupliquée plus tard dans le code
- Amélioration des messages de log pour indiquer explicitement la vérification dans le store pbkdf2keys

**Pages affectées :**
- src/pages/wallet-setup/wallet-setup.ts (vérification des prérequis améliorée)
This commit is contained in:
NicolasCantu 2025-10-29 12:42:13 +01:00
parent b0694eba22
commit aedfa09bbc
2 changed files with 45 additions and 69 deletions

View File

@ -52,6 +52,7 @@ document.addEventListener('DOMContentLoaded', async () => {
updateProgress(10);
let services: any; // Déclarer services au niveau supérieur
let currentMode: string | null = null; // Déclarer currentMode au niveau supérieur
try {
console.log('🔄 Importing services...');
@ -105,24 +106,50 @@ document.addEventListener('DOMContentLoaded', async () => {
updateStatus('🔐 Génération des clés de sécurité...', 'loading');
updateProgress(30);
try {
const { SecureCredentialsService } = await import('../../services/secure-credentials.service');
const secureCredentialsService = SecureCredentialsService.getInstance();
// Vérifier les prérequis en base de données
updateStatus('🔍 Vérification des prérequis...', 'loading');
updateProgress(20);
// Vérifier les prérequis en base de données
updateStatus('🔍 Vérification des prérequis...', 'loading');
updateProgress(20);
// CRITICAL: wallet-setup ne doit PAS générer de credentials
// Les credentials et clé PBKDF2 doivent être créés dans security-setup
// On vérifie que la clé PBKDF2 existe dans le store pbkdf2keys
console.log('🔐 Checking for existing PBKDF2 key in pbkdf2keys store...');
// Vérifier si des credentials existent déjà
// CRITICAL: wallet-setup ne doit PAS générer de credentials
// Les credentials et clé PBKDF2 doivent être créés dans security-setup
// On vérifie juste que la clé PBKDF2 existe
console.log('🔐 Checking for existing PBKDF2 key...');
} catch (error) {
// Erreur lors de la vérification, on continuera pour tester les clés PBKDF2
console.log(' Could not check credentials status, will test PBKDF2 keys directly');
const { SecureCredentialsService } = await import('../../services/secure-credentials.service');
const secureCredentialsService = SecureCredentialsService.getInstance();
// Vérifier que la clé PBKDF2 existe pour au moins un mode de sécurité dans le store pbkdf2keys
const securityModes: Array<'otp' | 'password' | 'none' | 'os' | 'proton-pass'> =
['none', 'otp', 'password', 'os', 'proton-pass'];
for (const mode of securityModes) {
try {
const hasKey = await secureCredentialsService.hasPBKDF2Key(mode);
if (hasKey) {
const key = await secureCredentialsService.retrievePBKDF2Key(mode);
if (key) {
currentMode = mode;
console.log(`✅ PBKDF2 key found in pbkdf2keys store for security mode: ${mode}`);
break;
}
}
} catch (error) {
// Continue to next mode
console.log(`⚠️ No PBKDF2 key found in pbkdf2keys store for mode ${mode}`);
}
}
if (!currentMode) {
console.log('⚠️ No PBKDF2 key found in pbkdf2keys store, redirecting to security-setup...');
updateStatus('⚠️ Redirection vers la configuration de sécurité...', 'loading');
setTimeout(() => {
window.location.href = '/src/pages/security-setup/security-setup.html';
}, 1000);
return;
}
console.log('✅ Prerequisites verified: PBKDF2 key found in pbkdf2keys store for mode:', currentMode);
// Étape 3: Sauvegarde du wallet avec état birthday_waiting
updateStatus('💰 Sauvegarde du portefeuille...', 'loading');
updateProgress(60);
@ -130,59 +157,8 @@ document.addEventListener('DOMContentLoaded', async () => {
try {
console.log('🔐 Sauvegarde du wallet avec état birthday_waiting...');
// DÉTECTER le mode de sécurité via la clé PBKDF2 disponible
// Le mode de sécurité est identifié par la clé PBKDF2 qui fonctionne
const { SecureCredentialsService } = await import('../../services/secure-credentials.service');
const secureCredentialsService = SecureCredentialsService.getInstance();
// TEST: Log credentialId from sessionStorage
const storedCredentialId = sessionStorage.getItem('webauthn_credential_id');
if (storedCredentialId) {
console.log('🔐 TEST: credentialId from sessionStorage in wallet-setup:', storedCredentialId);
} else {
console.log('🔐 TEST: No credentialId found in sessionStorage');
}
console.log('🔍 Testing all security modes to find a PBKDF2 key...');
// Tester tous les modes de sécurité pour trouver une clé PBKDF2 valide
// Mettre 'none' en premier pour éviter d'ouvrir la fenêtre du navigateur
const allSecurityModes: Array<'otp' | 'password' | 'none' | 'os' | 'proton-pass'> =
['none', 'otp', 'password', 'os', 'proton-pass'];
let currentMode: string | null = null;
for (const mode of allSecurityModes) {
console.log(`🔍 Testing security mode: ${mode}`);
try {
// Vérifier d'abord silencieusement si une clé existe
const hasKey = await secureCredentialsService.hasPBKDF2Key(mode);
if (hasKey) {
// Si une clé existe, essayer de la récupérer
const key = await secureCredentialsService.retrievePBKDF2Key(mode);
if (key) {
currentMode = mode;
console.log(`✅ PBKDF2 key found for security mode: ${mode}`);
break;
}
} else {
console.log(`⚠️ No PBKDF2 key found for mode ${mode}`);
}
} catch (error) {
console.log(`⚠️ No PBKDF2 key found for mode ${mode}`);
}
}
// CRITICAL: Si aucune clé PBKDF2 n'est disponible, rediriger vers security-setup
if (!currentMode) {
console.log('⚠️ No PBKDF2 key found, redirecting to security-setup...');
updateStatus('⚠️ Redirection vers la configuration de sécurité...', 'loading');
setTimeout(() => {
window.location.href = '/src/pages/security-setup/security-setup.html';
}, 1000);
return;
}
// Le mode de sécurité a déjà été trouvé dans la vérification des prérequis
// currentMode est déjà défini et vérifié
console.log('🔐 Using security mode for wallet encryption:', currentMode);
// Générer un wallet temporaire avec état birthday_waiting