This repository has been archived on 2021-02-16. You can view files and clone it, but cannot push or open issues or pull requests.
Nodezzarella/classes/JWTHandler.class.js

61 lines
1.7 KiB
JavaScript

const crypto = require('crypto'),
moment = require("moment"),
jwt = require('jsonwebtoken'),
log = require('color-logs')(true, true, "JWTHandler.class.js");
moment.locale("fr");
class JWTHandler {
constructor() {
this.secret = crypto.createHash('sha256').update("La vie sans gâteau c'est possible, mais c'est sans intérêt", "UTF-8").digest("base64");
log.debug(this.secret);
}
verify(token, secret, cb){
jwt.verify(token, secret, {
issuer: "Nodezzarella",
clockTolerance: 3
}, function(err, decoded) {
if (err) {
cb(err, null);
} else {
cb(false, decoded);
}
});
}
sign(payload, cb){
let baseObject = {
iat: moment().unix(),
exp: moment().add(1, "day").unix(),
iss: "Orbital-Blaze"
};
jwt.sign(Object.assign(baseObject, payload), this.secret, {
algorithm: 'HS256'
}, function(err, token) {
if (err) throw err;
cb(token);
});
}
protect(req, res, next){
var that = this;
return function (req, res, next){
that.verify(req.header("Authorization"), that.secret, function(err, decoded){
if (err) {
res.status(403).json({
status: 403,
message: "Token expired",
expDate: moment(err.expiredAt).unix()
});
}else{
req.token = decoded;
next();
return;
}
})
};
}
}
module.exports = JWTHandler;