From ff96b30d3d688b9580c333f6a3b473d12d660d58 Mon Sep 17 00:00:00 2001 From: Ziga Date: Fri, 21 May 2021 11:52:29 +0200 Subject: [PATCH] Added backup --- html/export.html | 13 ++++++++++++- js/default-functions.js | 26 ++++++++++++++++++++++++++ js/export.js | 28 ++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/html/export.html b/html/export.html index 84121f1..0f7821d 100644 --- a/html/export.html +++ b/html/export.html @@ -71,8 +71,19 @@

Passky

Import +
+ + + + + + + + Backup + +
- + diff --git a/js/default-functions.js b/js/default-functions.js index 90ed09a..575c272 100644 --- a/js/default-functions.js +++ b/js/default-functions.js @@ -80,4 +80,30 @@ const errors = { "429": "You are sending too many requests! Please wait some time before executing this action.", "505": "Something went wrong while connecting to database!", "999": "You don't have permission to use this endpoint." +} + +function downloadJson(exportJson, exportName){ + let dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(exportJson); + let downloadAnchorNode = document.createElement('a'); + downloadAnchorNode.setAttribute("href", dataStr); + downloadAnchorNode.setAttribute("download", exportName + ".json"); + document.body.appendChild(downloadAnchorNode); // required for firefox + downloadAnchorNode.click(); + downloadAnchorNode.remove(); +} + +function downloadObjectAsJson(exportObj, exportName){ + let dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(exportObj)); + let downloadAnchorNode = document.createElement('a'); + downloadAnchorNode.setAttribute("href", dataStr); + downloadAnchorNode.setAttribute("download", exportName + ".json"); + document.body.appendChild(downloadAnchorNode); // required for firefox + downloadAnchorNode.click(); + downloadAnchorNode.remove(); +} + +function getDate(date) { + let local = new Date(date); + local.setMinutes(date.getMinutes() - date.getTimezoneOffset()); + return local.toJSON().slice(0, 10); } \ No newline at end of file diff --git a/js/export.js b/js/export.js index e69de29..cf5aa16 100644 --- a/js/export.js +++ b/js/export.js @@ -0,0 +1,28 @@ +function backup_passky(){ + + if(sessionStorage.passwords == null || typeof(sessionStorage.passwords) == 'undefined'){ + window.location.href = 'login.html'; + return; + } + + let passwords = JSON.parse(sessionStorage.passwords); + for(let i = 0; i < passwords.length; i++) delete passwords[i]['id']; + + downloadObjectAsJson(passwords, "passky_" + getDate(new Date())); +} + +function export_passky(){ + + if(sessionStorage.passwords == null || typeof(sessionStorage.passwords) == 'undefined'){ + window.location.href = 'login.html'; + return; + } + + let passwords = JSON.parse(sessionStorage.passwords); + for(let i = 0; i < passwords.length; i++){ + delete passwords[i]['id']; + passwords[i]['password'] = CryptoJS.AES.decrypt(passwords[i]['password'], sessionStorage.password).toString(CryptoJS.enc.Utf8); + } + + downloadObjectAsJson(passwords, "passky_" + getDate(new Date())); +} \ No newline at end of file