import React, { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import { Button } from '../components/ui/button'; import { Input } from '../components/ui/input'; import { Label } from '../components/ui/label'; import { Card } from '../components/ui/card'; import { toast } from 'sonner'; import Navbar from '../components/Navbar'; import { ArrowRight, Lock, AlertTriangle } from 'lucide-react'; const ChangePasswordRequired = () => { const navigate = useNavigate(); const { user, changePassword, logout } = useAuth(); const [loading, setLoading] = useState(false); const [formData, setFormData] = useState({ currentPassword: '', newPassword: '', confirmPassword: '' }); useEffect(() => { // If user is not logged in or doesn't have force_password_change, redirect if (!user) { navigate('/login'); } else if (!user.force_password_change) { // User doesn't need to change password, redirect to appropriate page if (user.role === 'admin') { navigate('/admin'); } else { navigate('/dashboard'); } } }, [user, navigate]); const handleInputChange = (e) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleSubmit = async (e) => { e.preventDefault(); if (formData.newPassword.length < 6) { toast.error('New password must be at least 6 characters'); return; } if (formData.newPassword !== formData.confirmPassword) { toast.error('New passwords do not match'); return; } setLoading(true); try { await changePassword(formData.currentPassword, formData.newPassword); toast.success('Password changed successfully! Redirecting...'); // Wait a moment then redirect to dashboard setTimeout(() => { if (user.role === 'admin') { navigate('/admin'); } else { navigate('/dashboard'); } }, 1500); } catch (error) { const errorMessage = error.response?.data?.detail || 'Failed to change password'; toast.error(errorMessage); } finally { setLoading(false); } }; const handleLogout = () => { logout(); navigate('/login'); }; if (!user || !user.force_password_change) { return null; } return (
Your password was reset by an administrator. Please create a new password to continue.