import React, { useState } from 'react'; import api from '../utils/api'; import './Login.css'; import { Activity } from 'lucide-react'; interface LoginProps { onLogin: (token: string) => void; } const Login: React.FC = ({ onLogin }) => { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const [needsPasswordChange, setNeedsPasswordChange] = useState(false); const [newPassword, setNewPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [tempToken, setTempToken] = useState(''); const handleLoginSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(''); try { const response = await api.post('/auth/login', { username, password }); const { access_token, must_change_password } = response.data; if (must_change_password) { setTempToken(access_token); setNeedsPasswordChange(true); } else { localStorage.setItem('token', access_token); onLogin(access_token); } } catch (err: any) { setError(err.response?.data?.detail || 'Authentication failed'); } finally { setLoading(false); } }; const handleChangePasswordSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (newPassword !== confirmPassword) { setError('Passwords do not match'); return; } setLoading(true); setError(''); try { await api.post('/auth/change-password', { old_password: password, new_password: newPassword }, { headers: { Authorization: `Bearer ${tempToken}` } } ); // Re-authenticate to get a fresh token with must_change_password=false const response = await api.post('/auth/login', { username, password: newPassword }); const { access_token } = response.data; localStorage.setItem('token', access_token); onLogin(access_token); } catch (err: any) { setError(err.response?.data?.detail || 'Password change failed'); } finally { setLoading(false); } }; return (

DECNET

AUTHORIZED PERSONNEL ONLY

{!needsPasswordChange ? (
setUsername(e.target.value)} required />
setPassword(e.target.value)} required />
{error &&
{error}
}
) : (

MANDATORY SECURITY UPDATE

Please establish a new access key

setNewPassword(e.target.value)} required minLength={8} />
setConfirmPassword(e.target.value)} required minLength={8} />
{error &&
{error}
}
)}
SECURE PROTOCOL v1.0
); }; export default Login;