Skip to content

Commit a7bc8a4

Browse files
authored
Merge pull request #57 from axa-group/ntk/fix_regression
When adding a key to the KeyStore, do not normalize key "use" value to "sig" when already defined
2 parents 801fd2e + 35259fa commit a7bc8a4

File tree

5 files changed

+560
-493
lines changed

5 files changed

+560
-493
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
44

55
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
66

7+
## [3.0.3](https://github.com/axa-group/oauth2-mock-server/compare/v3.0.2...v3.0.3) — 2020-11-12
8+
9+
### Fixed
10+
11+
- Fix regression: When adding a key to the KeyStore, do not normalize key "use" value to "sig" when already defined
12+
713
## [3.0.2](https://github.com/axa-group/oauth2-mock-server/compare/v3.0.1...v3.0.2) — 2020-10-29
814

915
### Added

package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "oauth2-mock-server",
3-
"version": "3.0.2",
3+
"version": "3.0.3",
44
"description": "OAuth 2 mock server",
55
"keywords": [
66
"oauth",
@@ -63,27 +63,27 @@
6363
"@types/basic-auth": "^1.1.3",
6464
"@types/body-parser": "^1.19.0",
6565
"@types/cors": "^2.8.8",
66-
"@types/express": "^4.17.8",
66+
"@types/express": "^4.17.9",
6767
"@types/jest": "^26.0.15",
6868
"@types/jsonwebtoken": "^8.5.0",
6969
"@types/lodash.isplainobject": "^4.0.6",
7070
"@types/node": "^10.17.44",
7171
"@types/supertest": "^2.0.10",
7272
"@types/uuid": "^8.3.0",
73-
"@typescript-eslint/eslint-plugin": "^4.6.0",
74-
"@typescript-eslint/parser": "^4.6.0",
75-
"eslint": "^7.12.1",
73+
"@typescript-eslint/eslint-plugin": "^4.7.0",
74+
"@typescript-eslint/parser": "^4.7.0",
75+
"eslint": "^7.13.0",
7676
"eslint-config-prettier": "^6.15.0",
7777
"eslint-plugin-import": "^2.22.1",
7878
"eslint-plugin-jest": "^24.1.0",
79-
"eslint-plugin-jsdoc": "^30.7.3",
79+
"eslint-plugin-jsdoc": "^30.7.7",
8080
"eslint-plugin-prettier": "^3.1.4",
81-
"jest": "^26.6.1",
81+
"jest": "^26.6.3",
8282
"jest-junit": "^12.0.0",
8383
"prettier": "^2.1.2",
8484
"rimraf": "^3.0.2",
85-
"supertest": "^6.0.0",
86-
"ts-jest": "^26.4.3",
85+
"supertest": "^6.0.1",
86+
"ts-jest": "^26.4.4",
8787
"ts-node": "^9.0.0",
8888
"typescript": "^4.0.5"
8989
}

src/lib/jwk-store.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@ export class JWKStore {
6161
* @returns {Promise<JWK.Key>} The promise for the added key.
6262
*/
6363
async add(jwk: JWK.Key): Promise<JWK.Key> {
64-
const jwkUse: JWK.Key = { ...jwk, use: 'sig' };
64+
const jwkUse: JWK.Key = { ...jwk };
65+
66+
if (!('use' in jwkUse)) {
67+
Object.assign(jwkUse, { use: 'sig' });
68+
}
6569

6670
const key = await this.#store.add(jwkUse);
6771
this.#keyRotator.add(key);

test/jwk-store.test.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { JWK } from 'node-jose';
12
import { JWKStore } from '../src/lib/jwk-store';
23
import * as testKeys from './keys';
34

@@ -122,4 +123,40 @@ describe('JWK Store', () => {
122123
expect(jwk).toHaveProperty(prop);
123124
});
124125
});
126+
127+
it('should normalize key "use" value to "sig" when unset', async () => {
128+
const initialKey = testKeys.getParsed('test-rsa-key.json')
129+
130+
expect(initialKey).not.toHaveProperty("use");
131+
132+
const store = new JWKStore();
133+
const key = await store.add(initialKey);
134+
135+
expect(key).toHaveProperty("use");
136+
expect(key.use).toEqual("sig")
137+
138+
const retrievedKey = store.get(key.kid)
139+
140+
expect(retrievedKey).toHaveProperty("use");
141+
expect(key.use).toEqual("sig")
142+
})
143+
144+
it('should preserve key "use" value when set', async () => {
145+
const initialKey = testKeys.getParsed('test-rsa-key.json')
146+
147+
expect(initialKey).not.toHaveProperty("use");
148+
149+
const keyWithUseProperty: JWK.Key = { ...initialKey, use: 'enc' }
150+
151+
const store = new JWKStore();
152+
const key = await store.add(keyWithUseProperty);
153+
154+
expect(key).toHaveProperty("use");
155+
expect(key.use).toEqual("enc")
156+
157+
const retrievedKey = store.get(key.kid)
158+
159+
expect(retrievedKey).toHaveProperty("use");
160+
expect(key.use).toEqual("enc")
161+
})
125162
});

0 commit comments

Comments
 (0)