58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
import bcrypt from "bcrypt";
|
|
import { Router } from "express";
|
|
import User from "../models/User.js";
|
|
import { randomBytes } from "crypto";
|
|
import { createTransport } from "nodemailer";
|
|
|
|
const router = Router();
|
|
|
|
router.post("/", async (req, res) => {
|
|
const { username } = req.body;
|
|
|
|
try {
|
|
const user = await User.findOne({ username });
|
|
|
|
if (!user) {
|
|
return res.json({ error: "Username not found" });
|
|
}
|
|
|
|
const resetCode = randomBytes(32).toString("hex");
|
|
|
|
await User.findByIdAndUpdate(user._id, { resetCode });
|
|
|
|
const url = `https://crm.stream.graff.tech/resetConfirm?code=${resetCode}`;
|
|
|
|
let transporter = createTransport({
|
|
host: "mail.netangels.ru",
|
|
port: 587,
|
|
secure: false, // true for 465, false for other ports
|
|
auth: {
|
|
user: "stream@graff.tech", // generated ethereal user
|
|
pass: "zLUbt8Io7dh2F9KT", // generated ethereal password
|
|
},
|
|
});
|
|
|
|
// send mail with defined transport object
|
|
try {
|
|
await transporter.sendMail({
|
|
from: "stream@graff.tech", // sender address
|
|
to: username, // list of receivers
|
|
subject: "Сброс пароля - crm.stream.graff.tech", // Subject line
|
|
html: `<div>
|
|
Ссылка для сброса пароля: <a href="${url}" target="_blank">${url}</a>
|
|
</div>`,
|
|
});
|
|
} catch (error) {
|
|
console.log("error", (error as Error).message);
|
|
}
|
|
|
|
return res.json({ ok: 1 });
|
|
} catch (error) {
|
|
return res.json({ error: (error as Error).message });
|
|
}
|
|
});
|
|
|
|
const resetRoute = router;
|
|
|
|
export default resetRoute;
|