289 lines
8.5 KiB
JavaScript
289 lines
8.5 KiB
JavaScript
(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);
|
|
})();
|