import { retrieveData } from "./storage.js"; import sha256 from "./sha256.min.js"; import XORCipher from "./xorc.js"; import getBrowserFingerprint from "./identify.js" export const passwordHash = { toString: () => { let fp = getBrowserFingerprint( { hardwareOnly: true } ); let data; try { data = window.sessionStorage.getItem(sha256(fp)); } catch (e) { return "none"; } if (data === null) return "none"; return XORCipher.decode(fp, data); }, set: (pw) => { let fp = getBrowserFingerprint( { hardwareOnly: true } ); window.sessionStorage.setItem(sha256(fp), XORCipher.encode(fp, pw)); } } function setPassword() { let x = document.getElementById("loginForm"); let pw = x.elements[0].value; if (pw != "" || pw !== "undefined") { let pwOld = pw; passwordHash.set(sha256(pw)); let templateFiles = retrieveData("templateFiles"); if (templateFiles != "") { try { JSON.parse(templateFiles); } catch (e) { document.getElementById("wrongPWAlert").style.display = "block"; const alertTimeout = setTimeout(() => { document.getElementById("wrongPWAlert").style.display = "none"; }, 5000); passwordHash.set(pwOld); x.elements[0].value = ""; return; } } //user logged in document.getElementById("login").style.display = "none"; window.sessionStorage.setItem(sha256("verified"), XORCipher.encode(sha256("passwordHash"), passwordHash)); } } export function getUsrId() { const fingerprint = getBrowserFingerprint( { hardwareOnly: true } ); return cyrb53(fingerprint + passwordHash); } const cyrb53 = (str, seed = 21) => { let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed; for (let i = 0, ch; i < str.length; i++) { ch = str.charCodeAt(i); h1 = Math.imul(h1 ^ ch, 2654435761); h2 = Math.imul(h2 ^ ch, 1597334677); } h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909); h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909); return 4294967296 * (2097151 & h2) + (h1 >>> 0); }; export default setPassword;