/** * Admin Login JavaScript * Handles admin authentication and login form */ // Dynamic path detection const BASE_PATH = (() => { const path = window.location.pathname.replace(/\/$/, ''); // Remove trailing slash const pathParts = path.split('/').filter(part => part !== ''); // Remove empty parts console.log('Login - Current path:', path); console.log('Login - Path parts:', pathParts); // Find admin folder index const adminIndex = pathParts.indexOf('admin'); console.log('Login - Admin index:', adminIndex); if (adminIndex > 0) { // Return base path up to admin folder (excluding admin) const basePath = '/' + pathParts.slice(0, adminIndex).join('/'); console.log('Login - Detected BASE_PATH:', basePath); return basePath; } // Default to root if admin not found in path console.log('Login - Admin not found in path, using empty BASE_PATH'); return ''; })(); const ADMIN_BASE_PATH = BASE_PATH + '/admin'; console.log('Login - Final ADMIN_BASE_PATH:', ADMIN_BASE_PATH);// API Base URL const API_BASE = BASE_PATH + '/api'; document.addEventListener('DOMContentLoaded', function() { // Check if already logged in const token = localStorage.getItem('adminToken'); if (token) { // Verify token is still valid fetch(`${API_BASE}/auth/me`, { headers: { 'Authorization': `Bearer ${token}` } }) .then(response => response.json()) .then(data => { if (data.success && data.data.user.role === 'admin') { window.location.href = ADMIN_BASE_PATH + '/'; } else { localStorage.removeItem('adminToken'); } }) .catch(() => { localStorage.removeItem('adminToken'); }); } // Login form handler const loginForm = document.getElementById('loginForm'); if (loginForm) { loginForm.addEventListener('submit', handleLogin); } }); async function handleLogin(e) { e.preventDefault(); const loginButton = document.getElementById('loginButton'); const loginButtonText = document.getElementById('loginButtonText'); const loginSpinner = document.getElementById('loginSpinner'); const alertContainer = document.getElementById('alertContainer'); const email = document.getElementById('email').value.trim(); const password = document.getElementById('password').value; if (!email || !password) { showAlert('Please fill in all fields', 'danger'); return; } setLoading(true); clearAlerts(); try { const response = await fetch(`${API_BASE}/auth/login`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: email, password: password }) }); const data = await response.json(); if (response.ok && data.success) { // Check if user is admin if (data.data.user.role !== 'admin') { showAlert('Access denied. Admin privileges required.', 'danger'); setLoading(false); return; } // Store token and redirect localStorage.setItem('adminToken', data.data.access_token); showAlert('Login successful! Redirecting...', 'success'); setTimeout(() => { window.location.href = ADMIN_BASE_PATH + '/'; }, 1000); } else { showAlert(data.message || 'Login failed. Please check your credentials.', 'danger'); setLoading(false); } } catch (error) { console.error('Login error:', error); showAlert('Connection error. Please try again.', 'danger'); setLoading(false); } } // Helper Functions function setLoading(loading) { const loginButton = document.getElementById('loginButton'); const loginButtonText = document.getElementById('loginButtonText'); const loginSpinner = document.getElementById('loginSpinner'); if (loading) { loginButtonText.style.display = 'none'; loginSpinner.style.display = 'inline-block'; loginButton.disabled = true; } else { loginButtonText.style.display = 'inline-block'; loginSpinner.style.display = 'none'; loginButton.disabled = false; } } function showAlert(message, type = 'info') { const alertContainer = document.getElementById('alertContainer'); const alertDiv = document.createElement('div'); alertDiv.className = `alert alert-${type}`; alertDiv.innerHTML = ` ${message} `; alertContainer.appendChild(alertDiv); // Auto-remove success alerts if (type === 'success') { setTimeout(() => { alertDiv.remove(); }, 5000); } } function clearAlerts() { const alertContainer = document.getElementById('alertContainer'); alertContainer.innerHTML = ''; } function getAlertIcon(type) { const icons = { success: 'check-circle', danger: 'exclamation-triangle', warning: 'exclamation-circle', info: 'info-circle' }; return icons[type] || 'info-circle'; } function togglePassword() { const passwordField = document.getElementById('password'); const toggleIcon = document.getElementById('passwordToggleIcon'); if (passwordField.type === 'password') { passwordField.type = 'text'; toggleIcon.className = 'fas fa-eye-slash'; } else { passwordField.type = 'password'; toggleIcon.className = 'fas fa-eye'; } } // Demo login function function loginAsDemo() { const emailInput = document.getElementById('email'); const passwordInput = document.getElementById('password'); emailInput.value = 'admin@example.com'; passwordInput.value = 'admin123'; } // Go back to store function function goBackToStore() { window.location.href = BASE_PATH + '/'; }