diff --git a/js/2.0.1/evts.js b/js/2.0.1/evts.js index e452c7d..4970988 100644 --- a/js/2.0.1/evts.js +++ b/js/2.0.1/evts.js @@ -298,6 +298,18 @@ function resetPage() { sidebarDiv.replaceWith(activeState.orgPage.sidebar); } +function wrongPwAlert() { + let wrongPWAlert = document.getElementById("wrongPWAlert"); + wrongPWAlert.style.display = "block"; + wrongPWAlert.addEventListener("click", (e) => { + if (e.target && e.target.tagName === "A") { + clearStorage(); + document.getElementById("wrongPWAlert").innerHTML = + "

all files cleared - set new password

"; + } + }); +} + export { hideMenus, showMenu, @@ -311,4 +323,5 @@ export { resetNavBar, printVersion, resetPage, + wrongPwAlert }; diff --git a/js/2.0.1/init.js b/js/2.0.1/init.js index 139786e..2d3690b 100644 --- a/js/2.0.1/init.js +++ b/js/2.0.1/init.js @@ -33,6 +33,7 @@ window.activeState = { notifierPause: 1, persistentStorage: "false", enablePell: "false", + debug: "false" }, templates: [], templateObjectsPurified: [], diff --git a/js/2.0.1/scripts.js b/js/2.0.1/scripts.js index bb1b6d3..3b1fa82 100644 --- a/js/2.0.1/scripts.js +++ b/js/2.0.1/scripts.js @@ -1,7 +1,8 @@ -import { clearStorage, createStorageObj, retrieveData } from "./storage.js"; +import { createStorageObj, retrieveData } from "./storage.js"; import sha256 from "./sha256.min.js"; import XORCipher from "./xorc.js"; import getBrowserFingerprint from "./identify.js" +import { wrongPwAlert } from "./evts.js"; export const passwordHash = { name: cyrb53("m21_"+getBrowserFingerprint( { hardwareOnly: true } )), @@ -13,32 +14,25 @@ export const passwordHash = { }, set: function (pw) { if (pw == "") return; - activeState.sessionToken = XORCipher.encode(this.name, pw); + activeState.sessionToken = XORCipher.encode(this.name, sha256(pw)); }, initHash: function () { //check if cookie exists - if (getCookie(sha256(this.name)) != null) { - if (getCookie(sha256(this.name)) != "") { - this.set(XORCipher.decode(sha256(this.name), getCookie(sha256(this.name)))); + if (getCookie(this.name) != null) { + if (getCookie(this.name) != "") { + this.set(XORCipher.decode(this.name, getCookie(this.name))); } } - let verifiedStatus = false; - let tF = retrieveData("templateFiles"); - if (tF != null) {verifiedStatus = true} - - if (verifiedStatus == true) { + if (retrieveData("templateFiles") != null) { //set user id - activeState.userId = getUsrId(); - setCookie(sha256(this.name), XORCipher.encode(sha256(this.name), this), 10); + activeState.userId = passwordHash.name; + setCookie(this.name, XORCipher.encode(this.name, this), 10); } }, verify: function () { if (passwordHash == "") return false; - let verifiedStatus = false; - let tF = retrieveData("templateFiles"); - if (tF != null) verifiedStatus = true - return verifiedStatus; + return (retrieveData("templateFiles") != null) ? true : false; } } @@ -47,7 +41,7 @@ function setPassword() { let pw = sanitize(x.elements[0].value); if (pw != "" || pw !== "undefined") { - passwordHash.set(sha256(pw)); + passwordHash.set(pw); let tF = retrieveData("templateFiles"); if (tF == null) { wrongPwAlert(); @@ -63,25 +57,13 @@ function setPassword() { if (tF == null || tF.length == 0) { activeState.settings.persistentStorage = "false"; } - + activeState.userId = passwordHash.name; document.getElementById("login").style.display = "none"; - setCookie(sha256(passwordHash.name), XORCipher.encode(sha256(passwordHash.name), passwordHash), 10) + setCookie(passwordHash.name, XORCipher.encode(passwordHash.name, passwordHash), 10) } } -function wrongPwAlert() { - let wrongPWAlert = document.getElementById("wrongPWAlert"); - wrongPWAlert.style.display = "block"; - wrongPWAlert.addEventListener("click", (e) => { - if (e.target && e.target.tagName === "A") { - clearStorage(); - document.getElementById("wrongPWAlert").innerHTML = - "

all files cleared - set new password

"; - } - }); -} - -function cyrb53(str, seed = 21) { +export function cyrb53(str, seed = 21) { let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed; for (let i = 0, ch; i < str.length; i++) { @@ -96,11 +78,6 @@ function cyrb53(str, seed = 21) { return 4294967296 * (2097151 & h2) + (h1 >>> 0); } -function getUsrId() { - const fingerprint = getBrowserFingerprint( { hardwareOnly: true } ); - return cyrb53(fingerprint + passwordHash); -} - function setCookie(cname, cvalue, exdays) { const d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); @@ -124,9 +101,9 @@ function getCookie(cname) { } export function logout() { - let id = sha256(passwordHash.name); + let id = passwordHash.name; activeState.sessionToken = ""; - setCookie(sha256(passwordHash.name), "", 10); + setCookie(passwordHash.name, "", 10); document.cookie = id + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; document.getElementById("passwordField").value = ""; document.getElementById("login").style.display = "block"; diff --git a/js/2.0.1/storage.js b/js/2.0.1/storage.js index fb9b533..de03dbe 100644 --- a/js/2.0.1/storage.js +++ b/js/2.0.1/storage.js @@ -1,12 +1,21 @@ import XORCipher from "./xorc.js"; import sha256 from "./sha256.min.js"; -import { getCurrentDate, passwordHash, sanitize } from "./scripts.js"; +import { cyrb53, getCurrentDate, passwordHash, sanitize } from "./scripts.js"; const store = { - getItem: function (key) {return getStor().getItem(sha256(key+activeState.userId))}, - setItem: function (key, data) {getStor().setItem(sha256(key+activeState.userId), data)}, - removeItem: function (key) {getStor().removeItem(sha256(key+activeState.userId))}, - clear: function () {getStor().clear()}, + getItem: function (key) { + return debug("GET", key, getStor().getItem(sha256(key + activeState.userId))); + }, + setItem: function (key, data) { + debug("SET", key, "setItem: "+data); + getStor().setItem(sha256(key + activeState.userId), data); + }, + removeItem: function (key) { + getStor().removeItem(sha256(key + activeState.userId)); + }, + clear: function () { + getStor().clear(); + }, }; const tempStore = { @@ -32,6 +41,17 @@ function getStor() { } } +function debug(mode, key, data) { + if (activeState.settings.debug == "false") return data; + console.log({ + mode: mode, + key: key, + data: data.substring(0,10), + persistent: activeState.settings.persistentStorage + }); + return data; +} + function createStorageObj() { let x = document.getElementById("mainFormObj"); let dataArray = []; @@ -75,9 +95,9 @@ function storeData(name, data) { name = "userInput"; } let lT = activeState.loadedTemplate; - let key = sha256(name + "_m21_" + lT); + let key = name + "_m21_" + lT; if (name == "templateFiles") { - key = sha256(name + "_m21_" + activeState.userId); + key = name + "_m21_" + activeState.userId; } store.setItem(key, obfuscate(data)); } @@ -99,12 +119,12 @@ function retrieveData(name, template = "none") { let key; if (template == "none") { let lT = activeState.loadedTemplate; - key = sha256(name + "_m21_" + lT); + key = name + "_m21_" + lT; if (name == "templateFiles") { - key = sha256(name + "_m21_"+activeState.userId); + key = name + "_m21_" + activeState.userId; } } else { - key = sha256(name + "_m21_" + template); + key = name + "_m21_" + template; } cdata = store.getItem(key); @@ -127,13 +147,13 @@ function clearData(name, template = "none") { let key; if (template == "none") { lT = activeState.loadedTemplate; - key = sha256(name + "_m21_" + lT); + key = name + "_m21_" + lT; if (name == "templateFiles") { - key = sha256(name + "_m21_"+activeState.userId); + key = name + "_m21_" + activeState.userId; } } else { lT = template; - key = sha256(name + "_m21_" + template); + key = name + "_m21_" + template; } store.removeItem(key); } @@ -151,7 +171,7 @@ function getFileName(ref = "none") { const metadata = { ts_create: getCurrentDate(), ts_save: "", - id: sha256(currentFileName), + id: cyrb53(currentFileName), }; if (tF.length != 0) { @@ -178,11 +198,11 @@ function getFileName(ref = "none") { } function obfuscate(data, mode = true) { - if (data == null | data == "") return ""; + if ((data == null) | (data == "")) return ""; if (mode) { - return XORCipher.encode(sha256(passwordHash), data); + return XORCipher.encode(passwordHash, data); } else { - return XORCipher.decode(sha256(passwordHash), data); + return XORCipher.decode(passwordHash, data); } } @@ -235,14 +255,14 @@ function importBookShelf() { let templateFilesArray = []; for (let file of mainArray) { if (file.name == "hash") continue; - store.setItem(sha256(file.name), file.data); + store.setItem(file.name, file.data); templateFilesArray.push({ fileName: file.name.split("_m21_")[0], template: file.name.split("_m21_")[1], }); } store.setItem( - sha256("templateFiles_m21_"+activeState.userId), + "templateFiles_m21_" + activeState.userId, obfuscate(JSON.stringify(templateFilesArray)) ); } @@ -257,17 +277,21 @@ function importBookShelf() { } function storeSettings(data, get = false) { - let key = sha256("settings_m21_"+activeState.userId); + let key = "settings_m21_" + activeState.userId; if (get) { let cdata = ""; - if (data == "getInit") {activeState.settings.persistentStorage = "true"} + if (data == "getInit") { + activeState.settings.persistentStorage = "true"; + } try { cdata = JSON.parse(obfuscate(store.getItem(key), false)); } catch (e) { cdata = ""; } - if (data == "getInit") {activeState.settings.persistentStorage = "false"}; + if (data == "getInit") { + activeState.settings.persistentStorage = "false"; + } return cdata; } else { store.setItem(key, obfuscate(JSON.stringify(data))); @@ -287,5 +311,5 @@ export { createBookShelf, importBookShelf, storeSettings, - clearStorage + clearStorage, };