import { useState, useEffect } from 'react'; import { motion } from 'framer-motion'; import { User, Lock, Eye, EyeOff, ArrowRight, ShieldCheck, UserCircle2 } from 'lucide-react'; import { useNavigate } from 'react-router-dom'; // Import Assets import collegeLogo from '../assets/college-logo.png'; import foodCourtPosBg from '../assets/food-court-pos.png'; import ritLogo from '../assets/RIT_Logo.png'; const Login = () => { const [role, setRole] = useState<'manager' | 'master'>('manager'); const [showPassword, setShowPassword] = useState(false); const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const navigate = useNavigate(); // Ensure any previous session is completely wiped out when arriving at the login screen useEffect(() => { sessionStorage.removeItem('isLoggedIn'); sessionStorage.removeItem('userRole'); sessionStorage.removeItem('userPermissions'); localStorage.removeItem('systemUser'); }, []); const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); try { const response = await fetch('/api/system/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: username, password }) }); if (response.ok) { const user = await response.json(); // Strict Role Validation if ((user.role || '').toLowerCase() !== (role || '').toLowerCase()) { alert(`Access Denied: You are trying to login as ${(role || '').toUpperCase()}, but your credentials belong to a ${(user.role || '').toUpperCase()} account.`); return; } sessionStorage.setItem('isLoggedIn', 'true'); sessionStorage.setItem('userRole', (user.role || '').toLowerCase()); sessionStorage.setItem('userPermissions', JSON.stringify(user.permissions || [])); // Persist user profile + JWT token for authenticated API calls localStorage.setItem('systemUser', JSON.stringify(user)); // user object now includes `token` navigate('/store-dashboard'); } else { const error = await response.json().catch(() => ({ error: 'Invalid credentials' })); alert(error.error || 'Invalid credentials'); } } catch (err) { console.error('Login error:', err); alert('Network error - make sure backend is running'); } }; return (
© 2026 TILLO • SYSTEM PORTAL