File: /var/www/javago-api-updates/src/helper/email.js
import nodemailer from "nodemailer";
import ejs from "ejs";
import * as authService from "../services/auth/auth.services.js";
import bcrypt from "bcrypt";
import User from "../models/users.model.js";
export async function sendMail(to, subject, html, OTP, type = 0) {
let transporter = nodemailer.createTransport({
host: process.env.SMTP_HOST,
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: process.env.SMTP_USERNAME, // generated ethereal user
pass: process.env.SMTP_PASSWORD, // generated ethereal password
},
});
try {
let info = await transporter.sendMail({
from: process.env.SMTP_FROM_MAIL, // sender address
to: to, // list of receivers
subject: subject, // Subject line
html: html, // html body
});
return OTP;
} catch (error) {
console.log(error);
return false;
}
}
export async function sendVerifyOTPMail(email) {
let data = {};
data.otp = Math.floor(1000 + Math.random() * 9000);
//data.otp = 1234;
let options = {};
let subject = "Java Go - OTP Verification";
let html = await ejs.renderFile(
"./views/verify_otp.ejs",
{
data: data,
},
options
);
await sendMail(email, subject, html, data.otp);
return data.otp;
}
export async function sendResetPasswordMail(name, email, token, user_type) {
try{
let data = {};
data.name = name;
//const baseUrl = process.env.APP_URL || "https://square.javaapp.co.uk";
//data.password_reset_link = `${baseUrl}/reset-password?token=${token}&type=${user_type}`;
//data.password_reset_link = process.env.RESET_PASSWORD_LINK;
data.temporaryPassword = await randomString();
let options = {};
let html = await ejs.renderFile(
"./views/forgotten_password.ejs",
{
data: data,
},
options
);
let subject = "Java Go - Password Reset Request";
const mailSent = await sendMail(email, subject, html, token, user_type);
if (mailSent) {
let userDetails = await User.findOne({
where: {
email: email,
}
});
const salt = await bcrypt.genSalt(10);
const password = await bcrypt.hash(data.temporaryPassword, 10);
await authService.updateUser(
{ password: password },
userDetails.id
);
}
return token;
}catch (error) {
console.log(error);
return res.status(500).send({
status: 500,
message: messages.something_went_wrong,
error: error,
});
}}
export async function sendCafeRequestMail(requestData) {
let data = {
email: requestData.email,
cafe_name: requestData.cafe_name,
phone: requestData.phone_number,
postcode: requestData.postcode,
website: requestData.website,
};
let options = {};
let subject = "Cafe Request";
let html = await ejs.renderFile(
"./views/request_cafe.ejs",
{
data: data,
},
options
);
await sendMail("javago@javaapp.co.uk", subject, html);
return data.otp;
}
export async function sendCafeRequestMailOld(email, cafe_name, password) {
let data = {
email: email,
cafe_name: cafe_name,
password: password,
link: process.env.CAFE_PANEL_LOGIN_LINK,
};
let options = {};
let subject = "Welcome to Java Go";
let html = await ejs.renderFile(
"./views/request_cafe.ejs",
{
data: data,
},
options
);
await sendMail(email, subject, html);
return data.otp;
}
export async function randomString() {
var chars =
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@#!&*";
var length = 8;
var result = "";
for (var i = length; i > 0; --i)
result += chars[Math.floor(Math.random() * chars.length)];
return result;
}