UNPKG

@dbg-riskit/angular-auth

Version:

44 lines 6.06 kB
/** * Helper class to decode and find JWT expiration. */ import { base64decode, base64encode } from '@dbg-riskit/common'; // @dynamic export class JwtHelper { static decodeToken(token) { const parts = token.split('.'); if (parts.length !== 3) { throw new Error('JWT must have 3 parts'); } const decoded = base64decode(parts[1]); if (!decoded) { throw new Error('Cannot decode the token'); } return JSON.parse(decoded); } static getTokenExpirationDate(token, property = 'exp') { const decoded = JwtHelper.decodeToken(token); if (!decoded.hasOwnProperty(property)) { return null; } const date = new Date(0); // The 0 here is the key, which sets the date to the epoch date.setUTCSeconds(decoded[property]); return date; } static isTokenExpired(token, offsetSeconds) { const date = JwtHelper.getTokenExpirationDate(token); return JwtHelper.isBefore(date, offsetSeconds); } static isBefore(date, offsetSeconds) { offsetSeconds = offsetSeconds || 0; if (date == null) { return false; } // Token expired? return date.valueOf() < (new Date().valueOf() + (offsetSeconds * 1000)); } } export function encodeTestToken(payload) { // Don't actually check or care about the header or signature in angular2-jwt return `.${base64encode(JSON.stringify(payload))}.`; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BrZy9kYmctcmlza2l0L2FuZ3VsYXItYXV0aC9zcmMvbGliL2p3dC5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxPQUFPLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRzlELFdBQVc7QUFDWCxNQUFNLE9BQU8sU0FBUztJQUVYLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBYTtRQUNuQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRS9CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDOUM7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxLQUFhLEVBQ2IsV0FBaUQsS0FBSztRQUV2RixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBEQUEwRDtRQUNwRixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRXRDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWEsRUFBRSxhQUFzQjtRQUM5RCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFpQixFQUFFLGFBQXNCO1FBQzVELGFBQWEsR0FBRyxhQUFhLElBQUksQ0FBQyxDQUFDO1FBRW5DLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtZQUNkLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsaUJBQWlCO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7Q0FDSjtBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBa0I7SUFDOUMsNkVBQTZFO0lBQzdFLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSGVscGVyIGNsYXNzIHRvIGRlY29kZSBhbmQgZmluZCBKV1QgZXhwaXJhdGlvbi5cbiAqL1xuaW1wb3J0IHtiYXNlNjRkZWNvZGUsIGJhc2U2NGVuY29kZX0gZnJvbSAnQGRiZy1yaXNraXQvY29tbW9uJztcbmltcG9ydCB7VG9rZW5EYXRhfSBmcm9tICcuL3Rva2VuLnJlc3BvbnNlcyc7XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgSnd0SGVscGVyIHtcblxuICAgIHB1YmxpYyBzdGF0aWMgZGVjb2RlVG9rZW4odG9rZW46IHN0cmluZyk6IFRva2VuRGF0YSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gdG9rZW4uc3BsaXQoJy4nKTtcblxuICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pXVCBtdXN0IGhhdmUgMyBwYXJ0cycpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGJhc2U2NGRlY29kZShwYXJ0c1sxXSk7XG4gICAgICAgIGlmICghZGVjb2RlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGVjb2RlIHRoZSB0b2tlbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRUb2tlbkV4cGlyYXRpb25EYXRlKHRva2VuOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBrZXlvZiBQaWNrPFRva2VuRGF0YSwgJ2V4cCcgfCAnaWF0Jz4gPSAnZXhwJ1xuICAgICk6IERhdGUgfCBudWxsIHtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IEp3dEhlbHBlci5kZWNvZGVUb2tlbih0b2tlbik7XG5cbiAgICAgICAgaWYgKCFkZWNvZGVkLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCk7IC8vIFRoZSAwIGhlcmUgaXMgdGhlIGtleSwgd2hpY2ggc2V0cyB0aGUgZGF0ZSB0byB0aGUgZXBvY2hcbiAgICAgICAgZGF0ZS5zZXRVVENTZWNvbmRzKGRlY29kZWRbcHJvcGVydHldKTtcblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzVG9rZW5FeHBpcmVkKHRva2VuOiBzdHJpbmcsIG9mZnNldFNlY29uZHM/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IEp3dEhlbHBlci5nZXRUb2tlbkV4cGlyYXRpb25EYXRlKHRva2VuKTtcbiAgICAgICAgcmV0dXJuIEp3dEhlbHBlci5pc0JlZm9yZShkYXRlLCBvZmZzZXRTZWNvbmRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzQmVmb3JlKGRhdGU6IERhdGUgfCBudWxsLCBvZmZzZXRTZWNvbmRzPzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIG9mZnNldFNlY29uZHMgPSBvZmZzZXRTZWNvbmRzIHx8IDA7XG5cbiAgICAgICAgaWYgKGRhdGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVG9rZW4gZXhwaXJlZD9cbiAgICAgICAgcmV0dXJuIGRhdGUudmFsdWVPZigpIDwgKG5ldyBEYXRlKCkudmFsdWVPZigpICsgKG9mZnNldFNlY29uZHMgKiAxMDAwKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVGVzdFRva2VuKHBheWxvYWQ6IFRva2VuRGF0YSk6IHN0cmluZyB7XG4gICAgLy8gRG9uJ3QgYWN0dWFsbHkgY2hlY2sgb3IgY2FyZSBhYm91dCB0aGUgaGVhZGVyIG9yIHNpZ25hdHVyZSBpbiBhbmd1bGFyMi1qd3RcbiAgICByZXR1cm4gYC4ke2Jhc2U2NGVuY29kZShKU09OLnN0cmluZ2lmeShwYXlsb2FkKSl9LmA7XG59XG4iXX0=