Advertisement
Guest User

Untitled

a guest
Mar 14th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var express = require('express');
  2. var app = express();
  3. var userDao = require('./mongo-dao');
  4. var passport = require('passport');
  5. var LocalStrategy = require('passport-local').Strategy;
  6. var BasicStrategy = require('passport-http').BasicStrategy;
  7. var bodyParser = require('body-parser');
  8. var jwt = require("jwt-simple");
  9. var SecretString = "xiskitoprimo";
  10.  
  11. app.use(bodyParser.json());
  12. app.use(passport.initialize());
  13. app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
  14.     extended: true
  15. }));
  16. app.set('SecretKey', SecretString);
  17.  
  18. //funciona que se utiliza para autentificar dentro de passport local y passport basic
  19. function findOne(username, password, done) {
  20.     userDao.findOne({
  21.         username: username
  22.     }, function(err, user) {
  23.         if (err) return done(null, false, {
  24.             message: 'Fallo no controlado.'
  25.         });
  26.         if (!user) return done(null, false, {
  27.             message: 'Usuario incorrecto.'
  28.         });
  29.         if (password === user.password) {
  30.             return done(null, user);
  31.         } else {
  32.             return done(null, false, {
  33.                 message: 'Incorrect password.'
  34.             });
  35.         }
  36.     });
  37. }
  38.  
  39. function create_token(req) {
  40.     var user = req.user;
  41.     var data = new Date().getTime();
  42.     var expires = data + 180000000;
  43.     var expires_refresh = expires + 18000000;
  44.     //Cuerpo de nuestro token con los datos del usuario y su expiracion, el header se introduce solo.
  45.     //El app.get("SecretKey") indica la key para cifrar el token.
  46.     var access_token = jwt.encode({
  47.         user: user,
  48.         exp: expires
  49.     }, app.get('SecretKey'));
  50.  
  51.     var refresh_token = jwt.encode({
  52.         access_token: access_token,
  53.         exp: expires_refresh
  54.     }, app.get('SecretKey'));
  55.  
  56.     return json = {
  57.         access_token: access_token,
  58.         refresh_token: refresh_token,
  59.         role:user.roles
  60.     };
  61. }
  62.  
  63.  
  64.  
  65. passport.use(new LocalStrategy(
  66.     function(username, password, done) {
  67.         return findOne(username, password, done);
  68.     }
  69. ));
  70.  
  71. passport.use(new BasicStrategy(
  72.     function(username, password, done) {
  73.         return findOne(username, password, done);
  74.     }
  75. ));
  76.  
  77. app.post("/token-local", passport.authenticate('local', {
  78.     session: false
  79. }), function(req, res) {
  80.     res.send(create_token(req));
  81. });
  82.  
  83. app.get('/token-basic', passport.authenticate('basic', {
  84.     session: false
  85. }), function(req, res) {
  86.   console.loq(req);
  87.     res.send(create_token(req));
  88. });
  89.  
  90. app.post("/refresh-token", function(req, res) {
  91.     var access_token = (req.body && req.body.access_token);
  92.     var refresh_token = (req.body && req.body.refresh_token);
  93.     if (access_token && refresh_token) {
  94.         try {
  95.           var access_token_decoded = jwt.decode(access_token, app.get('SecretKey'));
  96.           var refresh_token_decoded = jwt.decode(refresh_token, app.get('SecretKey'));
  97.           var date = new Date().getTime();
  98.         } catch (err) {
  99.             res.send(400);
  100.         }
  101.         if (access_token_decoded.exp <= date && refresh_token_decoded.access_token === access_token  &&
  102.             refresh_token_decoded.exp > date) {
  103.  
  104.               var refresh_expire = refresh_token_decoded.exp + 18000000;
  105.  
  106.               var new_access_token = jwt.encode({
  107.                   user: access_token_decoded.user,
  108.                   exp: refresh_token_decoded.exp
  109.               }, app.get('SecretKey'));
  110.  
  111.               var new_refresh_token = jwt.encode({
  112.                   access_token: access_token,
  113.                   exp: refresh_expire
  114.               }, app.get('SecretKey'));
  115.  
  116.               var json = {
  117.                   access_token: new_access_token,
  118.                   refresh_token: refresh_token
  119.               };
  120.               res.send(json);
  121.         }else{
  122.           res.send(402);
  123.         }
  124.     } else {
  125.         //next();
  126.         res.send(400);
  127.     }
  128. });
  129.  
  130. app.post("/verify-token", function(req, res) {
  131.     var token = (req.body && req.body.access_token) || (req.query && req.query.access_token) || req.headers['x-access-token'];
  132.     console.log(token);
  133.     if (token) {
  134.         try {
  135.             var date = new Date().getTime();
  136.             var decoded = jwt.decode(token, app.get('SecretKey'));
  137.         } catch (err) {
  138.             res.send(400);
  139.           //return next();
  140.         }
  141.         if (decoded.exp <= date) {
  142.             res.send(402);
  143.         } else {
  144.             res.json(decoded);
  145.         }
  146.     } else {
  147.         //next();
  148.         res.send(400);
  149.     }
  150. });
  151.  
  152. app.listen(3000, function() {
  153.     console.log('Ecample app listening on port 3000');
  154. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement