Download backup file
This commit is contained in:
parent
5fe5493548
commit
bb70f092d5
@ -24,7 +24,7 @@
|
||||
<div class="menu-content" id="menu">
|
||||
<!-- <a onclick="unpair()">Revoke</a> -->
|
||||
<a onclick="importJSON()">Import</a>
|
||||
<a onclick="importJSON()">Export</a>
|
||||
<a onclick="createBackUp()">Export</a>
|
||||
<a onclick="navigate('account')">Account</a>
|
||||
<a onclick="navigate('chat')">Chat</a>
|
||||
<a onclick="navigate('signature')">Signatures</a>
|
||||
|
@ -151,3 +151,31 @@ async function importJSON() {
|
||||
}
|
||||
|
||||
(window as any).importJSON = importJSON;
|
||||
|
||||
async function createBackUp() {
|
||||
const service = await Services.getInstance();
|
||||
const backUp = await service.createBackUp();
|
||||
if (!backUp) {
|
||||
console.error("No device to backup");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const backUpJson = JSON.stringify(backUp, null, 2)
|
||||
const blob = new Blob([backUpJson], { type: 'application/json' });
|
||||
const url = URL.createObjectURL(blob);
|
||||
|
||||
const a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = '4nk-backup.json';
|
||||
a.click();
|
||||
|
||||
URL.revokeObjectURL(url);
|
||||
|
||||
console.log('Backup successfully prepared for download');
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
(window as any).createBackUp = createBackUp;
|
||||
|
7
src/models/backup.model.ts
Normal file
7
src/models/backup.model.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { Device, Process, SecretsStore } from "pkg/sdk_client";
|
||||
|
||||
export interface BackUp {
|
||||
device: Device,
|
||||
secrets: SecretsStore,
|
||||
processes: Record<string, Process>,
|
||||
}
|
@ -3,10 +3,11 @@ import { INotification } from '~/models/notification.model';
|
||||
import { IProcess } from '~/models/process.model';
|
||||
// import Database from './database';
|
||||
import { initWebsocket, sendMessage } from '../websockets';
|
||||
import { ApiReturn, Member, Process, RoleDefinition, UserDiff } from '../../pkg/sdk_client';
|
||||
import { ApiReturn, Device, Member, Process, RoleDefinition, SecretsStore, UserDiff } from '../../pkg/sdk_client';
|
||||
import ModalService from './modal.service';
|
||||
import Database from './database.service';
|
||||
import { storeData, retrieveData } from './storage.service';
|
||||
import { BackUp } from '~/models/backup.model';
|
||||
|
||||
export const U32_MAX = 4294967295;
|
||||
|
||||
@ -146,6 +147,19 @@ export default class Services {
|
||||
return await db.getObject('shared_secrets', address);
|
||||
}
|
||||
|
||||
public async getAllSecrets(): Promise<SecretsStore> {
|
||||
const db = await Database.getInstance();
|
||||
const sharedSecrets = await db.dumpStore('shared_secrets');
|
||||
const unconfirmedSecrets = await db.dumpStore('unconfirmed_secrets'); // keys are numeric values
|
||||
|
||||
const secretsStore = {
|
||||
shared_secrets: sharedSecrets,
|
||||
unconfirmed_secrets: Object.values(unconfirmedSecrets),
|
||||
};
|
||||
|
||||
return secretsStore;
|
||||
}
|
||||
|
||||
public async connectMember(members: Member[]): Promise<ApiReturn> {
|
||||
if (members.length === 0) {
|
||||
throw new Error('Trying to connect to empty members list');
|
||||
@ -675,6 +689,32 @@ export default class Services {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
public async createBackUp(): Promise<BackUp | null> {
|
||||
// Get the device from indexedDB
|
||||
const deviceStr = await this.getDeviceFromDatabase();
|
||||
if (!deviceStr) {
|
||||
console.error('No device loaded');
|
||||
return null;
|
||||
}
|
||||
|
||||
const device: Device = JSON.parse(deviceStr);
|
||||
|
||||
// Get the processes
|
||||
const processes = await this.getProcesses();
|
||||
|
||||
// Get the shared secrets
|
||||
const secrets = await this.getAllSecrets();
|
||||
|
||||
// Create a backup object
|
||||
const backUp = {
|
||||
device: device,
|
||||
secrets: secrets,
|
||||
processes: processes,
|
||||
};
|
||||
|
||||
return backUp;
|
||||
}
|
||||
|
||||
// Device 1 wait Device 2
|
||||
public device1: boolean = false;
|
||||
public device2Ready: boolean = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user