@villedemontreal/jwt-validator 5.7.12 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36,7 +36,7 @@ class JwtValidator {
36
36
  const key = await this.getJwtPublicKey(payload);
37
37
  this.validateJwtCreationTimestamp(payload, key);
38
38
  this.validateJwtExpirationTimestamp(payload, key);
39
- return this.verifyJwt(token, key.publicKey);
39
+ return this.verifyJwt(token, key);
40
40
  }
41
41
  parseJwt(token) {
42
42
  const payload = jwt.decode(token);
@@ -52,7 +52,7 @@ class JwtValidator {
52
52
  verifyJwt(token, publicKey) {
53
53
  let payload;
54
54
  try {
55
- payload = jwt.verify(token, publicKey);
55
+ payload = jwt.verify(token, publicKey.parsedPublicKey ?? publicKey.publicKey);
56
56
  }
57
57
  catch (err) {
58
58
  throw (0, customError_1.createInvalidJwtError)({
@@ -1 +1 @@
1
- {"version":3,"file":"jwtValidator.js","sourceRoot":"","sources":["../../src/jwtValidator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jwtValidator.js","sourceRoot":"","sources":["../../src/jwtValidator.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ /// <reference types="node" />
2
+ import * as crypto from 'crypto';
1
3
  /**
2
4
  * The content of public key
3
5
  */
@@ -5,6 +7,7 @@ export interface IPublicKey {
5
7
  id: number;
6
8
  algorithm: string;
7
9
  publicKey: string;
10
+ parsedPublicKey?: crypto.KeyObject;
8
11
  state: PublicKeyState;
9
12
  createdAt?: string;
10
13
  expiresAt?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"publicKey.js","sourceRoot":"","sources":["../../../src/models/publicKey.ts"],"names":[],"mappings":";;;AAyBA;;GAEG;AACH,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,qCAAmB,CAAA;IACnB,qCAAmB,CAAA;AACrB,CAAC,EAJW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAIzB"}
1
+ {"version":3,"file":"publicKey.js","sourceRoot":"","sources":["../../../src/models/publicKey.ts"],"names":[],"mappings":";;;AA4BA;;GAEG;AACH,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,qCAAmB,CAAA;IACnB,qCAAmB,CAAA;AACrB,CAAC,EAJW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAIzB"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.publicKeyRepository = void 0;
4
4
  const http_request_1 = require("@villedemontreal/http-request");
5
+ const crypto = require("crypto");
5
6
  const lodash_1 = require("lodash");
6
7
  const superagent = require("superagent");
7
8
  const general_utils_1 = require("@villedemontreal/general-utils");
@@ -13,11 +14,15 @@ class PublicKeyRepository {
13
14
  const request = superagent.get(url);
14
15
  const response = await http_request_1.httpUtils.send(request);
15
16
  if (!response.ok) {
16
- throw new Error(`An error occured calling ${url} : ${response.error}`);
17
+ throw new Error(`An error occurred calling ${url} : ${response.error}`);
17
18
  }
18
19
  const data = response.body;
19
20
  if (data && data.items && (0, lodash_1.isArray)(data.items)) {
20
- const newKeys = (0, lodash_1.keyBy)(data.items, (item) => item.id);
21
+ const items = data.items.map((key) => ({
22
+ ...key,
23
+ parsedPublicKey: crypto.createPublicKey(key.publicKey),
24
+ }));
25
+ const newKeys = (0, lodash_1.keyBy)(items, (item) => item.id);
21
26
  return newKeys;
22
27
  }
23
28
  return null;
@@ -33,11 +38,14 @@ class PublicKeyRepository {
33
38
  if (response.status === 404) {
34
39
  return null;
35
40
  }
36
- throw (0, general_utils_1.createError)(constants_1.constants.errors.codes.UNABLE_TO_GET_PUBLIC_KEY, `An error occured calling ${url} : ${response.error}`)
41
+ throw (0, general_utils_1.createError)(constants_1.constants.errors.codes.UNABLE_TO_GET_PUBLIC_KEY, `An error occurred calling ${url} : ${response.error}`)
37
42
  .httpStatus(response.status)
38
43
  .build();
39
44
  }
40
- return response.body;
45
+ return {
46
+ ...response.body,
47
+ parsedPublicKey: crypto.createPublicKey(response.body.publicKey),
48
+ };
41
49
  }
42
50
  }
43
51
  exports.publicKeyRepository = new PublicKeyRepository();
@@ -1 +1 @@
1
- {"version":3,"file":"publicKeyRepository.js","sourceRoot":"","sources":["../../../src/repositories/publicKeyRepository.ts"],"names":[],"mappings":";;;AAAA,gEAA0D;AAC1D,mCAAwC;AACxC,yCAAyC;AAEzC,kEAA6D;AAC7D,+CAA4C;AAC5C,mDAAgD;AAuBhD,MAAM,mBAAmB;IAChB,KAAK,CAAC,MAAM;QACjB,MAAM,GAAG,GAAG,GAAG,wBAAS,CAAC,OAAO,CAC9B,iBAAO,CAAC,OAAO,EAAE,EACjB,iBAAO,CAAC,WAAW,EAAE,CACtB,IAAI,iBAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,wBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;SACxE;QAED,MAAM,IAAI,GAAiC,QAAQ,CAAC,IAAI,CAAC;QACzD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC7C,MAAM,OAAO,GAAgB,IAAA,cAAK,EAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClE,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAa;QAC/B,MAAM,GAAG,GAAG,wBAAS,CAAC,OAAO,CAAC,iBAAO,CAAC,OAAO,EAAE,EAAE,iBAAO,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1F,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,wBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,6CAA6C;YAC7C,4BAA4B;YAC5B,6CAA6C;YAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC3B,OAAO,IAAI,CAAC;aACb;YAED,MAAM,IAAA,2BAAW,EACf,qBAAS,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAC/C,4BAA4B,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CACtD;iBACE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;iBAC3B,KAAK,EAAE,CAAC;SACZ;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;CACF;AAEY,QAAA,mBAAmB,GAAyB,IAAI,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"publicKeyRepository.js","sourceRoot":"","sources":["../../../src/repositories/publicKeyRepository.ts"],"names":[],"mappings":";;;AAAA,gEAA0D;AAC1D,iCAAiC;AACjC,mCAAwC;AACxC,yCAAyC;AAEzC,kEAA6D;AAC7D,+CAA4C;AAC5C,mDAAgD;AAuBhD,MAAM,mBAAmB;IAChB,KAAK,CAAC,MAAM;QACjB,MAAM,GAAG,GAAG,GAAG,wBAAS,CAAC,OAAO,CAC9B,iBAAO,CAAC,OAAO,EAAE,EACjB,iBAAO,CAAC,WAAW,EAAE,CACtB,IAAI,iBAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,wBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;SACzE;QAED,MAAM,IAAI,GAAiC,QAAQ,CAAC,IAAI,CAAC;QACzD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC7C,MAAM,KAAK,GAAiB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACnD,GAAG,GAAG;gBACN,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;aACvD,CAAC,CAAC,CAAC;YACJ,MAAM,OAAO,GAAgB,IAAA,cAAK,EAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7D,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAa;QAC/B,MAAM,GAAG,GAAG,wBAAS,CAAC,OAAO,CAAC,iBAAO,CAAC,OAAO,EAAE,EAAE,iBAAO,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1F,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,wBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,6CAA6C;YAC7C,4BAA4B;YAC5B,6CAA6C;YAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC3B,OAAO,IAAI,CAAC;aACb;YAED,MAAM,IAAA,2BAAW,EACf,qBAAS,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAC/C,6BAA6B,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CACvD;iBACE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;iBAC3B,KAAK,EAAE,CAAC;SACZ;QACD,OAAO;YACL,GAAG,QAAQ,CAAC,IAAI;YAChB,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;SACjE,CAAC;IACJ,CAAC;CACF;AAEY,QAAA,mBAAmB,GAAyB,IAAI,mBAAmB,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@villedemontreal/jwt-validator",
3
- "version": "5.7.12",
3
+ "version": "5.8.0",
4
4
  "description": "Module to validate JWT (JSON Web Tokens)",
5
5
  "main": "dist/src/index.js",
6
6
  "typings": "dist/src",
@@ -50,8 +50,8 @@
50
50
  "@types/express": "4.17.17",
51
51
  "@types/http-status-codes": "1.2.0",
52
52
  "@types/jsonwebtoken": "9.0.1",
53
- "@types/lodash": "4.14.191",
54
- "@types/node": "18.15.3",
53
+ "@types/lodash": "4.14.192",
54
+ "@types/node": "18.15.11",
55
55
  "@types/request": "2.48.8",
56
56
  "@types/request-promise-native": "1.0.18",
57
57
  "@types/superagent": "4.1.16",
@@ -60,23 +60,23 @@
60
60
  "@types/mocha": "10.0.1",
61
61
  "@types/sinon": "10.0.13",
62
62
  "@types/validator": "13.7.14",
63
- "@typescript-eslint/eslint-plugin": "5.55.0",
64
- "@typescript-eslint/parser": "5.55.0",
63
+ "@typescript-eslint/eslint-plugin": "5.57.1",
64
+ "@typescript-eslint/parser": "5.57.1",
65
65
  "@villedemontreal/scripting": "2.1.6",
66
66
  "chai": "4.3.7",
67
- "eslint": "8.36.0",
68
- "eslint-config-prettier": "8.7.0",
67
+ "eslint": "8.38.0",
68
+ "eslint-config-prettier": "8.8.0",
69
69
  "eslint-plugin-prettier": "4.2.1",
70
- "fs-extra": "11.1.0",
70
+ "fs-extra": "11.1.1",
71
71
  "mocha": "10.2.0",
72
72
  "mocha-jenkins-reporter": "0.4.8",
73
73
  "mock-express-request": "0.2.2",
74
74
  "node-mocks-http": "1.12.2",
75
75
  "node-notifier": "10.0.1",
76
76
  "nyc": "15.1.0",
77
- "sinon": "15.0.2",
77
+ "sinon": "15.0.3",
78
78
  "superagent-mocker": "0.5.2",
79
- "typescript": "5.0.2",
79
+ "typescript": "5.0.4",
80
80
  "validator": "13.9.0"
81
81
  }
82
82
  }
@@ -61,7 +61,7 @@ class JwtValidator implements IJwtValidator {
61
61
  this.validateJwtCreationTimestamp(payload, key);
62
62
  this.validateJwtExpirationTimestamp(payload, key);
63
63
 
64
- return this.verifyJwt(token, key.publicKey);
64
+ return this.verifyJwt(token, key);
65
65
  }
66
66
 
67
67
  private parseJwt(token: string): IJWTPayload {
@@ -76,10 +76,10 @@ class JwtValidator implements IJwtValidator {
76
76
  return payload;
77
77
  }
78
78
 
79
- private verifyJwt(token: string, publicKey: string): IJWTPayload {
79
+ private verifyJwt(token: string, publicKey: IPublicKey): IJWTPayload {
80
80
  let payload: any;
81
81
  try {
82
- payload = jwt.verify(token, publicKey);
82
+ payload = jwt.verify(token, publicKey.parsedPublicKey ?? publicKey.publicKey);
83
83
  } catch (err) {
84
84
  throw createInvalidJwtError({
85
85
  code: constants.errors.codes.INVALID_VALUE,
@@ -1,3 +1,5 @@
1
+ import * as crypto from 'crypto';
2
+
1
3
  /**
2
4
  * The content of public key
3
5
  */
@@ -5,6 +7,7 @@ export interface IPublicKey {
5
7
  id: number;
6
8
  algorithm: string;
7
9
  publicKey: string;
10
+ parsedPublicKey?: crypto.KeyObject;
8
11
  state: PublicKeyState;
9
12
  createdAt?: string;
10
13
  expiresAt?: string;
@@ -1,4 +1,5 @@
1
1
  import { httpUtils } from '@villedemontreal/http-request';
2
+ import * as crypto from 'crypto';
2
3
  import { isArray, keyBy } from 'lodash';
3
4
  import * as superagent from 'superagent';
4
5
 
@@ -37,12 +38,16 @@ class PublicKeyRepository implements IPublicKeyRepository {
37
38
 
38
39
  const response = await httpUtils.send(request);
39
40
  if (!response.ok) {
40
- throw new Error(`An error occured calling ${url} : ${response.error}`);
41
+ throw new Error(`An error occurred calling ${url} : ${response.error}`);
41
42
  }
42
43
 
43
44
  const data: IPaginatedResult<IPublicKey> = response.body;
44
45
  if (data && data.items && isArray(data.items)) {
45
- const newKeys: IPublicKeys = keyBy(data.items, (item) => item.id);
46
+ const items: IPublicKey[] = data.items.map((key) => ({
47
+ ...key,
48
+ parsedPublicKey: crypto.createPublicKey(key.publicKey),
49
+ }));
50
+ const newKeys: IPublicKeys = keyBy(items, (item) => item.id);
46
51
  return newKeys;
47
52
  }
48
53
  return null;
@@ -63,12 +68,15 @@ class PublicKeyRepository implements IPublicKeyRepository {
63
68
 
64
69
  throw createError(
65
70
  constants.errors.codes.UNABLE_TO_GET_PUBLIC_KEY,
66
- `An error occured calling ${url} : ${response.error}`
71
+ `An error occurred calling ${url} : ${response.error}`
67
72
  )
68
73
  .httpStatus(response.status)
69
74
  .build();
70
75
  }
71
- return response.body;
76
+ return {
77
+ ...response.body,
78
+ parsedPublicKey: crypto.createPublicKey(response.body.publicKey),
79
+ };
72
80
  }
73
81
  }
74
82