import XORCipher from "./xorc.js"; import sha256 from "./sha256.min.js"; import { getUsrId, passwordHash } from "./scripts.js"; function createStorageObj() { let x = document.getElementById("mainFormObj"); let dataArray = []; if (x == null) { return; } for (let i = 0; i < x.length; i++) { dataArray.push({ value: x.elements[i].value, name: x.elements[i].name, }); } //console.log(this, dataArray); let userFileNameField = document.getElementById("userFileName"); let userFileName = userFileNameField.value; let userFileNamePH = userFileNameField.getAttribute("placeholder"); if (userFileName.length != 0) { activeState.fileName = userFileName.replace; //clear old data as file switches to new filename if (userFileNamePH.length != 0) { clearData(userFileNamePH); popFromTemplateFiles(userFileNamePH); } } else if (userFileNamePH.length != 0) { activeState.fileName = userFileNamePH; } storeData("userInput", JSON.stringify(dataArray)); } function storeData(name, data) { //setCookie(name, btoa(data), 7); if (name == "userInput") { name = getFileName(); } if (name == "userInputForce") { name = "userInput"; } let lT = activeState.loadedTemplate; let key = sha256(name + "_m21_" + lT); if (name == "templateFiles") { key = sha256(name + "_m21_"); } window.localStorage.setItem(key, obfuscate(data)); } function retrieveData(type, template = "none") { if (type == "userInput") { let tF = JSON.parse(retrieveData("templateFiles")); if (tF == null) { return ""; } else { type = tF[tF.length - 1].fileName; } } if (type == "userInputForce") { type = "userInput"; } let cdata; if (template == "none") { let lT = activeState.loadedTemplate; let key = sha256(type + "_m21_" + lT); if (type == "templateFiles") { key = sha256(type + "_m21_"); } cdata = window.localStorage.getItem(key); } else { let key = sha256(type + "_m21_" + template); cdata = window.localStorage.getItem(key); } if (cdata != null) { return obfuscate(cdata, false); } else { return "[]"; } } function clearData(type, template = "none") { let lT; let key; if (template == "none") { lT = activeState.loadedTemplate; key = sha256(type + "_m21_" + lT); if (type == "templateFiles") { key = sha256(type + "_m21_"); } } else { lT = template; key = sha256(type + "_m21_" + template); } window.localStorage.removeItem(key); } function getFileName() { let currentFileName = activeState.fileName; let lT = activeState.loadedTemplate; if (currentFileName == "none" || currentFileName == "") { let date = new Date(); let current_hour = date.getHours(); current_hour = current_hour <= 9 ? "0" + current_hour : current_hour; let current_minute = date.getMinutes(); current_minute = current_minute <= 9 ? "0" + current_minute : current_minute; let current_month = date.getMonth() + 1; current_month = current_month <= 9 ? "0" + current_month : current_month; let current_year = date.getDate(); current_year = current_year <= 9 ? "0" + current_year : current_year; let current_time = current_hour + ":" + current_minute; let current_date = current_year + "." + current_month; currentFileName = current_time + "_" + current_date + " " + lT; //console.log(currentFileName); } let tF = null; try { tF = JSON.parse(retrieveData("templateFiles")); } catch(e) { tF = null; } if (tF != null) { for (let tFi of tF) { if (tFi.fileName == currentFileName) {return currentFileName}; } tF.push({ fileName: currentFileName, template: lT }); } else { tF = [{ fileName: currentFileName, template: lT }]; } storeData("templateFiles", JSON.stringify(tF)); activeState.fileName = currentFileName; return currentFileName; } function obfuscate(data, mode = true) { if (mode) { return XORCipher.encode(sha256(passwordHash), data); } else { return XORCipher.decode(sha256(passwordHash), data); } } function popFromTemplateFiles(fileName) { let tF = JSON.parse(retrieveData("templateFiles")); let newArray = []; for (let obj of tF) { if (obj.fileName != fileName) { newArray.push(obj); } } storeData("templateFiles", JSON.stringify(newArray)); } function createBookShelf() { let tF = JSON.parse(retrieveData("templateFiles")); let bookShelf = {}; let date = new Date(); let current_hour = date.getHours(); current_hour = current_hour <= 9 ? "0" + current_hour : current_hour; let current_minute = date.getMinutes(); current_minute = current_minute <= 9 ? "0" + current_minute : current_minute; let current_month = date.getMonth() + 1; current_month = current_month <= 9 ? "0" + current_month : current_month; let current_year = date.getDate(); current_year = current_year <= 9 ? "0" + current_year : current_year; let current_time = current_hour + ":" + current_minute; let current_date = current_year + "." + current_month; let saveFileName = current_time + "_" + current_date; if (tF != null) { bookShelf[0] = {name: "hash", data: getUsrId(), ts: saveFileName}; let i = 1; for (let tFi of tF) { let data = retrieveData(tFi.fileName, tFi.template); bookShelf[i] = {}; bookShelf[i].name = tFi.fileName + "_m21_" + tFi.template; if (activeState.localOnly) { bookShelf[i].data = data; } else { bookShelf[i].data = obfuscate(data); } i++; } } return bookShelf; } function importBookShelf() { localStorage.clear() var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) { if (this.responseText == "none") { console.log("no files saved on server"); } else { let respText = decodeURIComponent(this.responseText); let mainArray = JSON.parse(respText); let templateFilesArray = []; for (let file of mainArray) { if (file.name == "hash") continue; window.localStorage.setItem(sha256(file.name), file.data); templateFilesArray.push({ fileName: file.name.split("_m21_")[0], template: file.name.split("_m21_")[1] }); } window.localStorage.setItem(sha256("templateFiles-"), obfuscate(JSON.stringify(templateFilesArray))); } } }; xhttp.open("GET", "php/?getStoredFiles="+getUsrId(), true); xhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8'); xhttp.send(); } export { createStorageObj, storeData, retrieveData, clearData, getFileName, createBookShelf, importBookShelf};