From 8327dfb2a22dd1a3968bce7c17f3e8300aac5744 Mon Sep 17 00:00:00 2001 From: the-eagle16 Date: Mon, 22 Jun 2026 11:45:34 +0200 Subject: [PATCH] =?UTF-8?q?Anmeldefenster=20=C3=BCberarbeitet=20;=20Accoun?= =?UTF-8?q?tdaten=20k=C3=B6nnen=20=C3=BCber=20den=20Stift=20bearbeitet=20w?= =?UTF-8?q?erden=20;=20Texte=20bei=20Zahlungsmethoden=20aktualisiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- account.js | 360 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 335 insertions(+), 25 deletions(-) diff --git a/account.js b/account.js index 2b7781a..ebe4da7 100644 --- a/account.js +++ b/account.js @@ -19,15 +19,39 @@ function normalizeUser(user) { } return { + salutation: user.salutation || "", firstName: user.firstName || "", lastName: user.lastName || "", + birthday: user.birthday || "", + street: user.street || "", + houseNumber: user.houseNumber || "", + zip: user.zip || "", + city: user.city || "", + country: user.country || "Deutschland", email: user.email || "", - password: user.password || "", + passwordHash: user.passwordHash || (user.password ? hashPassword(user.password) : ""), orders: Array.isArray(user.orders) ? user.orders : [], paymentMethods: Array.isArray(user.paymentMethods) ? user.paymentMethods : [] }; } +function hashPassword(password) { + let hashA = 0xdeadbeef; + let hashB = 0x41c6ce57; + const text = String(password || ""); + + for (let index = 0; index < text.length; index += 1) { + const charCode = text.charCodeAt(index); + hashA = Math.imul(hashA ^ charCode, 2654435761); + hashB = Math.imul(hashB ^ charCode, 1597334677); + } + + hashA = Math.imul(hashA ^ (hashA >>> 16), 2246822507) ^ Math.imul(hashB ^ (hashB >>> 13), 3266489909); + hashB = Math.imul(hashB ^ (hashB >>> 16), 2246822507) ^ Math.imul(hashA ^ (hashA >>> 13), 3266489909); + + return `hash$${(hashB >>> 0).toString(16).padStart(8, "0")}${(hashA >>> 0).toString(16).padStart(8, "0")}`; +} + function escapeHtml(value) { return String(value || "") .replaceAll("&", "&") @@ -58,45 +82,56 @@ if (!Array.isArray(users)) { users = []; } users = users.map(normalizeUser).filter(Boolean); +persistUsers(); let currentUser = normalizeUser(readStorageJson("currentUser", null)); if (currentUser && currentUser.email) { const storedMatch = users.find((user) => user.email === currentUser.email); if (storedMatch) { currentUser = storedMatch; + persistCurrentUser(); } else { users.push(currentUser); persistUsers(); + persistCurrentUser(); } } function registerUser() { + if (!validateRegisterForm()) { + return; + } + + const salutation = document.getElementById("reg-salutation")?.value.trim() || ""; const firstName = document.getElementById("reg-firstname")?.value.trim() || ""; const lastName = document.getElementById("reg-lastname")?.value.trim() || ""; + const birthday = document.getElementById("reg-birthday")?.value.trim() || ""; + const street = document.getElementById("reg-street")?.value.trim() || ""; + const houseNumber = document.getElementById("reg-house-number")?.value.trim() || ""; + const zip = document.getElementById("reg-zip")?.value.trim() || ""; + const city = document.getElementById("reg-city")?.value.trim() || ""; + const country = document.getElementById("reg-country")?.value.trim() || ""; const email = (document.getElementById("reg-email")?.value.trim() || "").toLowerCase(); const password = document.getElementById("reg-password")?.value || ""; - if (!firstName || !lastName || !email || !password) { - alert("Bitte fuelle alle Felder aus."); - return; - } - - if (!email.includes("@")) { - alert("Bitte gib eine gueltige E-Mail-Adresse ein."); - return; - } - const existingUser = users.find((user) => user.email.toLowerCase() === email); if (existingUser) { - alert("E-Mail bereits registriert"); + setFieldError(document.getElementById("reg-email"), "Diese E-Mail ist bereits registriert."); return; } const newUser = { + salutation, firstName, lastName, + birthday, + street, + houseNumber, + zip, + city, + country, email, - password, + passwordHash: hashPassword(password), orders: [], paymentMethods: [] }; @@ -107,22 +142,28 @@ function registerUser() { persistUsers(); persistCurrentUser(); - alert("Registrierung erfolgreich"); document.getElementById("register-modal")?.classList.add("hidden"); openAccountDashboard(); } function loginUser() { + if (!validateLoginForm()) { + return; + } + const email = (document.getElementById("login-email")?.value.trim() || "").toLowerCase(); const password = document.getElementById("login-password")?.value || ""; + const passwordHash = hashPassword(password); const user = users.find( - (entry) => entry.email.toLowerCase() === email && entry.password === password + (entry) => entry.email.toLowerCase() === email && entry.passwordHash === passwordHash ); if (!user) { document.getElementById("login-error")?.classList.remove("hidden"); + setFieldError(document.getElementById("login-email"), "E-Mail oder Passwort stimmen nicht."); + setFieldError(document.getElementById("login-password"), "E-Mail oder Passwort stimmen nicht."); return; } @@ -146,7 +187,15 @@ function openAccountDashboard() {