const bcrypt = require("bcryptjs"); const User = require("../models/User"); const Student = require("../models/Student"); const jwt = require("jsonwebtoken"); const JWT_secret = "Cantileverlabs"; const messagebird = require("messagebird")("llVKD53ve6QRpbCKOHzWBADaS", null, [ "ENABLE_CONVERSATIONSAPI_WHATSAPP_SANDBOX", ]); const nodemailer = require("nodemailer"); const smtpTransport = require("nodemailer-smtp-transport"); // const { OAuth2Client } = require("google-auth-library"); // const client = new OAuth2Client( // "7810129519-dr5l4l1i7a7bh07sbvl49gd80coenphj.apps.googleusercontent.com" // ); // -------------------------------------------- mail transporter ----------------------------------------- var transport = nodemailer.createTransport( smtpTransport({ host: "email-smtp.us-east-1.amazonaws.com", //`${process.env.HOST}`, //`${process.env.HOST}` port: 465, auth: { user: "AKIA2G7743RR3HEMJ6V5", //`${process.env.EMAIL}`, //`${process.env.EMAIL}` pass: "BA5XVsIOnbDRje/Dc8icsYocLYm3x24iHlTamz94528K", //`${process.env.PASS}`, //`${process.env.PASS}` }, }) ); // -------------------------------------------- mail transporter ----------------------------------------- module.exports.Protected = async (req, res, next) => { res.send("Hello User"); }; module.exports.postSignup = async (req, res, next) => { try { //we need firstName , lastName , email , password as input let firstName = req.body.firstName || " "; let lastName = req.body.lastName || " "; const { sending_company_email, email, password, subject } = req.body; let user = await User.findOne({ email: email }); if (user) { res.status(422).json({ message: "User already exist", type: "error", }); } else { const email_otp = Math.floor(100000 + Math.random() * 900000); console.log("otp", email_otp); const hashedPass = await bcrypt.hash(password, 12); user = new User({ firstName: firstName, lastName: lastName, email: email, password: hashedPass, isAdmin: false, email_otp, signUp_date: Date.now().toString(), }); user = await user.save(); await Student.deleteOne({ user: user._id }); let student = new Student({ user: user._id, }); student = await student.save(); user.student = student._id; await user.save(); const message = { from: `${sending_company_email}`, // Sender address to: `${email}`, // List of recipients subject: `${subject}`, // Subject line html: ` Verify Email Template
 
 
 
logo

Your OTP to verify the Email.


OTP: ${email_otp}
Please Navigate to Website to Verify OTP.

Facing any issue? Write us at

info@cantileverlabs.com

logo

Privacy Policy Terms Of Use Contact Us

 
 
copyright 2018 Cantilever Labs
 
