el.xwx.moe/lib/api/sendPasswordResetRequest.ts
2024-05-20 19:23:11 -04:00

45 lines
1.1 KiB
TypeScript

import { randomBytes } from "crypto";
import { prisma } from "./db";
import transporter from "./transporter";
import Handlebars from "handlebars";
import { readFileSync } from "fs";
import path from "path";
export default async function sendPasswordResetRequest(
email: string,
user: string
) {
const token = randomBytes(32).toString("hex");
await prisma.passwordResetToken.create({
data: {
identifier: email?.toLowerCase(),
token,
expires: new Date(Date.now() + 24 * 3600 * 1000), // 1 day
},
});
const emailsDir = path.resolve(process.cwd(), "templates");
const templateFile = readFileSync(
path.join(emailsDir, "passwordReset.html"),
"utf8"
);
const emailTemplate = Handlebars.compile(templateFile);
transporter.sendMail({
from: {
name: "Linkwarden",
address: process.env.EMAIL_FROM as string,
},
to: email,
subject: "Linkwarden: Reset password instructions",
html: emailTemplate({
user,
baseUrl: process.env.BASE_URL,
url: `${process.env.BASE_URL}/auth/reset-password?token=${token}`,
}),
});
}