import { useState, useEffect } from 'react' import { GetServerSideProps } from 'next' import { getServerSession } from 'next-auth/next' import Head from 'next/head' import Link from 'next/link' import { useRouter } from 'next/router' import { authOptions } from '../api/auth/[...nextauth]' import Layout from '@/components/layout' export default function ResetPassword() { const router = useRouter() const { token } = router.query const [password, setPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('') const [isLoading, setIsLoading] = useState(false) const [error, setError] = useState(null) const [success, setSuccess] = useState(false) useEffect(() => { if (router.isReady && !token) { setError('Invalid or missing reset token') } }, [router.isReady, token]) const validatePassword = (): string | null => { if (password.length < 8) { return 'Password must be at least 8 characters long' } const hasUpperCase = /[A-Z]/.test(password) const hasLowerCase = /[a-z]/.test(password) const hasNumbers = /\d/.test(password) if (!hasUpperCase || !hasLowerCase || !hasNumbers) { return 'Password must contain uppercase, lowercase, and numbers' } if (password !== confirmPassword) { return 'Passwords do not match' } return null } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setIsLoading(true) setError(null) const validationError = validatePassword() if (validationError) { setError(validationError) setIsLoading(false) return } try { const response = await fetch('/api/auth/reset-password', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token, password }), }) const data = await response.json() if (!response.ok) { setError(data.message || 'An error occurred') return } setSuccess(true) } catch (err) { setError('An unexpected error occurred') } finally { setIsLoading(false) } } if (success) { return ( Password Reset Successful | LocalGreenChain

Password Reset Successful!

Your password has been reset successfully. You can now sign in with your new password.

Sign in
) } return ( Reset Password | LocalGreenChain

Set new password

Enter your new password below.

{error && (
{error} {error.includes('Invalid') && ( )}
)}
setPassword(e.target.value)} className="mt-1 appearance-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-md focus:outline-none focus:ring-green-500 focus:border-green-500 sm:text-sm" placeholder="At least 8 characters" />

Must contain uppercase, lowercase, and numbers

setConfirmPassword(e.target.value)} className="mt-1 appearance-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-md focus:outline-none focus:ring-green-500 focus:border-green-500 sm:text-sm" placeholder="Confirm your password" />
) } export const getServerSideProps: GetServerSideProps = async (context) => { const session = await getServerSession(context.req, context.res, authOptions) if (session) { return { redirect: { destination: '/', permanent: false, }, } } return { props: {}, } }