`, // design html for email message. }; transport.sendMail(message, function (err, info) { if (err) { console.log(err); } else { console.log(info); } }); res.json({ message: "Email with 6 Digit OTP has been sent.", type: "success", }); } } catch (err) { console.log(err); } }; module.exports.verfiyemail = async (req, res, next) => { const { email, otp } = req.body; try { let user = await User.findOne({ email: email }); if (user) { const isMatched = await (user.email_otp == otp ? true : false); if (isMatched) { if (!user.isVerified) { user.isVerified = true; await user.save(); res.json({ message: "User Verified, Please Login", }); } else { res.json({ message: "User Already Verified, Please Login", }); } } else { res.json({ message: "OTP Doesn't Matched!", type: "error", }); } } else { res.json({ message: "No user with this email exists", type: "error", }); } } catch { (err) => { console.log(err); }; } }; module.exports.postSignin = async (req, res, next) => { try { //we need email and password as input let { email, password, isGoogle } = req.body; console.log("req.body", req.body); let user = await User.findOne({ email }); if (isGoogle) { if (user) { user.isVerified = true; user.lastLoginDate = Date.now(); user = await user.save(); const isMatched = await bcrypt.compare(password, user.password); if (isMatched) { const token = jwt.sign({ _id: user._id }, JWT_secret); res.json({ token: token, }); } else { res.json({ message: "email and password doesn't match", type: "error", }); return; } } else { res.json({ message: "User Doesn't Exists", type: "error", }); return; } } else { if (user) { if (user.isVerified) { const isMatched = await bcrypt.compare(password, user.password); if (isMatched) { const token = jwt.sign({ _id: user._id }, JWT_secret); user.lastLoginDate = Date.now(); user = await user.save(); res.json({ token: token, }); } else { res.json({ message: "email and password doesn't match", type: "error", }); return; } } else { res.status(403).json({ message: "User Not Verified!", type: "error", }); return; } } else { res.status(201).json({ message: "No user with this email exists", type: "error", }); return; } } } catch (err) { console.log(err); } }; // Gmail Login Starts. // ----------------------------------------------------------------------------------------------- //1026548376782-5p5tjck8ffhan9l1ajhv6orr87dfkrrf.apps.googleusercontent.com // module.exports.googleSignIn = async (req, res, next) => { // const { tokenId } = req.params; // console.log("TokenId from frontend", tokenId); // client // .verifyIdToken({ // idToken: tokenId, // audience: // "7810129519-dr5l4l1i7a7bh07sbvl49gd80coenphj.apps.googleusercontent.com", // }) // .then((response) => { // console.log(response.payload); // }); // }; // Phone verification Starts. // ----------------------------------------------------------------------------------------------- module.exports.sendOTP = (req, res, next) => { //uNNYosMopvvCW9RTR1tRWJmYC test //llVKD53ve6QRpbCKOHzWBADaS live const { phoneNumber } = req.body; try { if (!phoneNumber) { res.status(422).json({ message: "Please Add All Required Fields" }); return; } else { messagebird.verify.create( phoneNumber, { template: "Your verification code is %token", }, function (err, response) { if (err) { console.log(err); res.status(422).json({ message: err.errors[0].description }); } else { console.log(response); res.json({ id: response.id }); } } ); } } catch (err) { console.log(err); } }; module.exports.getOTP = (req, res, next) => { try { const { id, otp } = req.body; messagebird.verify.verify(id, otp, function (err, response) { if (err) { console.log({ error: err.errors[0].description, id: id }); res.json({ error: err.errors[0].description, id: id }); } else { console.log(response); res.json({ message: "Code Verified" }); } }); } catch (err) { console.log(err); } }; // Phone verification End. // ----------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------- // Forgot password Starts module.exports.forgotpassword = async (req, res, next) => { const { email, link, sending_company_email, subject } = req.body; //link = https://cantileverlabs.herokuapp.com/resetpassword/:id/:token try { await User.findOne({ email }).then((user) => { if (!user) { res.status(404).json({ error: "User not found with this Email" }); return; } else { const payload = { email: user.email, _id: user._id, }; const secret = JWT_secret + user.password; const token = jwt.sign(payload, secret, { expiresIn: "10m" }); User.findByIdAndUpdate(user._id, { $set: { passwordResetToken: token }, }) .then((data) => { const reset_link = `${link}/${user._id}/${token}`; const message = { from: `${sending_company_email}`, // Sender address to: `${user.email}`, // List of recipients subject: `${subject}`, // Subject line html: ` Reset Password Email Template
 
 
 
logo

You have requested to reset your password

We cannot simply send you your old password. A unique link to reset your password has been generated for you. To reset your password, click the following link and follow the instructions.

Reset Password

Facing any issue? Write us at

info@cantileverlabs.com

logo

Privacy Policy Terms Of Use Contact Us

 
 
copyright 2018 Cantilever Labs
 
`, // design html for email message. }; transport.sendMail(message, function (err, info) { if (err) { console.log(err); } else { console.log(info); } }); res.status(200).json({ message: "Link is Active for 10 mins", reset_link, }); }) .catch((err) => { console.log(err); }); } }); } catch { (error) => { console.log("Error from forgot pass", error); }; } }; module.exports.resetpassword = async (req, res, next) => { const { _id, token } = req.params; const { password } = req.body; try { let user = await User.findById({ _id }); if (!user) { res.json({ error: "User not Found or WrongId" }); return; } else { const secret = JWT_secret + user.password; const user_token = user.passwordResetToken; const payload = jwt.verify(token, secret); const hashedPass = await bcrypt.hash(password, 12); if (token == user_token) { user.password = hashedPass; await user .save() .then((ok) => { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "*"); res.json({ message: "Password Updated!" }); }) .catch((err) => { console.log("Error in save", err); }); } else { res.status(422).json({ error: "Either Token not found or Expired!" }); return; } } } catch { (err) => { console.log("error from try catch resetpass", err); }; } }; // Forgot password Ends // Email verification Ends // ----------------------------------------------------------------------------------------------- module.exports.checkProtected = (req, res, next) => { console.log(req.user); res.json({ message: "Protected", user: req.user, }); };