ci: docker_tag=dev-test

**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
This commit is contained in:
NicolasCantu 2025-10-24 02:07:48 +02:00
parent f795296d53
commit bab3ba67ab
2 changed files with 37 additions and 14 deletions

View File

@ -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
let spendKey: string;
let scanKey: string;
try {
const device = await this.getDeviceFromSDK();
if (!device || !device.sp_wallet) {
throw new Error('SDK device not found or wallet not initialized');
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;