Files
gps-backend/library/LibJwt.js
2025-05-29 08:59:40 +00:00

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;