61 lines
1.7 KiB
JavaScript
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; |