Advertisement
megastar98

users.js

Sep 3rd, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var express = require('express');
  2. var router = express.Router();
  3. var app = require('../app');
  4. const mongo = require('mongodb');
  5. var db =require('monk')('localhost/nodeblog');
  6. var multer = require('multer');
  7. var users = db.get('users');
  8. var bcrypt = require('bcrypt-nodejs');
  9. const nodemailer = require('nodemailer');
  10. var passport = require('passport');
  11. // var LocalStrategy = require('passport-local').Strategy;
  12. const passwoid = require('passwoid');
  13. const jwt = require('jsonwebtoken');
  14. const csrf = require('csurf');
  15.  
  16. var csrfProtection = csrf({ cookie: true });
  17. // router.use(csrfProtection);
  18.  
  19.  
  20.  
  21. var passport = require('passport');
  22. const LocalStrategy = require('passport-local').Strategy;
  23.  
  24. var transporter = nodemailer.createTransport({
  25.   service: 'Gmail',
  26.   auth:{
  27.     user: app.Email_User,
  28.     pass: app.Email_Password
  29.   }
  30. });
  31.  
  32.  
  33. var storage = multer.diskStorage({
  34.   destination: function (req, file, cb) {
  35.     cb(null, './public/images/uploads')
  36.   },
  37.   filename: function (req, file, cb) {
  38.     cb(null, file.fieldname + '-' + Date.now())
  39.   }
  40. });
  41. var upload = multer({ storage: storage })
  42.  
  43.  
  44. passport.serializeUser(function(user, done) {
  45.   done(null, user._id);
  46. });
  47.  
  48. passport.deserializeUser(function(id, done) {
  49.   users.findOne({_id:id}, function (err, user) {
  50.     done(err, user);
  51.   });
  52. });
  53.  
  54. /* GET users listing. */
  55. router.get('/', function(req, res, next) {
  56.   res.send('respond with a resource');
  57. });
  58.  
  59.  
  60. router.get('/login',function(req,res,next){
  61.   //console.log(req.session);
  62.   res.render('users/login',{title:'Mega Flow - Login',errors:false});
  63. });
  64.  
  65. passport.use(new LocalStrategy(
  66.   function(username,password,done){
  67.     // var collection = db.get('users');
  68.     users.findOne({username:username},function(err,user){
  69.       if(err){
  70.         throw err;
  71.       }
  72.       if(!user){
  73.         console.log('unknown user');
  74.         return done(null,false,{message:'unknown user'});
  75.  
  76.       }
  77.       if(user){
  78.         if(!bcrypt.compareSync(password,user.password)){
  79.           console.log('invalid password');
  80.           return done(null,false,{message:'Invalid password'});
  81.         }else{
  82.           return done(null,user);
  83.         }
  84.       }
  85.      
  86.     });
  87. }
  88. ));
  89.  
  90. router.post('/login',passport.authenticate('local',{
  91.   failureRedirect:'/users/login',
  92.   failureFlash:'Invalid username or password'
  93. }),function(req,res,next){
  94.   console.log('Authentication successful');
  95.   //  req.session.username = req.body.username;
  96.     // console.log(req.user);
  97.   req.flash('success','You are logged in');
  98.   res.redirect(303,'/posts/add_post');
  99. })
  100.  
  101.  
  102. router.get('/logout',function(req,res){
  103.   req.session.destroy(function(err) {
  104.     if(err) {
  105.       console.log(err);
  106.     } else {
  107.       console.log('you just logged out');
  108.       res.redirect('/users/login');
  109.       console.log(req.session);
  110.     }
  111.   });
  112.   });
  113.  
  114.  
  115. router.get('/register',function(req,res,next){
  116.   res.render('users/register',{title:'Mega Flow - Register',errors:false,success:false});
  117. });
  118.  
  119. router.post('/register',upload.single('photo'),function(req,res,next){
  120.  
  121.   //validate inputs
  122.   req.checkBody('firstname','firstname is required').notEmpty();
  123.   req.checkBody('lastname','lastname is required').notEmpty();
  124.   req.checkBody('password','password is required').notEmpty();
  125.   req.checkBody('password2','passwords must be the same').equals(req.body.password);
  126.   req.checkBody('email','email is required').notEmpty();
  127.   req.checkBody('email','Enter a valid email').isEmail();
  128.   req.checkBody('username','username is required').notEmpty();
  129.    
  130.   // validate the profile picture
  131.  
  132.   if (!req.file) {
  133.     res.send('No files to upload.');
  134.     return;
  135. }
  136.  
  137.   req.getValidationResult().then(function(result){
  138.     if(!result.isEmpty()){
  139.       res.render('users/register',{title:'Mega Flow - Register',errors:result.array(),success:false});
  140.     }else{
  141.       var firstname = req.body.firstname;
  142.       var lastname = req.body.lastname;
  143.       var password =bcrypt.hashSync(req.body.password);
  144.       var email = req.body.email;
  145.       var username = req.body.username;
  146.       var photo = req.file;
  147.       console.log(photo);
  148.  
  149.       // check if user exists
  150.       users.findOne({username:username},function(err,user){
  151.         if(user){
  152.           var errors = [
  153.             {
  154.               msg:'Username Already exists '
  155.             }
  156.           ]
  157.           res.render('users/register',{title:'Mega Flow - Register',errors:errors,success:false});
  158.         }else{
  159.           users.findOne({email:email},function(err,user){
  160.             if(user){
  161.               var errors = [
  162.                 {
  163.                   msg:'Email Already exists '
  164.                 }
  165.               ]
  166.               res.render('users/register',{title:'Mega Flow - Register',errors:errors,success:false});
  167.               return;
  168.             }else{
  169.               users.insert({
  170.                 firstname:firstname,
  171.                 lastname:lastname,
  172.                 password:password,
  173.                 email:email,
  174.                 username:username,
  175.                 photo: photo
  176.              
  177.               },function(err,user){
  178.                 if(err){
  179.                   console.log('error saving user')
  180.                 }else{
  181.                   res.render('users/register',{title:'Mega Flow - Register',errors:false,success:true});
  182.                   // send confirmation email
  183.                   var mailOptions = {
  184.                     from: 'My Catalogue ',
  185.                     to: email,
  186.                     subject:'Registration Confirlmation',
  187.                     text:'Your registration on MegaFlow was successful'
  188.                   };
  189.            
  190.                   transporter.sendMail(mailOptions,function(err,info){
  191.                     if(err){
  192.                       console.log(err);
  193.                     }else{
  194.                       console.log('Email Sent');
  195.                       res.render('index',{message:'Confirmation message has been sent your email', title:'My Catalogue'});
  196.                     }
  197.                   })
  198.                   res.redirect(301,'index');
  199.                 }
  200.               })
  201.        
  202.             }
  203.           });
  204.         }
  205.       })
  206.      
  207.      
  208.  
  209.          }
  210.   });
  211.  
  212. });
  213.  
  214. router.get('/reset_password',function(req,res,next){
  215.   res.render('users/reset_password',{title:'Mega Flow - Reset Password',errors:false, success:false});
  216. })
  217.  
  218. //forgot password
  219. router.post('/reset_password',function(req,res,next){
  220.  
  221.   // verify email
  222.   req.checkBody('email','email is required').notEmpty();
  223.   req.checkBody('email','Enter a valid email').isEmail();
  224.  
  225.   req.getValidationResult().then(function(result){
  226.     if(!result.isEmpty()){
  227.       res.render('users/reset_password',{title:'Mega Flow - Reset Password',errors:result.array() ,success:false});
  228.     }else{
  229.       var email = req.body.email;
  230.       var newPass = passwoid(10);
  231.       console.log(newPass);
  232.       var password = bcrypt.hashSync(newPass);
  233.       users.update({email: email}, {$set:{password:password}},function(err,result){
  234.         if(err) throw err;
  235.        
  236.         var mailOptions = {
  237.           from: 'My Catalogue ',
  238.           to: email,
  239.           subject:'Password Reset',
  240.           text:'Your new password is : '+newPass
  241.         };
  242.  
  243.         transporter.sendMail(mailOptions,function(err,info){
  244.           if(err){
  245.             console.log(err);
  246.           }else{
  247.             console.log('Email Sent');
  248.             res.render('users/reset_password',{title:'Mega Flow - Reset Password',errors:false, success:true});
  249.           }
  250.         })
  251.       })
  252.     }
  253.   });
  254.  
  255. });
  256.  
  257. //change password
  258. router.get('/change_password',function(req,res,next){
  259.   res.render('users/change_password',{title:'Mega Flow - Change Password'});
  260. });
  261.  
  262. router.post('/change_password',function(req,res,next){
  263.   // validate inputs
  264.  
  265. })
  266. // get user profile by id
  267. router.get('/profile/:id',function(req,res,next){
  268.   users.findOne({_id:req.params.id},function(err,user){
  269.     if(err) throw err;
  270.     res.json(user);
  271.   })
  272. });
  273.  
  274. module.exports = router;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement