From 45b5a2eade9bf72378722f0b8ebeb086e83b8df6 Mon Sep 17 00:00:00 2001 From: yashrajverma Date: Wed, 19 May 2021 12:34:12 +0530 Subject: [PATCH] Blog Completed --- .history/controllers/auth_20210519123339.js | 405 ++++++++++++++++++++ controllers/auth.js | 6 +- 2 files changed, 408 insertions(+), 3 deletions(-) create mode 100644 .history/controllers/auth_20210519123339.js diff --git a/.history/controllers/auth_20210519123339.js b/.history/controllers/auth_20210519123339.js new file mode 100644 index 0000000..675a180 --- /dev/null +++ b/.history/controllers/auth_20210519123339.js @@ -0,0 +1,405 @@ +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"); + +// -------------------------------------------- mail transporter ----------------------------------------- + +var transport = nodemailer.createTransport( + smtpTransport({ + host: `${process.env.HOST}`, //`${process.env.HOST}` + port: 465, + auth: { + user: `${process.env.EMAIL}`, //`${process.env.EMAIL}` + pass: `${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.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, + }); + 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: '', // design html for email message. + // }; + // transport.sendMail(message, function (err, info) { + // if (err) { + // console.log(err); + // } else { + // console.log(info); + // } + // }); + res.json({ + message: "You Are Registered, Please Login", + 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 = req.body.email; + let password = req.body.password; + let user = await User.findOne({ email: email }); + if (user) { + 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", + }); + } + } else { + res.json({ + message: "No user with this email exists", + type: "error", + }); + } + } catch (err) { + console.log(err); + } +}; + +// 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, + }); +}; diff --git a/controllers/auth.js b/controllers/auth.js index 833b8f3..675a180 100644 --- a/controllers/auth.js +++ b/controllers/auth.js @@ -13,11 +13,11 @@ const smtpTransport = require("nodemailer-smtp-transport"); var transport = nodemailer.createTransport( smtpTransport({ - host: `email-smtp.us-east-1.amazonaws.com`, //`${process.env.HOST}` + host: `${process.env.HOST}`, //`${process.env.HOST}` port: 465, auth: { - user: `AKIA2G7743RRTZMVXE3X`, //`${process.env.EMAIL}` - pass: `BJSjV3jArJfsnk1LhFc/hUmisEyEtbLNGgrRbv0noh8c`, //`${process.env.PASS}` + user: `${process.env.EMAIL}`, //`${process.env.EMAIL}` + pass: `${process.env.PASS}`, //`${process.env.PASS}` }, }) );