forked from projects/fipamo
69 lines
1.6 KiB
JavaScript
69 lines
1.6 KiB
JavaScript
|
import * as DataEvent from '../../src/com/events/DataEvent';
|
||
|
const bCrypt = require('bcrypt-nodejs');
|
||
|
const jwt = require('jsonwebtoken');
|
||
|
|
||
|
export default class Auth {
|
||
|
//--------------------------
|
||
|
// constructor
|
||
|
//--------------------------
|
||
|
constructor() {}
|
||
|
//--------------------------
|
||
|
// methods
|
||
|
//--------------------------
|
||
|
start() {}
|
||
|
|
||
|
/**
|
||
|
* Makes sure access token is legit
|
||
|
* @parameter req
|
||
|
*/
|
||
|
|
||
|
authCheck(req) {
|
||
|
let self = this;
|
||
|
return new Promise((resolve, reject) => {
|
||
|
let hash = req.headers['x-access-token'];
|
||
|
let response = [];
|
||
|
//Checks if token is a proper hash, if not reject
|
||
|
if (!self.isTokenValid(req.session.token, hash)) {
|
||
|
response = {
|
||
|
status: false,
|
||
|
type: DataEvent.API_REQUEST_LAME,
|
||
|
message: 'No Token Present. Auth Blocked'
|
||
|
};
|
||
|
reject(response);
|
||
|
//res.json();
|
||
|
} else {
|
||
|
var member = req.session.user;
|
||
|
jwt.verify(req.session.token, member.key, function (err, decoded) {
|
||
|
if (err) {
|
||
|
response = {
|
||
|
status: false,
|
||
|
type: DataEvent.API_REQUEST_LAME,
|
||
|
message: 'Invalid Token. Auth Blocked'
|
||
|
};
|
||
|
reject(response);
|
||
|
}
|
||
|
response = {
|
||
|
status: true,
|
||
|
type: DataEvent.API_REQUEST_GOOD,
|
||
|
message: 'Token Verified',
|
||
|
token: decoded
|
||
|
};
|
||
|
resolve(response);
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Checks to make sure received token matches
|
||
|
* @parameter token: created token
|
||
|
* @parameter hashedToken: encrypted token
|
||
|
*/
|
||
|
isTokenValid(token, hashedToken) {
|
||
|
return bCrypt.compareSync(token, hashedToken);
|
||
|
}
|
||
|
//--------------------------
|
||
|
// event handlers
|
||
|
//--------------------------
|
||
|
}
|