Dodo67

Controller

Feb 3rd, 2022
709
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const User = require('../models/auth.model')
  2. const expressJwt = require('express-jwt')
  3. const _ = require('lodash');
  4. const {OAuth2Client} = require('google-auth-library')
  5. const fetch = import('node-fetch')
  6. const {validationResult} = require('express-validator')
  7. const jwt = require('jsonwebtoken')
  8. //custom error handler to get useful error from database errors
  9. const {errorHandler} = require ('../helpers/dbErrorHandling')
  10. //I will use nodemailer for send email  
  11. const nodemailer = require('nodemailer')
  12.  
  13. const transporter = nodemailer.createTransport({
  14.     service: "hotmail",
  15.     auth : {
  16.         user: mail,
  17.         pass: password
  18.     }
  19.  
  20. })
  21.  
  22. exports.registerController = (req,res) => {
  23.    const{name , email , password} = req.body
  24.    //Extracts the validation errors from a request and makes them available in a Result object.
  25.    const errors = validationResult(req);
  26.  
  27.    if (!errors.isEmpty()) {
  28.        const firstError = errors.array().map(error => error.msg)[0]
  29.        return res.status(422).json({
  30.            error: firstError
  31.        })
  32.    }
  33.     else{
  34.         User.findOne({
  35.             email
  36.         }).exec((err , user) => {
  37.             //If user exists
  38.             if(user) {
  39.                 return res.status(400).json({
  40.                     error: "Email is taken"
  41.                 })
  42.             }
  43.         })
  44.  
  45.         //Generate Token
  46.         const token = jwt.sign({
  47.             name,
  48.             email,
  49.             password
  50.         },
  51.         process.env.JWT_ACCOUNT_ACTIVATION,
  52.         {
  53.             expiresIn: '15min'
  54.         }
  55.         )
  56.         const emailData = {
  57.             from: process.env.EMAIL_FROM,
  58.             to : to,
  59.             subject: "Account activation link",
  60.             hmtl: `
  61.             <h1>Please Click on link to activate </h1>
  62.             <p>${process.env.CLIENT_URL}/activate/${token}</p>
  63.             <hr/>
  64.             <p>This email contain sensitive info</p>
  65.             <p>${process.env.CLIENT_URL}
  66.                 `
  67.         }
  68.        
  69.         transporter.sendMail(options , function(err,info)  {
  70.             if(err){
  71.                 console.log(err)
  72.                 return;
  73.             }
  74.             console.log("Sent: " + info.response)
  75.         })
  76.     }
  77. }
  78.  
  79. //Activation and save to database
  80. exports.activationController = (req,res) => {
  81.     const {token} = req.body
  82.     if(token){
  83.         //Verify the token is valid or not or expired
  84.     jwt.verify(token , process.env.JWT_ACCOUNT_ACTIVATION ,
  85.         (err , decoded) => {
  86.             if(err){
  87.                 return res.status(401).json({
  88.                     error: "Expired Token , Signup again"
  89.                 })
  90.             }
  91.             else{
  92.                 //if valid save to database
  93.                 //Get name email password from token
  94.                 const {name , email , password} = jwt.decode(token)
  95.        
  96.                 const user = new User({
  97.                     name ,
  98.                     email ,
  99.                     passsword
  100.                 })
  101.        
  102.                 user.save((err,user) => {
  103.                     if(err){
  104.                         return res.status(401).json({
  105.                             error: errorHandler(err)
  106.                         })
  107.                     }
  108.                     else{
  109.                         return res.json({
  110.                             success: true ,
  111.                             message: "Signup successful",
  112.                             user
  113.                         })
  114.                     }
  115.                 })
  116.        
  117.             }
  118.         })
  119.        
  120.     }
  121.     else{
  122.         return res.json({
  123.             message: "error happening please try again"
  124.         })
  125.     }
  126.    
  127. }
  128.  
  129.  
  130.  
Advertisement
Add Comment
Please, Sign In to add comment