Fix birthday reset to 0 when restoring wallet from credentials
**Motivations :** - Le birthday était réinitialisé à 0 lors de la restauration des clés depuis les credentials dans pairing - Le device en mémoire ne contenait pas le birthday, seulement le device en base de données - Le wallet debugging info affichait birthday: 0 alors que birthday-setup avait été fait avec succès **Modifications :** - service.ts : ensureWalletKeysAvailable() restaure maintenant le device complet depuis la base de données - service.ts : Injection des clés depuis les credentials dans le device de la base de données (qui contient birthday, last_scan) - service.ts : Vérification que le birthday est préservé après restauration avec logs de débogage **Pages affectées :** - src/services/service.ts : Correction de la restauration du device avec préservation du birthday
This commit is contained in:
parent
c78d1a5909
commit
2d02a20f99
@ -1688,31 +1688,40 @@ export default class Services {
|
||||
return;
|
||||
}
|
||||
|
||||
// Si les clés ne sont pas disponibles, essayer de les restaurer depuis les credentials
|
||||
console.log('🔐 Wallet keys not in memory, attempting to restore from credentials...');
|
||||
// Si les clés ne sont pas disponibles, restaurer le device complet depuis la base de données
|
||||
console.log('🔐 Wallet keys not in memory, restoring full device from database...');
|
||||
|
||||
try {
|
||||
// Récupérer le device complet depuis la base de données (contient birthday, last_scan, etc.)
|
||||
const deviceFromDb = await this.getDeviceFromDatabase();
|
||||
if (!deviceFromDb?.sp_wallet) {
|
||||
throw new Error('Device not found in database');
|
||||
}
|
||||
|
||||
console.log(`🔍 Device from database - birthday: ${deviceFromDb.sp_wallet.birthday}, last_scan: ${deviceFromDb.sp_wallet.last_scan}`);
|
||||
|
||||
// Récupérer les credentials pour injecter les clés
|
||||
const { SecureCredentialsService } = await import('./secure-credentials.service');
|
||||
const secureCredentialsService = SecureCredentialsService.getInstance();
|
||||
|
||||
// Récupérer les credentials
|
||||
const credentials = await secureCredentialsService.retrieveCredentials('');
|
||||
if (!credentials) {
|
||||
throw new Error('No credentials found');
|
||||
}
|
||||
|
||||
// Restaurer les clés dans le device en mémoire
|
||||
if (device.sp_wallet) {
|
||||
device.sp_wallet.spend_key = credentials.spendKey;
|
||||
device.sp_wallet.scan_key = credentials.scanKey;
|
||||
// Injecter les clés depuis les credentials dans le device de la base de données
|
||||
deviceFromDb.sp_wallet.spend_key = credentials.spendKey;
|
||||
deviceFromDb.sp_wallet.scan_key = credentials.scanKey;
|
||||
|
||||
// Restaurer le device avec les clés
|
||||
this.restoreDevice(device);
|
||||
// Restaurer le device complet avec toutes les informations (birthday, last_scan, clés)
|
||||
this.restoreDevice(deviceFromDb);
|
||||
|
||||
console.log('✅ Wallet keys restored from credentials');
|
||||
} else {
|
||||
throw new Error('No wallet in device to restore keys to');
|
||||
// Vérifier que le birthday est bien préservé après restauration
|
||||
const deviceAfterRestore = this.dumpDeviceFromMemory();
|
||||
if (deviceAfterRestore?.sp_wallet?.birthday !== deviceFromDb.sp_wallet.birthday) {
|
||||
console.warn(`⚠️ Birthday mismatch after restore - expected: ${deviceFromDb.sp_wallet.birthday}, got: ${deviceAfterRestore?.sp_wallet?.birthday}`);
|
||||
}
|
||||
|
||||
console.log('✅ Full device restored from database with credentials keys');
|
||||
} catch (credentialError) {
|
||||
console.error('❌ Failed to restore wallet keys from credentials:', credentialError);
|
||||
throw new Error('❌ Wallet keys not available - WebAuthn decryption required');
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user