UNPKG

1.67 kBJavaScriptView Raw
1require( 'dotenv' ).config();
2
3const jwt = require( 'jsonwebtoken' );
4const fs = require( 'fs' );
5const path = require( 'path' );
6const Cookies = require( 'cookies' );
7const config = require( '../config/config' );
8
9const key = fs.readFileSync( path.resolve( process.env.KEY_PATH ) );
10const pub = fs.readFileSync( path.resolve( process.env.PUB_KEY_PATH ) );
11
12const self = {};
13
14self.isAuth = req => !!req.isAuthenticated();
15
16self.getToken = user => jwt.sign( user, key, { algorithm : 'RS256' } );
17
18const verifyToken = ( token ) => {
19
20 let decoded = {};
21
22 try {
23 decoded = jwt.verify( token, pub, { algorithms : ['RS256'] } );
24 }
25 catch ( e ) {
26 return undefined;
27 }
28
29 return decoded;
30
31};
32
33const getTokenFromRequest = ( req, res ) => {
34
35 const cookies = new Cookies( req, res );
36
37 try {
38 return cookies.get( 'musd_id' );
39 }
40 catch ( e ) {
41 return undefined;
42 }
43
44};
45
46self.cookieExists = ( req, res ) => {
47 const JWTToken = getTokenFromRequest( req, res );
48
49 if ( !JWTToken ) {
50 return false;
51 }
52
53 return verifyToken( JWTToken );
54
55};
56
57self.JWTValidation = ( req, res, next ) => {
58
59 const JWTToken = getTokenFromRequest( req, res );
60
61 if ( !JWTToken ) {
62 res.json( {
63 success : true,
64 redirectTo : `https://${req.headers.host}${config.routes.login}`,
65 redirect : true
66 } );
67 }
68 else {
69 const validate = verifyToken( JWTToken );
70
71 if ( !validate ) {
72 res.json( {
73 success : true,
74 redirectTo : `https://${req.headers.host}${config.routes.login}`,
75 redirect : true
76 } );
77 }
78
79 next();
80 }
81
82};
83
84self.deleteCookie = ( req, res ) => {
85 const cookies = new Cookies( req, res );
86
87 cookies.set( 'musd_id' );
88};
89
90module.exports = self;