56 lines
1.5 KiB
JavaScript
Executable File
56 lines
1.5 KiB
JavaScript
Executable File
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;
|