Add reset password page

This commit is contained in:
Ephraim Atta-Duncan
2023-06-05 14:17:45 +00:00
parent 66b529a841
commit 8dc9c9d72d
5 changed files with 173 additions and 4 deletions

View File

@ -0,0 +1,42 @@
import { NextApiRequest, NextApiResponse } from "next";
import { sendResetPassword } from "@documenso/lib/mail";
import { defaultHandler, defaultResponder } from "@documenso/lib/server";
import prisma from "@documenso/prisma";
import crypto from "crypto";
async function postHandler(req: NextApiRequest, res: NextApiResponse) {
const { email } = req.body;
const cleanEmail = email.toLowerCase();
if (!cleanEmail || !cleanEmail.includes("@")) {
res.status(422).json({ message: "Invalid email" });
return;
}
const user = await prisma.user.findFirst({
where: {
email: cleanEmail,
},
});
if (!user) {
return res.status(400).json({ message: "No user found with this email." });
}
const token = crypto.randomBytes(64).toString("hex");
const passwordResetToken = await prisma.passwordResetToken.create({
data: {
token,
userId: user.id,
},
});
await sendResetPassword(user, passwordResetToken.token);
res.status(201).end();
}
export default defaultHandler({
POST: Promise.resolve({ default: defaultResponder(postHandler) }),
});

View File

@ -0,0 +1,34 @@
import Head from "next/head";
import { getUserFromToken } from "@documenso/lib/server";
import ResetPassword from "../../components/reset-password";
export default function ResetPasswordPage(props: any) {
return (
<>
<Head>
<title>Reset Password | Documenso</title>
</Head>
<ResetPassword allowSignup={props.ALLOW_SIGNUP}></ResetPassword>
</>
);
}
export async function getServerSideProps(context: any) {
const user = await getUserFromToken(context.req, context.res);
if (user)
return {
redirect: {
source: "/login",
destination: "/dashboard",
permanent: false,
},
};
const ALLOW_SIGNUP = process.env.NEXT_PUBLIC_ALLOW_SIGNUP === "true";
return {
props: {
ALLOW_SIGNUP,
},
};
}

View File

@ -6,7 +6,7 @@ export default function ForgotPasswordPage(props: any) {
return (
<>
<Head>
<title>Reset Password | Documenso</title>
<title>Forgot Password | Documenso</title>
</Head>
<ForgotPassword allowSignup={props.ALLOW_SIGNUP}></ForgotPassword>
</>