67 lines
1.7 KiB
JavaScript
67 lines
1.7 KiB
JavaScript
|
var database = require('./database.js');
|
||
|
|
||
|
module.exports = {
|
||
|
|
||
|
/**
|
||
|
* Initialize auth
|
||
|
* @param {Object} request - Request object
|
||
|
* @param {Object} response - Response object
|
||
|
* @param {Object} next - Next object
|
||
|
*/
|
||
|
init: function(request, response, next) {
|
||
|
this.request = request;
|
||
|
this.response = response;
|
||
|
this.next = next;
|
||
|
|
||
|
this.validateToken();
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Validate auth token
|
||
|
*/
|
||
|
validateToken: function() {
|
||
|
let query = 'SELECT userId, ttl, created FROM salix.AccessToken WHERE id = ?';
|
||
|
|
||
|
database.pool.query(query, [this.getToken()], (error, result) => {
|
||
|
let token = result[0];
|
||
|
|
||
|
if (error)
|
||
|
return this.response.status(401).send({status: 'REJECT', data: {message: error.code}});
|
||
|
|
||
|
if (result.length == 0)
|
||
|
return this.response.status(401).send({status: 'REJECT', data: {message: 'No token found'}});
|
||
|
|
||
|
if (this.isTokenExpired(token.created, token.ttl))
|
||
|
return this.response.status(401).send({status: 'REJECT', data: {message: 'Token expired'}});
|
||
|
|
||
|
this.request.userId = token.userId;
|
||
|
|
||
|
this.next();
|
||
|
});
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Get request token
|
||
|
* @return {String} Token
|
||
|
*/
|
||
|
getToken: function() {
|
||
|
return this.request.headers.authorization;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Checks if the token has expired
|
||
|
* @param {String} created - Creation date
|
||
|
* @param {Integer} ttl - Ttl seconds
|
||
|
* @return {Boolean} True if the token has expired
|
||
|
*/
|
||
|
isTokenExpired: function(created, ttl) {
|
||
|
let date = new Date(created);
|
||
|
let currentDate = new Date();
|
||
|
|
||
|
date.setSeconds(date.getSeconds() + ttl);
|
||
|
|
||
|
if (currentDate > date)
|
||
|
return true;
|
||
|
}
|
||
|
};
|