import { use, useEffect, useState } from 'react'; import Layout from '../../components/layout'; import axiosInstance from "../../src/axiosSecure"; import common from '../../src/helpers/common'; import { EventLogType } from '@prisma/client'; import { useRouter } from "next/router"; export default function ResetPassword(req, res) { const [email, setEmail] = useState(''); const [message, setMessage] = useState(''); const [resetToken, setResetToken] = useState(req.query?.resetToken || ''); const [isConfirmed, setIsConfirmed] = useState(false); const router = useRouter(); useEffect(async () => { if (resetToken) { const prisma = common.getPrismaClient(); let eventLog = await prisma.eventLog.findUnique({ where: { content: resetToken, type: EventLogType.PasswordResetEmailConfirmed, date: { gt: new Date(new Date().getTime() - 24 * 60 * 60 * 1000) //24 hours } } }); if (eventLog) { setIsConfirmed(true); } } }, [resetToken]); const handleResetRequest = async (event) => { event.preventDefault(); // Call your email API endpoint here try { const response = await axiosInstance.post('/api/email?action=account&emailaction=resetPassword', { email }, { headers: { 'Content-Type': 'application/json' } }); if (response.data.message) { setMessage(response.data.message); } else { if (response.ok) { setMessage('Провери твоя имейл за инструкции как да промениш паролата си.'); } else { if (response.error) { setMessage(response.error); } } } } catch (error) { setMessage(error.message); } }; const setNewPassword = async (event) => { event.preventDefault(); try { const prisma = common.getPrismaClient(); const user = await prisma.user.findUnique({ where: { email } }); if (!user) { throw new Error('Няма потребител с този имейл.'); } const passHash = await crypto.hash(event.target.newPassword.value, 10); await prisma.user.update({ where: { email }, data: { passwordHashLocalAccount: passHash } }); setMessage('Паролата беше успешно променена.'); router.push('/auth/signin'); } catch (error) { setMessage(error.message); } } return (

Променете паролата си

{!isConfirmed &&
setEmail(e.target.value)} className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" />
} {isConfirmed &&
setNewPassword(e.target.value)} className="mt-1 block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm" />
}
{message &&
{message}
}
); }