node-webtokens
Version:
Simple, opinionated implementation of JWS and JWE compact serialization
56 lines (52 loc) • 1.69 kB
JavaScript
exports.buf2b64url = (data) => {
return data.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
}
function responder(error, result, callback) {
if (callback) {
callback(error, result);
} else if (error) {
throw error;
} else {
return result;
}
}
exports.responder = responder;
exports.payloadVerifications = (parsed, cb) => {
if (parsed.audList) {
if (parsed.payload.aud === undefined) {
parsed.error = { message: 'Missing aud claim in payload' };
return responder(null, parsed, cb);
} else if (!parsed.audList.includes(parsed.payload.aud)) {
parsed.error = { message: 'Mismatching aud claim in payload' };
return responder(null, parsed, cb);
}
}
if (parsed.issList) {
if (parsed.payload.iss === undefined) {
parsed.error = { message: 'Missing iss claim in payload' };
return responder(null, parsed, cb);
} else if (!parsed.issList.includes(parsed.payload.iss)) {
parsed.error = { message: 'Mismatching iss claim in payload' };
return responder(null, parsed, cb);
}
}
let iat = Number(parsed.payload.iat);
if (!iat) {
parsed.error = { message: 'Missing or invalid iat claim in payload' };
return responder(null, parsed, cb);
}
let expiration = Number(parsed.payload.exp);
if (parsed.lifetime) {
let iatExp = iat + parsed.lifetime;
if (!expiration || iatExp < expiration) expiration = iatExp;
}
if (expiration && Date.now() > expiration * 1000) {
parsed.expired = expiration;
return responder(null, parsed, cb);
}
parsed.valid = true;
return responder(null, parsed, cb);
}