/** * Page de configuration de la sécurité * Première étape du processus d'initialisation */ import { SecurityMode } from '../../services/security-mode.service'; import { secureLogger } from '../../services/secure-logger'; import { DATABASE_CONFIG, openDatabase } from '../../services/database-config'; let selectedMode: SecurityMode | null = null; document.addEventListener('DOMContentLoaded', async () => { secureLogger.info('🔐 Security setup page loaded', { component: 'SecuritySetup' }); // Initialiser la base de données avec la configuration complète try { secureLogger.debug('🔍 Initializing database ${DATABASE_CONFIG.name} version ${DATABASE_CONFIG.version}...', { component: 'SecuritySetup' }); await openDatabase(); secureLogger.info('✅ Database initialized successfully', { component: 'SecuritySetup' }); } catch (error) { secureLogger.error('Failed to initialize database', error as Error, { component: 'SecuritySetup' }); alert('Erreur lors de l\'initialisation de la base de données. Veuillez réessayer.'); return; } const options = document.querySelectorAll('.security-option'); const continueBtn = document.getElementById('continueBtn') as HTMLButtonElement; const warning = document.getElementById('warning') as HTMLDivElement; // Gestion de la sélection des options options.forEach(option => { option.addEventListener('click', () => { // Désélectionner toutes les options options.forEach(opt => opt.classList.remove('selected')); // Sélectionner l'option cliquée option.classList.add('selected'); // Récupérer le mode sélectionné const mode = option.getAttribute('data-mode') as SecurityMode; selectedMode = mode; // Afficher l'avertissement pour les modes non sécurisés if (mode === 'none') { warning.style.display = 'block'; } else { warning.style.display = 'none'; } // Activer le bouton continuer continueBtn.disabled = false; secureLogger.info(`Security mode selected: ${mode}`, { component: 'SecuritySetup' }); }); }); // Gestion du bouton continuer continueBtn.addEventListener('click', async () => { if (!selectedMode) { secureLogger.error('❌ No security mode selected', { component: 'SecuritySetup' }); return; } try { console.log('🔐 Processing security mode:', selectedMode); // Sauvegarder le mode de sécurité const { SecurityModeService } = await import('../../services/security-mode.service'); const securityModeService = SecurityModeService.getInstance(); await securityModeService.setSecurityMode(selectedMode); secureLogger.info('✅ Security mode saved successfully', { component: 'SecuritySetup' }); console.log('🔐 Generating PBKDF2 key for security mode:', selectedMode); // Désactiver le bouton pendant la génération continueBtn.disabled = true; continueBtn.textContent = 'Génération de la clé...'; try { // Générer la clé PBKDF2 selon le mode choisi const { SecureCredentialsService } = await import('../../services/secure-credentials.service'); const secureCredentialsService = SecureCredentialsService.getInstance(); console.log('🔐 Generating PBKDF2 key with security mode:', selectedMode); // Générer la clé PBKDF2 et la stocker selon le mode // IMPORTANT: Cette opération doit être directe (pas de délai) pour que WebAuthn fonctionne const pbkdf2Key = await secureCredentialsService.generatePBKDF2Key(selectedMode); secureLogger.info('✅ PBKDF2 key generated and stored securely', { component: 'SecuritySetup' }); // Rediriger directement vers la page de génération du wallet secureLogger.info('🔐 Security setup completed, redirecting to wallet-setup...', { component: 'SecuritySetup' }); window.location.href = '/src/pages/wallet-setup/wallet-setup.html'; } catch (error) { console.error('❌ PBKDF2 key generation failed:', error); alert('Erreur lors de la génération de la clé de sécurité. Veuillez réessayer.'); // Réactiver le bouton continueBtn.disabled = false; continueBtn.textContent = 'Continuer'; } } catch (error) { console.error('❌ Error processing security mode:', error); alert('Erreur lors du traitement du mode de sécurité'); // Réactiver le bouton continueBtn.disabled = false; continueBtn.textContent = 'Continuer'; } }); });