Files
sign/apps/web/pages/api/auth/signup.ts

57 lines
1.5 KiB
TypeScript
Raw Normal View History

2023-01-10 18:52:04 +01:00
import { NextApiRequest, NextApiResponse } from "next";
import { hashPassword } from "@documenso/lib/auth";
import { defaultHandler, defaultResponder } from "@documenso/lib/server";
2023-04-04 22:02:32 +00:00
import prisma from "@documenso/prisma";
import { IdentityProvider } from "@prisma/client";
2023-01-10 18:52:04 +01:00
async function postHandler(req: NextApiRequest, res: NextApiResponse) {
const { email, password, source } = req.body;
2023-01-10 18:52:04 +01:00
const cleanEmail = email.toLowerCase();
2023-06-07 10:44:07 +00:00
if (!cleanEmail || !/.+@.+/.test(cleanEmail)) {
res.status(400).json({ message: "Invalid email" });
2023-01-10 18:52:04 +01:00
return;
}
if (!password || password.trim().length < 7) {
return res.status(400).json({
2023-01-13 16:35:20 +01:00
message: "Password should be at least 7 characters long.",
2023-01-10 18:52:04 +01:00
});
}
// User already exists if email already exists
const existingUser = await prisma.user.findFirst({
where: {
email: cleanEmail,
},
});
if (existingUser) {
2023-01-13 16:35:20 +01:00
const message: string = "This email is already registered.";
2023-01-10 18:52:04 +01:00
return res.status(409).json({ message });
}
const hashedPassword = await hashPassword(password);
2023-03-03 20:23:37 +01:00
await prisma.user.upsert({
2023-01-10 18:52:04 +01:00
where: { email: cleanEmail },
update: {
password: hashedPassword,
emailVerified: new Date(Date.now()),
identityProvider: IdentityProvider.DOCUMENSO,
},
create: {
email: cleanEmail,
password: hashedPassword,
identityProvider: IdentityProvider.DOCUMENSO,
source: source,
2023-01-10 18:52:04 +01:00
},
});
2023-03-03 20:23:37 +01:00
res.status(201).end();
2023-01-10 18:52:04 +01:00
}
export default defaultHandler({
POST: Promise.resolve({ default: defaultResponder(postHandler) }),
});