Advertisement
Guest User

Untitled

a guest
Nov 11th, 2017
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const JWT = require('jsonwebtoken');
  2. const User = require('../models/user');
  3. const { JWT_SECRET } = require('../configuration');
  4. const bcrypt = require('bcrypt');
  5.  
  6.  
  7.  
  8. function hasRole(userEmail, role, func){
  9.     User.findOne({
  10.         email: userEmail
  11.     }, function(err,user){
  12.         if(err) throw err;
  13.  
  14.         if(!user){
  15.             res.json({ success: false, message: 'Authentication failed.'});
  16.         } else if(user){
  17.             if(role==='medico'){
  18.                 console.log("user.medico", user.medico);
  19.                 func(role === 'medico' && user.medico === true )
  20.             }        
  21.         }
  22.     })
  23. }
  24.  
  25.  
  26. module.exports = {
  27.     index: async function(req,res,next){
  28.         try{
  29.             const users = await User.find({});
  30.             res.status(200).json(users);
  31.         }catch(err){
  32.             next(err);
  33.         }
  34.     },
  35.     signUp: async function(req,res,next){
  36.         try{
  37.             const nome = req.body["nome"];
  38.             const email = req.body["email"];
  39.             const password = req.body["password"];
  40.             const medico = req.body["medico"];
  41.             const utente = req.body["utente"];
  42.             const farmaceutico = req.body["farmaceutico"];
  43.  
  44.            
  45.             //check is user already exists
  46.             const foundUser = await User.findOne({ email: email});
  47.             if(foundUser){
  48.                 //403 - forbiden
  49.                 return res.status(403).json({ error: "Email already in use"});
  50.             }
  51.            
  52.  
  53.             //create new user
  54.             var newUser = new User();
  55.             newUser.nome = nome;
  56.             newUser.email = email;
  57.             newUser.password = password;
  58.             newUser.medico = medico;
  59.             newUser.utente = utente;
  60.             newUser.farmaceutico = farmaceutico;
  61.  
  62.             console.log("newuser: ", newUser);
  63.             await newUser.save();
  64.  
  65.             //generate the token
  66.             //const token = signToken(newUser);
  67.  
  68.             //respond with token
  69.             res.status(200).json(newUser);
  70.            
  71.  
  72.         }catch(err){
  73.             next(err);
  74.         }
  75.     },
  76.  
  77.     signIn: async function(req,res,next){
  78.         try{
  79.             const password = req.body.password;
  80.             console.log("req.body.password: ",req.body.password);
  81.             console.log("req.body.email: ",req.body.email);
  82.             user = await User.findOne({email: req.body.email});
  83.             console.log("user email:", user.email);
  84.             console.log(user.password);
  85.             console.log(req.user);
  86.  
  87.  
  88.             if (!user) {
  89.                 res.json({ success: false, message: 'Authentication failed. User not found.' });
  90.             } else if (user) {
  91.        
  92.                 // check if password matches
  93.  
  94.                 bcrypt.compare(password, user.password, function(err, resposta) {
  95.                     if(resposta) {
  96.                         // Passwords match
  97.                         //console.log("Successful login!")
  98.                         //generate a token
  99.  
  100.                         const payload = {
  101.                             user: user.email
  102.                         };
  103.                         const token = JWT.sign(payload,JWT_SECRET, {
  104.                             expiresIn: 240 //4 minutos
  105.                             //expiresIn: 3600 // 1 hora
  106.                         });
  107.                
  108.                         // return the information including token as JSON
  109.                         res.status(200).json({
  110.                             success: true,
  111.                             message: 'Enjoy your token!',
  112.                             token: token
  113.                         });
  114.                     } else {
  115.                         // Passwords don't match
  116.                         res.json({ success: false, message: 'Authentication failed. Wrong password.' });
  117.                     }
  118.                   });
  119.                
  120.             }
  121.                      
  122.         }catch(err){
  123.             next(err);
  124.         }
  125.     },
  126.  
  127.  
  128.     //neste caso vai verificar se e medico
  129.     secret: async function(req,res,next){
  130.         try{
  131.             console.log('req.user', req.user);
  132.             hasRole(req.user,'medico',function(decision){
  133.                 console.log("decision", decision);
  134.                 if(!decision){
  135.                     console.log("ENTROUUUU");
  136.                     return res.status(403).send(
  137.                         { auth: false, token: null, message: 'You have no authorization.'});
  138.                    
  139.                 }    
  140.                 else{
  141.                     User.find(function(err,users){
  142.                         if(err)
  143.                             res.send(err);
  144.                         res.json(users);
  145.                     })  
  146.                 }  
  147.             });
  148.            
  149.         }catch(err){
  150.             next(err);
  151.         }
  152.     }
  153. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement