@petercraftsmn/auth-util
Version:
Auth utility functions
91 lines (86 loc) • 2.94 kB
JavaScript
const JwtCreator = require('./jwtCreator');
const commonUtil = require('./commonUtil');
class JwtReader extends JwtCreator {
constructor(defaultValues) {
super(defaultValues);
}
/**
* Returns true is jwt is expired
* @param jwt
* @param validitySec
*/
jwtIsExpired(jwt, validitySec) {
try {
const splitJWT = jwt.split('.');
if (splitJWT.length !== 3) return null;
let [header, payload, signature] = splitJWT;
if (!!header) {
payload = commonUtil.reverseStringUrlSafe(payload);
try {
payload = JSON.parse(commonUtil.base64ToAscii(payload));
} catch (parseError) {
return false;
}
return ((!!payload) && (!!payload.time) && (payload.time > (Date.now() - (validitySec * 1000))));
} else {
return null;
}
} catch (err) {
throw err;
}
}
/**
* Returns true if signature is valid
* @param jwt
* @param secret
*/
jwtIsSignatureValid(jwt, secret = this.defaultSecret) {
try {
const splitJWT = jwt.split('.');
if (splitJWT.length !== 3) return null;
let [header, payload, signature] = splitJWT;
if (!!header && !!payload && !!signature) {
let reversedSignature = commonUtil.reverseStringUrlSafe(signature);
let headerObject
try {
headerObject = JSON.parse(commonUtil.base64ToAscii(header));
} catch (parseError) {
return false;
}
let calculatedSignature = this.createHmacString(header + '.' + payload, secret, headerObject.alg);
return (calculatedSignature === reversedSignature);
} else {
return false;
}
} catch (err) {
throw err;
}
}
/**
* Returns object {header: ..., payload: ...}
* @param jwt
*/
jwtRead(jwt) {
try {
const splitJWT = jwt.split('.');
if (splitJWT.length !== 3) return null;
let [header, payload, signature] = splitJWT;
if (!!header && !!payload) {
header = commonUtil.reverseStringUrlSafe(header);
payload = commonUtil.reverseStringUrlSafe(payload);
try {
header = JSON.parse(commonUtil.base64ToAscii(header));
payload = JSON.parse(commonUtil.base64ToAscii(payload));
} catch (parseError) {
return null;
}
return {header, payload};
} else {
return null;
}
} catch (err) {
throw err;
}
}
}
module.exports = JwtReader;