handle IMPORT/EXPORT_BACKUP messages

This commit is contained in:
Sosthene 2025-07-16 17:16:53 +02:00
parent fd8aa3dbbe
commit 39d57d4749

View File

@ -11,6 +11,7 @@ import ModalService from './services/modal.service';
import { MessageType } from './models/process.model';
import { splitPrivateData, isValid32ByteHex } from './utils/service.utils';
import { MerkleProofResult } from 'pkg/sdk_client';
import { isValid } from './models/backup.model';
const routes: { [key: string]: string } = {
home: '/src/pages/home/home.html',
@ -805,6 +806,65 @@ export async function registerAllListeners() {
}
}
const handleExportBackup = async (event: MessageEvent) => {
if (event.data.type !== MessageType.EXPORT_BACKUP) return;
console.log('handleExportBackup', event.data);
try {
const { accessToken, password } = event.data;
if (!accessToken || !(await tokenService.validateToken(accessToken, event.origin))) {
throw new Error('Invalid or expired session token');
}
const backup = await services.exportUserDataBackup(password);
window.parent.postMessage(
{
type: MessageType.BACKUP_RETRIEVED,
backupFile: JSON.stringify(backup),
messageId: event.data.messageId
},
event.origin
);
} catch (e) {
const errorMsg = `Failed to export backup: ${e}`;
errorResponse(errorMsg, event.origin, event.data.messageId);
}
}
const handleImportBackup = async (event: MessageEvent) => {
if (event.data.type !== MessageType.IMPORT_BACKUP) return;
console.log('handleImportBackup', event.data);
try {
const { backupFile } = event.data;
// We don't validate a token here
const backup = JSON.parse(backupFile);
if (!isValid(backup)) {
throw new Error('Invalid backup file');
}
await services.importUserDataBackup(backup);
window.parent.postMessage(
{
type: MessageType.BACKUP_IMPORTED,
messageId: event.data.messageId
},
event.origin
);
} catch (e) {
const errorMsg = `Failed to import backup: ${e}`;
errorResponse(errorMsg, event.origin, event.data.messageId);
}
}
window.removeEventListener('message', handleMessage);
window.addEventListener('message', handleMessage);
@ -856,6 +916,12 @@ export async function registerAllListeners() {
case MessageType.VALIDATE_MERKLE_PROOF:
await handleValidateMerkleProof(event);
break;
case MessageType.EXPORT_BACKUP:
await handleExportBackup(event);
break;
case MessageType.IMPORT_BACKUP:
await handleImportBackup(event);
break;
default:
console.warn(`Unhandled message type: ${event.data.type}`);
}