Initial commit
This commit is contained in:
55
library/LibJwt.js
Normal file
55
library/LibJwt.js
Normal file
@ -0,0 +1,55 @@
|
||||
const jwt = require('jsonwebtoken');
|
||||
const cryptojs = require("crypto-js");
|
||||
|
||||
const confJwt = {
|
||||
algorithm: 'HS256',
|
||||
issuer: 'BINGCORP',
|
||||
subject: 'APP_DRIVER',
|
||||
audience: 'MOBILE',
|
||||
// expiresIn: '365d',
|
||||
};
|
||||
const SECRET_KEY = 'BINGCORP';
|
||||
const KEY_ENC = 'dRgUjXn2r5u8x/A?D(G+KbPeShVmYp3s'; // just random string
|
||||
|
||||
class LibJwt {
|
||||
|
||||
static async createToken(data) {
|
||||
return new Promise((resolve, reject) => {
|
||||
// mengapa data perlu di enc lagi ? karena di jwt data tersebut hanya di base64_enc
|
||||
let cipherText = cryptojs.AES.encrypt(JSON.stringify(data), KEY_ENC).toString();
|
||||
let payload = {
|
||||
cipherText,
|
||||
};
|
||||
|
||||
jwt.sign(payload, SECRET_KEY, confJwt, function (err, token) {
|
||||
if (err) {
|
||||
reject(err);
|
||||
return false;
|
||||
}
|
||||
resolve({ type: 'success', token });
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
static async verifyToken(token) {
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
jwt.verify(token, SECRET_KEY, confJwt, function (err, decoded) {
|
||||
if (err) {
|
||||
resolve({ type: 'fail', message: err.message });
|
||||
return false;
|
||||
}
|
||||
const { cipherText } = decoded;
|
||||
let bytes = cryptojs.AES.decrypt(cipherText, KEY_ENC);
|
||||
let dataDecoded = JSON.parse(bytes.toString(cryptojs.enc.Utf8));
|
||||
resolve({ type: 'success', data: dataDecoded });
|
||||
})
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = LibJwt;
|
||||
Reference in New Issue
Block a user