mirror of https://github.com/lissy93/dashy
52 lines
1.8 KiB
JavaScript
52 lines
1.8 KiB
JavaScript
import sha256 from 'crypto-js/sha256';
|
|
import aes from 'crypto-js/aes';
|
|
import Utf8 from 'crypto-js/enc-utf8';
|
|
import axios from 'axios';
|
|
import { backupEndpoint } from '@/utils/defaults';
|
|
|
|
const ENDPOINT = backupEndpoint; // 'https://dashy-sync-service.as93.net';
|
|
|
|
/* Stringify, encrypt and encode data for transmission */
|
|
const encryptData = (data, password) => {
|
|
const stringifiedData = JSON.stringify(data);
|
|
const encryptedData = aes.encrypt(stringifiedData, password);
|
|
return encryptedData.toString();
|
|
};
|
|
|
|
/* Decrypt, decode and parse received data */
|
|
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) => axios.post(ENDPOINT, {
|
|
userData: encryptData(data, password),
|
|
subHash: makeSubHash(password),
|
|
});
|
|
|
|
/* Updates and existing backup */
|
|
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) => {
|
|
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); }
|
|
}
|
|
});
|
|
});
|
|
};
|