diff --git a/web/database/worker/backup.js b/web/database/worker/backup.js --- a/web/database/worker/backup.js +++ b/web/database/worker/backup.js @@ -3,6 +3,7 @@ import { BackupClient, RequestedData } from 'backup-client'; import backupService from 'lib/facts/backup-service.js'; +import { decryptCommon } from 'lib/media/aes-crypto-utils-common.js'; import type { AuthMetadata } from 'lib/shared/identity-client-context.js'; import { completeRootKey } from '../../redux/persist-constants.js'; @@ -17,7 +18,9 @@ authMetadata: AuthMetadata, backupID: string, backupDataKey: string, + backupLogDataKey: string, ) { + const decryptionKey = new TextEncoder().encode(backupLogDataKey); const { userID, deviceID, accessToken } = authMetadata; if (!userID || !deviceID || !accessToken) { throw new Error('Backup restore requires full authMetadata'); @@ -49,6 +52,11 @@ ); sqliteQueryExecutor.setPersistStorageItem(completeRootKey, reduxPersistData); + + await client.downloadLogs(userIdentity, backupID, async log => { + const content = await decryptCommon(crypto, decryptionKey, log); + sqliteQueryExecutor.restoreFromBackupLog(content); + }); } export { restoreBackup }; diff --git a/web/database/worker/db-worker.js b/web/database/worker/db-worker.js --- a/web/database/worker/db-worker.js +++ b/web/database/worker/db-worker.js @@ -251,6 +251,7 @@ message.authMetadata, message.backupID, message.backupDataKey, + message.backupLogDataKey, ); } diff --git a/web/types/worker-types.js b/web/types/worker-types.js --- a/web/types/worker-types.js +++ b/web/types/worker-types.js @@ -90,6 +90,7 @@ +authMetadata: AuthMetadata, +backupID: string, +backupDataKey: string, + +backupLogDataKey: string, }; export type WorkerRequestMessage =