salix/services/mailer/application/auth.js

76 lines
2.0 KiB
JavaScript

var database = require('./database.js');
let config = require('./config.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 || result.length == 0)
return this.response.status(401).send({message: 'Invalid token'});
if (this.isTokenExpired(token.created, token.ttl))
return this.response.status(401).send({message: 'Token expired'});
// Set proxy host
let proxy = config.proxy;
if (!proxy)
proxy = {
host: 'localhost',
port: 80
};
this.request.proxyHost = `http://${proxy.host}:${proxy.port}`;
this.request.user = {
id: token.userId,
token: this.getToken()
};
this.next();
});
},
/**
* Get request token.
* @return {String} Token
*/
getToken: function() {
return this.request.headers.authorization || this.request.query.token;
},
/**
* 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;
}
};