// Shared Authentication Utility for Admin Panel // Include this file in all admin pages to handle authentication // Global authentication state window.adminAuth = { user: null, isAuthenticated: false, }; // Check authentication and redirect if needed - attach to window window.checkAuth = async function () { try { const response = await fetch("/api/admin/session", { credentials: "include", headers: { Accept: "application/json", }, }); if (!response.ok) { window.redirectToLogin(); return false; } const data = await response.json(); if (!data.authenticated) { window.redirectToLogin(); return false; } // Store user data window.adminAuth.user = data.user; window.adminAuth.isAuthenticated = true; // Initialize mobile menu after auth check window.initMobileMenu(); return true; } catch (error) { // Only log in development if (window.location.hostname === "localhost") { console.error("Authentication check failed:", error); } window.redirectToLogin(); return false; } }; // Redirect to login page window.redirectToLogin = function () { if (window.location.pathname !== "/admin/login.html") { window.location.href = "/admin/login.html"; } }; // Initialize mobile menu toggle window.initMobileMenu = function () { // Check if mobile menu button exists let menuToggle = document.getElementById("mobileMenuToggle"); if (!menuToggle && window.innerWidth <= 768) { // Create mobile menu button menuToggle = document.createElement("button"); menuToggle.id = "mobileMenuToggle"; menuToggle.className = "mobile-menu-toggle"; menuToggle.setAttribute("aria-label", "Toggle navigation menu"); menuToggle.setAttribute("aria-expanded", "false"); menuToggle.innerHTML = ''; document.body.appendChild(menuToggle); } if (menuToggle) { menuToggle.addEventListener("click", function () { const sidebar = document.querySelector(".sidebar"); if (sidebar) { const isActive = sidebar.classList.toggle("active"); this.setAttribute("aria-expanded", isActive ? "true" : "false"); this.innerHTML = isActive ? '' : ''; } }); // Close sidebar when clicking outside on mobile document.addEventListener("click", function (event) { const sidebar = document.querySelector(".sidebar"); const menuToggle = document.getElementById("mobileMenuToggle"); if (sidebar && menuToggle && window.innerWidth <= 768) { if ( !sidebar.contains(event.target) && event.target !== menuToggle && !menuToggle.contains(event.target) ) { if (sidebar.classList.contains("active")) { sidebar.classList.remove("active"); menuToggle.setAttribute("aria-expanded", "false"); menuToggle.innerHTML = ''; } } } }); // Close menu on link click (mobile) const sidebarLinks = document.querySelectorAll(".sidebar-menu a"); sidebarLinks.forEach((link) => { link.addEventListener("click", function () { if (window.innerWidth <= 768) { const sidebar = document.querySelector(".sidebar"); if (sidebar && sidebar.classList.contains("active")) { sidebar.classList.remove("active"); if (menuToggle) { menuToggle.setAttribute("aria-expanded", "false"); menuToggle.innerHTML = ''; } } } }); }); } // Handle window resize let resizeTimer; window.addEventListener("resize", function () { clearTimeout(resizeTimer); resizeTimer = setTimeout(function () { if (window.innerWidth > 768) { const sidebar = document.querySelector(".sidebar"); if (sidebar) { sidebar.classList.remove("active"); } if (menuToggle) { menuToggle.setAttribute("aria-expanded", "false"); menuToggle.innerHTML = ''; } } }, 250); }); }; // Custom logout confirmation modal window.showLogoutConfirm = function (onConfirm) { // Create modal backdrop const backdrop = document.createElement("div"); backdrop.style.cssText = ` position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); z-index: 10000; display: flex; align-items: center; justify-content: center; animation: fadeIn 0.2s ease; `; // Create modal const modal = document.createElement("div"); modal.style.cssText = ` background: white; border-radius: 12px; padding: 30px; max-width: 400px; width: 90%; box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3); animation: slideIn 0.3s ease; `; modal.innerHTML = `
Are you sure you want to logout?