handle IMPORT/EXPORT_BACKUP messages
This commit is contained in:
parent
fd8aa3dbbe
commit
39d57d4749
@ -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}`);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user