Update SSO mail sending

This commit is contained in:
Benjamin Toby
2024-07-13 11:17:30 +01:00
parent e6496ee2cf
commit ac9e9b468a
3 changed files with 84 additions and 2 deletions
+4
View File
@@ -0,0 +1,4 @@
<h1>One Time Code</h1>
<p>Please use this code to login</p>
<h2>{{code}}</h2>
<p>Please not that this code expires after 10 minutes</p>
+53 -2
View File
@@ -2,6 +2,9 @@
const hashPassword = require("../../functions/hashPassword");
const varDatabaseDbHandler = require("../engine/utils/varDatabaseDbHandler");
const nodemailer = require("nodemailer");
const fs = require("fs");
const path = require("path");
/**
*
@@ -9,9 +12,23 @@ const varDatabaseDbHandler = require("../engine/utils/varDatabaseDbHandler");
* @param {string} param0.email
* @param {import("../../types/database-schema.td").DSQL_DatabaseSchemaType} [param0.dbSchema]
* @param {string} param0.email_login_field
* @param {string} param0.mail_domain
* @param {string} param0.mail_username
* @param {string} param0.mail_password
* @param {number} [param0.mail_port]
* @param {string} [param0.sender]
* @returns
*/
async function localSendEmailCode({ email, dbSchema, email_login_field }) {
async function localSendEmailCode({
email,
dbSchema,
email_login_field,
mail_domain,
mail_username,
mail_password,
mail_port,
sender,
}) {
try {
/**
* User auth
@@ -71,9 +88,43 @@ async function localSendEmailCode({ email, dbSchema, email_login_field }) {
if (foundUser && foundUser[0] && email_login_field) {
const tempCode = generateCode();
let transporter = nodemailer.createTransport({
host: mail_domain,
port: mail_port || 465,
secure: true,
auth: {
user: mail_username,
pass: mail_password,
},
});
let mailObject = {};
mailObject["from"] = `"Datasquirel SSO" <${
sender || "support@datasquirel.com"
}>`;
mailObject["sender"] = sender || "support@summitlending.com";
mailObject["to"] = email;
mailObject["subject"] = "One Time Email Login Code";
mailObject["html"] = fs
.readFileSync(
path.resolve(__dirname, "one-time-code.html"),
"utf-8"
)
.replace(/{{code}}/, tempCode);
const info = await transporter.sendMail(mailObject);
if (!info?.accepted) throw new Error("Mail not Sent!");
/** ********************************************** */
/** ********************************************** */
/** ********************************************** */
let setTempCode = await varDatabaseDbHandler({
queryString: `UPDATE users SET ${email_login_field} = ? WHERE email = ?`,
queryValuesArray: [tempCode, email],
queryValuesArray: [tempCode + `-${Date.now()}`, email],
database: dbFullName.replace(/[^a-z0-9_]/g, ""),
tableSchema,
});