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 @@ -1,6 +1,7 @@ // @flow 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 { getProcessingStoreOpsExceptionMessage } from './process-operations.js'; @@ -20,7 +21,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'); @@ -59,6 +62,15 @@ } catch (err) { throw new Error(getProcessingStoreOpsExceptionMessage(err, dbModule)); } + + await client.downloadLogs(userIdentity, backupID, async log => { + const content = await decryptCommon(crypto, decryptionKey, log); + try { + sqliteQueryExecutor.restoreFromBackupLog(content); + } catch (err) { + throw new Error(getProcessingStoreOpsExceptionMessage(err, dbModule)); + } + }); } 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 @@ -254,6 +254,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 =