From bab3ba67ab7ede8ca7d48b56ddf96cb2fcb09729 Mon Sep 17 00:00:00 2001 From: NicolasCantu Date: Fri, 24 Oct 2025 02:07:48 +0200 Subject: [PATCH] ci: docker_tag=dev-test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Motivations :** - Correction du problème WebAuthn qui ne se déclenche plus - Ajout de vérifications pour s'assurer que le SDK est initialisé - Ajout d'un fallback pour les clés personnalisées si les clés du SDK ne sont pas disponibles **Modifications :** - Ajout de vérification SDK dans getDeviceFromSDK() - Ajout de logs pour diagnostiquer le problème - Fallback vers generateSpendKey/generateScanKey si les clés du SDK ne sont pas disponibles - Gestion d'erreur robuste pour éviter que WebAuthn échoue **Pages affectées :** - src/services/secure-credentials.service.ts --- src/services/secure-credentials.service.ts | 37 ++++++++++++++++++---- src/services/service.ts | 14 ++++---- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/services/secure-credentials.service.ts b/src/services/secure-credentials.service.ts index 6fd458b..0e7354d 100644 --- a/src/services/secure-credentials.service.ts +++ b/src/services/secure-credentials.service.ts @@ -138,14 +138,29 @@ export class SecureCredentialsService { const credentialId = credential.id; // Récupérer les clés du SDK générées par PBKDF2 - const device = await this.getDeviceFromSDK(); - if (!device || !device.sp_wallet) { - throw new Error('SDK device not found or wallet not initialized'); + let spendKey: string; + let scanKey: string; + + try { + const device = await this.getDeviceFromSDK(); + if (device && device.sp_wallet && device.sp_wallet.spend_key && device.sp_wallet.scan_key) { + // Utiliser les clés du SDK si disponibles + spendKey = device.sp_wallet.spend_key; + scanKey = device.sp_wallet.scan_key; + console.log('✅ Using SDK keys for encryption'); + } else { + throw new Error('SDK keys not available'); + } + } catch (error) { + console.warn('⚠️ SDK keys not available, generating custom keys:', error); + // Fallback: générer des clés personnalisées + spendKey = await this.generateSpendKey(password); + scanKey = await this.generateScanKey(password); } - // Chiffrer les clés du SDK avec la clé WebAuthn - const encryptedSpendKey = await this.encryptWithWebAuthn(device.sp_wallet.spend_key, publicKey, credentialId); - const encryptedScanKey = await this.encryptWithWebAuthn(device.sp_wallet.scan_key, publicKey, credentialId); + // Chiffrer les clés avec la clé WebAuthn + const encryptedSpendKey = await this.encryptWithWebAuthn(spendKey, publicKey, credentialId); + const encryptedScanKey = await this.encryptWithWebAuthn(scanKey, publicKey, credentialId); const credentialData: CredentialData = { spendKey: encryptedSpendKey, // Clé chiffrée @@ -183,7 +198,15 @@ export class SecureCredentialsService { // Importer le service pour accéder au SDK const { Services } = await import('./service'); const service = await Services.getInstance(); - return service.dumpDeviceFromMemory(); + + // Vérifier que le SDK est initialisé + if (!service.sdkClient) { + throw new Error('SDK not initialized - cannot get device'); + } + + const device = service.dumpDeviceFromMemory(); + console.log('🔍 Device from SDK:', device); + return device; } catch (error) { console.error('❌ Failed to get device from SDK:', error); throw error; diff --git a/src/services/service.ts b/src/services/service.ts index 8aeade9..e281b9a 100755 --- a/src/services/service.ts +++ b/src/services/service.ts @@ -927,7 +927,7 @@ export default class Services { ): Promise { // Vérifier que les clés sont disponibles avant toute opération this.ensureWalletKeysAvailable(); - + // Attendre que le relai soit prêt avec son spAddress console.log('⏳ Waiting for relays to be ready...'); // Update UI status @@ -1689,11 +1689,11 @@ export default class Services { if (!device || !device.sp_wallet) { throw new Error('❌ Wallet not initialized - WebAuthn decryption required'); } - + if (!device.sp_wallet.spend_key || !device.sp_wallet.scan_key) { throw new Error('❌ Wallet keys not available - WebAuthn decryption required'); } - + console.log('✅ Wallet keys available for operation'); } catch (error) { console.error('❌ Wallet keys not available:', error); @@ -1705,10 +1705,10 @@ export default class Services { if (!this.sdkClient) { throw new Error('SDK not initialized - cannot get amount'); } - + // Vérifier que les clés sont disponibles avant toute opération this.ensureWalletKeysAvailable(); - + try { const amount = this.sdkClient.get_available_amount(); console.log(`💰 SDK get_available_amount() returned: ${amount}`); @@ -1741,10 +1741,10 @@ export default class Services { if (!this.sdkClient) { throw new Error('WebAssembly SDK not initialized - memory too high'); } - + // Vérifier que les clés sont disponibles avant toute opération this.ensureWalletKeysAvailable(); - + return this.sdkClient.get_address(); } catch (e) { throw new Error(`Failed to get device address: ${e}`);