(function () { const AUTH_STORAGE_KEY = "loremIpsumAuth"; function readAuth() { const raw = localStorage.getItem(AUTH_STORAGE_KEY); if (!raw) { return null; } try { const parsed = JSON.parse(raw); if (!parsed.username || !parsed.password) { return null; } return parsed; } catch { return null; } } function saveAuth(username, password) { localStorage.setItem( AUTH_STORAGE_KEY, JSON.stringify({ username: username, password: password }), ); } function clearAuth() { localStorage.removeItem(AUTH_STORAGE_KEY); } function updateHeaderUsername() { const usernameDisplay = document.getElementById("username-display"); const navbarLogin = document.getElementById("navbar-login"); const auth = readAuth(); if (usernameDisplay) { usernameDisplay.textContent = auth ? "User: " + auth.username : "User: Guest"; } if (navbarLogin) { navbarLogin.textContent = auth ? auth.username : "Login / Registrieren"; } } function setFeedback(message, type) { const feedback = document.getElementById("auth-feedback"); if (!feedback) { return; } feedback.className = "alert alert-" + type; feedback.textContent = message; feedback.classList.remove("d-none"); } function updateSessionBox() { const sessionText = document.getElementById("current-session-text"); const logoutButton = document.getElementById("logout-button"); const deleteAccountButton = document.getElementById("delete-account-button"); const currentSessionBox = document.getElementById("current-session-box"); const authFormsRow = document.getElementById("auth-forms-row"); if (!sessionText || !logoutButton || !deleteAccountButton || !currentSessionBox || !authFormsRow) { return; } const auth = readAuth(); if (auth) { sessionText.textContent = "Eingeloggt als " + auth.username + "."; logoutButton.disabled = false; deleteAccountButton.disabled = false; currentSessionBox.classList.remove("d-none"); authFormsRow.classList.add("d-none"); } else { sessionText.textContent = "Nicht eingeloggt."; logoutButton.disabled = true; deleteAccountButton.disabled = true; currentSessionBox.classList.add("d-none"); authFormsRow.classList.remove("d-none"); } } function getUserService() { if (!window.config || !window.UserService) { return null; } return new window.UserService(window.config); } async function handleLoginSubmit(event) { event.preventDefault(); const userService = getUserService(); if (!userService) { setFeedback("User-Service konnte nicht geladen werden.", "danger"); return; } const usernameInput = document.getElementById("login-username"); const passwordInput = document.getElementById("login-password"); const username = usernameInput.value.trim(); const password = passwordInput.value.trim(); if (!username || !password) { setFeedback("Bitte Username und Passwort eingeben.", "warning"); return; } const result = await userService.getUser(username, password); if (result.ok) { saveAuth(username, password); setFeedback("Login erfolgreich.", "success"); updateSessionBox(); updateHeaderUsername(); setTimeout(function() { if (typeof window.loadPage === "function") { window.loadPage("home", "nav-home"); } }, 500); return; } if (result.status === 401) { setFeedback("Login fehlgeschlagen: Username oder Passwort ist falsch.", "danger"); return; } setFeedback("Login fehlgeschlagen (Status " + result.status + ").", "danger"); } async function handleRegisterSubmit(event) { event.preventDefault(); const userService = getUserService(); if (!userService) { setFeedback("User-Service konnte nicht geladen werden.", "danger"); return; } const usernameInput = document.getElementById("register-username"); const username = usernameInput.value.trim(); if (!username) { setFeedback("Bitte einen Username eingeben.", "warning"); return; } const result = await userService.postUser(username); if (result.ok && result.body) { const createdName = result.body.name || username; const createdPassword = result.body.password || ""; saveAuth(createdName, createdPassword); updateSessionBox(); updateHeaderUsername(); // Modal mit Daten füllen und anzeigen const modalUsername = document.getElementById("modal-username"); const modalPassword = document.getElementById("modal-password"); if (modalUsername) modalUsername.textContent = createdName; if (modalPassword) modalPassword.textContent = createdPassword; const passwordModalElement = document.getElementById("password-modal"); if (passwordModalElement) { const passwordModal = new window.bootstrap.Modal(passwordModalElement); // Listener für Modals-Schließen: zur Startseite navigieren passwordModalElement.addEventListener("hidden.bs.modal", function handleClose() { if (typeof window.loadPage === "function") { window.loadPage("home", "nav-home"); } passwordModalElement.removeEventListener("hidden.bs.modal", handleClose); }); passwordModal.show(); } else { // Fallback wenn Modal nicht gefunden setFeedback( "Account erstellt. Username: " + createdName + ", Passwort: " + createdPassword, "success", ); setTimeout(function() { if (typeof window.loadPage === "function") { window.loadPage("home", "nav-home"); } }, 1500); } const loginUsernameInput = document.getElementById("login-username"); const loginPasswordInput = document.getElementById("login-password"); if (loginUsernameInput && loginPasswordInput) { loginUsernameInput.value = createdName; loginPasswordInput.value = createdPassword; } return; } if (result.status === 400) { const errorMessage = result.body && result.body.message ? result.body.message : "Dieser Username existiert bereits."; setFeedback(errorMessage, "danger"); return; } setFeedback( "Account konnte nicht erstellt werden (Status " + result.status + ").", "danger", ); } function handleLogout() { clearAuth(); setFeedback("Du wurdest ausgeloggt.", "info"); updateSessionBox(); updateHeaderUsername(); } async function handleDeleteAccount() { const auth = readAuth(); if (!auth) { setFeedback("Du bist nicht eingeloggt.", "warning"); return; } const wantsDelete = window.confirm( "Möchtest du den Account \"" + auth.username + "\" wirklich löschen?", ); if (!wantsDelete) { return; } const userService = getUserService(); if (!userService) { setFeedback("User-Service konnte nicht geladen werden.", "danger"); return; } const result = await userService.deleteUser(auth.username, auth.password); if (result.ok) { clearAuth(); updateSessionBox(); updateHeaderUsername(); setFeedback("Account wurde gelöscht.", "success"); return; } if (result.status === 401) { setFeedback("Account konnte nicht gelöscht werden: nicht autorisiert.", "danger"); return; } setFeedback( "Account konnte nicht gelöscht werden (Status " + result.status + ").", "danger", ); } function initLoginPage() { const loginForm = document.getElementById("login-form"); const registerForm = document.getElementById("register-form"); const logoutButton = document.getElementById("logout-button"); const deleteAccountButton = document.getElementById("delete-account-button"); if (!loginForm || !registerForm || !logoutButton || !deleteAccountButton) { return; } loginForm.addEventListener("submit", handleLoginSubmit); registerForm.addEventListener("submit", handleRegisterSubmit); logoutButton.addEventListener("click", handleLogout); deleteAccountButton.addEventListener("click", handleDeleteAccount); updateSessionBox(); updateHeaderUsername(); } window.initLoginPage = initLoginPage; window.AppAuth = { getAuth: readAuth, clearAuth: clearAuth, }; document.addEventListener("DOMContentLoaded", updateHeaderUsername); })();