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

@ -39,7 +39,7 @@ document.addEventListener('DOMContentLoaded', async () => {
// Vérifier que le PBKDF2 key existe d'abord (prérequis le plus basique) // Vérifier que le PBKDF2 key existe d'abord (prérequis le plus basique)
const { SecureCredentialsService } = await import('../../services/secure-credentials.service'); const { SecureCredentialsService } = await import('../../services/secure-credentials.service');
const secureCredentials = SecureCredentialsService.getInstance(); const secureCredentials = SecureCredentialsService.getInstance();
let pbkdf2KeyFound = false; let pbkdf2KeyFound = false;
const securityModes = ['none', 'password', 'os', 'proton-pass']; const securityModes = ['none', 'password', 'os', 'proton-pass'];
for (const mode of securityModes) { for (const mode of securityModes) {
@ -77,7 +77,7 @@ document.addEventListener('DOMContentLoaded', async () => {
break; break;
} }
} }
if (!wallet) { if (!wallet) {
console.log('⚠️ Wallet still not found after retries, redirecting to wallet-setup...'); console.log('⚠️ Wallet still not found after retries, redirecting to wallet-setup...');
updateStatus('⚠️ Redirection vers la configuration du wallet...', 'loading'); updateStatus('⚠️ Redirection vers la configuration du wallet...', 'loading');

View File

@ -52,6 +52,7 @@ document.addEventListener('DOMContentLoaded', async () => {
updateProgress(10); updateProgress(10);
let services: any; // Déclarer services au niveau supérieur let services: any; // Déclarer services au niveau supérieur
let currentMode: string | null = null; // Déclarer currentMode au niveau supérieur
try { try {
console.log('🔄 Importing services...'); console.log('🔄 Importing services...');
@ -105,24 +106,50 @@ document.addEventListener('DOMContentLoaded', async () => {
updateStatus('🔐 Génération des clés de sécurité...', 'loading'); updateStatus('🔐 Génération des clés de sécurité...', 'loading');
updateProgress(30); updateProgress(30);
try { // Vérifier les prérequis en base de données
const { SecureCredentialsService } = await import('../../services/secure-credentials.service'); updateStatus('🔍 Vérification des prérequis...', 'loading');
const secureCredentialsService = SecureCredentialsService.getInstance(); updateProgress(20);
// Vérifier les prérequis en base de données // CRITICAL: wallet-setup ne doit PAS générer de credentials
updateStatus('🔍 Vérification des prérequis...', 'loading'); // Les credentials et clé PBKDF2 doivent être créés dans security-setup
updateProgress(20); // On vérifie que la clé PBKDF2 existe dans le store pbkdf2keys
console.log('🔐 Checking for existing PBKDF2 key in pbkdf2keys store...');
const { SecureCredentialsService } = await import('../../services/secure-credentials.service');
const secureCredentialsService = SecureCredentialsService.getInstance();
// Vérifier si des credentials existent déjà // Vérifier que la clé PBKDF2 existe pour au moins un mode de sécurité dans le store pbkdf2keys
// CRITICAL: wallet-setup ne doit PAS générer de credentials const securityModes: Array<'otp' | 'password' | 'none' | 'os' | 'proton-pass'> =
// Les credentials et clé PBKDF2 doivent être créés dans security-setup ['none', 'otp', 'password', 'os', 'proton-pass'];
// On vérifie juste que la clé PBKDF2 existe
console.log('🔐 Checking for existing PBKDF2 key...'); for (const mode of securityModes) {
} catch (error) { try {
// Erreur lors de la vérification, on continuera pour tester les clés PBKDF2 const hasKey = await secureCredentialsService.hasPBKDF2Key(mode);
console.log(' Could not check credentials status, will test PBKDF2 keys directly'); 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 // Étape 3: Sauvegarde du wallet avec état birthday_waiting
updateStatus('💰 Sauvegarde du portefeuille...', 'loading'); updateStatus('💰 Sauvegarde du portefeuille...', 'loading');
updateProgress(60); updateProgress(60);
@ -130,59 +157,8 @@ document.addEventListener('DOMContentLoaded', async () => {
try { try {
console.log('🔐 Sauvegarde du wallet avec état birthday_waiting...'); 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é a déjà été trouvé dans la vérification des prérequis
// Le mode de sécurité est identifié par la clé PBKDF2 qui fonctionne // currentMode est déjà défini et vérifié
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;
}
console.log('🔐 Using security mode for wallet encryption:', currentMode); console.log('🔐 Using security mode for wallet encryption:', currentMode);
// Générer un wallet temporaire avec état birthday_waiting // Générer un wallet temporaire avec état birthday_waiting