diff --git a/examples/generate.ts b/examples/generate.ts index 9bc7f3a..572906b 100644 --- a/examples/generate.ts +++ b/examples/generate.ts @@ -7,7 +7,8 @@ async function main() { '403697de87af64611c1d32a05dab0fe1fcb715a86ab435f1ec99192d79569388', 'hex' ) - } + }, + expectCwtTag: true }); const base64encoded = await generator.generate( { diff --git a/src/cat.test.ts b/src/cat.test.ts index 7f2eee1..b081db3 100644 --- a/src/cat.test.ts +++ b/src/cat.test.ts @@ -74,7 +74,8 @@ describe('CAT', () => { kid: 'AsymmetricECDSA256' }; await cat.verify(token, verifyKey); - expect(cat.claims).toEqual(claims); + const claimsWithCatv = { ...claims, catv: 1 }; + expect(cat.claims).toEqual(claimsWithCatv); }); test('can create a CAT object from a signed base64 encoded token', async () => { @@ -157,7 +158,10 @@ describe('CAT', () => { cti: '0b71', catr: { type: 'header', - 'header-name': 'cta-common-access-token' + 'header-name': 'cta-common-access-token', + 'header-params': ['value1'], + 'cookie-name': 'myname', + 'cookie-params': ['cookievalue'] } }); expect(cat.claims).toEqual({ @@ -170,7 +174,10 @@ describe('CAT', () => { cti: '0b71', catr: { type: 'header', - 'header-name': 'cta-common-access-token' + 'header-name': 'cta-common-access-token', + 'header-params': ['value1'], + 'cookie-name': 'myname', + 'cookie-params': ['cookievalue'] }, catv: 1 }); diff --git a/src/cat.ts b/src/cat.ts index b131489..8c15ed2 100644 --- a/src/cat.ts +++ b/src/cat.ts @@ -207,10 +207,35 @@ function updateMapFromClaims( } for (const param in dict) { const key = claimsToLabels[param] ? claimsToLabels[param] : parseInt(param); - const value = claimTransform[param] - ? claimTransform[param](dict[param] as string) - : dict[param]; - map.set(key, value); + if (key === claimsToLabels['catu'] && !(dict[param] instanceof Map)) { + map.set(key, CommonAccessTokenUri.fromDict(dict[param] as any).payload); + } else if ( + key === claimsToLabels['catr'] && + !(dict[param] instanceof Map) + ) { + map.set( + key, + CommonAccessTokenRenewal.fromDict(dict[param] as any).payload + ); + } else if ( + key === claimsToLabels['cath'] && + !(dict[param] instanceof Map) + ) { + map.set( + key, + CommonAccessTokenHeader.fromDict(dict[param] as any).payload + ); + } else if ( + key === claimsToLabels['catif'] && + !(dict[param] instanceof Map) + ) { + map.set(key, CommonAccessTokenIf.fromDict(dict[param] as any).payload); + } else { + const value = claimTransform[param] + ? claimTransform[param](dict[param] as string) + : dict[param]; + map.set(key, value); + } } return map; } @@ -262,10 +287,10 @@ export class CommonAccessToken { private kid?: string; constructor(claims: CommonAccessTokenClaims) { - if (!claims['catv']) { - claims['catv'] = 1; - } this.payload = updateMapFromClaims(claims); + if (!this.payload.has(claimsToLabels['catv'])) { + this.payload.set(claimsToLabels['catv'], 1); + } this.validateTypes(); } diff --git a/src/index.test.ts b/src/index.test.ts index 5661f89..9cc4b45 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -192,10 +192,11 @@ describe('CAT', () => { ) } }); + const exp = Math.floor(Date.now() / 1000) + 60; const base64encoded = await generator.generateFromJson( { iss: 'eyevinn', - exp: 1742984408, + exp, iat: 1742980808, cti: '66400ca63ab2c267cc0d874cc5f9a378', catv: 1 @@ -206,7 +207,6 @@ describe('CAT', () => { kid: 'Symmetric256' } ); - console.log(base64encoded); expect(base64encoded).not.toContain('='); const validator = new CAT({ keys: { @@ -223,7 +223,7 @@ describe('CAT', () => { expect(result.cat).toBeDefined(); expect(result.cat!.claims).toEqual({ iss: 'eyevinn', - exp: 1742984408, + exp, iat: 1742980808, cti: '66400ca63ab2c267cc0d874cc5f9a378', catv: 1