Adds update restore from backup functionality

This commit is contained in:
Alicia Sykes
2021-05-24 18:59:35 +01:00
parent bdb6e310e8
commit 0e43e91d84
2 changed files with 53 additions and 27 deletions

View File

@@ -1,10 +1,9 @@
/* eslint-disable */
import sha256 from 'crypto-js/sha256';
import aes from 'crypto-js/aes';
import Utf8 from 'crypto-js/enc-utf8';
import axios from 'axios';
const ENDPOINT = 'https://dashy-sync-service.as93.net/';
const ENDPOINT = 'https://dashy-sync-service.as93.net';
/* Stringify, encrypt and encode data for transmission */
const encryptData = (data, password) => {
@@ -14,34 +13,38 @@ const encryptData = (data, password) => {
};
/* Decrypt, decode and parse received data */
const decryptData = (data, password) => {
return aes.decrypt(data, password).toString(Utf8);
};
const decryptData = (data, password) => aes.decrypt(data, password).toString(Utf8);
/* Returns a splice of the hash of the users password */
const makeSubHash = (pass) => sha256(pass).toString().slice(0, 14);
/* Makes the backup */
export const backup = (data, password) => {
return axios.post(ENDPOINT, {
userData: encryptData(data, password),
subHash: makeSubHash(password),
});
};
export const backup = (data, password) => axios.post(ENDPOINT, {
userData: encryptData(data, password),
subHash: makeSubHash(password),
});
/* Updates and existing backup */
export const update = (data, password, backupId) => {
return axios.put(ENDPOINT, {
backupId,
userData: encryptData(data, password),
subHash: makeSubHash(password),
});
};
export const update = (data, password, backupId) => axios.put(ENDPOINT, {
backupId,
userData: encryptData(data, password),
subHash: makeSubHash(password),
});
const encodeGetParams = p => Object.entries(p).map(kv => kv.map(encodeURIComponent).join('=')).join('&');
/* Restores the backup */
export const restore = (backupId, password) => {
// return axios.get(ENDPOINT, {
// backupId,
// subHash: makeSubHash(password),
// });
const params = encodeGetParams({ backupId, subHash: makeSubHash(password) });
const url = `${ENDPOINT}/?${params}`;
return new Promise((resolve, reject) => {
axios.get(url).then((response) => {
if (!response.data || response.data.errorMsg) {
reject(response.data.errorMsg || 'Error');
} else {
const decryptedData = decryptData(response.data.userData.userData, password);
try { resolve(JSON.parse(decryptedData)); } catch (e) { reject(e); }
}
});
});
};