templateGen/js/9.9.6/storage.js
2023-10-14 17:21:05 +02:00

226 lines
6.8 KiB
JavaScript

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};