samlify 2.12.0 → 2.13.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.
Files changed (84) hide show
  1. package/README.md +1 -1
  2. package/build/src/api.js +41 -3
  3. package/build/src/api.js.map +1 -1
  4. package/build/src/binding-post.js +236 -182
  5. package/build/src/binding-post.js.map +1 -1
  6. package/build/src/binding-redirect.js +303 -215
  7. package/build/src/binding-redirect.js.map +1 -1
  8. package/build/src/binding-simplesign.js +285 -137
  9. package/build/src/binding-simplesign.js.map +1 -1
  10. package/build/src/entity-idp.js +130 -47
  11. package/build/src/entity-idp.js.map +1 -1
  12. package/build/src/entity-sp.js +81 -39
  13. package/build/src/entity-sp.js.map +1 -1
  14. package/build/src/entity.js +100 -62
  15. package/build/src/entity.js.map +1 -1
  16. package/build/src/extractor.js +118 -151
  17. package/build/src/extractor.js.map +1 -1
  18. package/build/src/flow.js +100 -96
  19. package/build/src/flow.js.map +1 -1
  20. package/build/src/libsaml.js +315 -259
  21. package/build/src/libsaml.js.map +1 -1
  22. package/build/src/metadata-idp.js +60 -30
  23. package/build/src/metadata-idp.js.map +1 -1
  24. package/build/src/metadata-sp.js +51 -41
  25. package/build/src/metadata-sp.js.map +1 -1
  26. package/build/src/metadata.js +47 -43
  27. package/build/src/metadata.js.map +1 -1
  28. package/build/src/options.js +73 -0
  29. package/build/src/options.js.map +1 -0
  30. package/build/src/urn.js +28 -1
  31. package/build/src/urn.js.map +1 -1
  32. package/build/src/utility.js +140 -85
  33. package/build/src/utility.js.map +1 -1
  34. package/build/src/validator.js +27 -10
  35. package/build/src/validator.js.map +1 -1
  36. package/package.json +16 -5
  37. package/types/src/api.d.ts +33 -3
  38. package/types/src/binding-post.d.ts +67 -34
  39. package/types/src/binding-redirect.d.ts +58 -31
  40. package/types/src/binding-simplesign.d.ts +77 -21
  41. package/types/src/entity-idp.d.ts +40 -31
  42. package/types/src/entity-sp.d.ts +37 -27
  43. package/types/src/entity.d.ts +71 -77
  44. package/types/src/extractor.d.ts +31 -22
  45. package/types/src/flow.d.ts +24 -2
  46. package/types/src/libsaml.d.ts +172 -118
  47. package/types/src/metadata-idp.d.ts +27 -11
  48. package/types/src/metadata-sp.d.ts +29 -19
  49. package/types/src/metadata.d.ts +59 -34
  50. package/types/src/options.d.ts +37 -0
  51. package/types/src/types.d.ts +250 -24
  52. package/types/src/urn.d.ts +7 -0
  53. package/types/src/utility.d.ts +139 -90
  54. package/types/src/validator.d.ts +21 -0
  55. package/.circleci/config.yml +0 -98
  56. package/.editorconfig +0 -19
  57. package/.github/FUNDING.yml +0 -1
  58. package/.github/workflows/deploy-docs.yml +0 -56
  59. package/.pre-commit.sh +0 -15
  60. package/.snyk +0 -4
  61. package/Makefile +0 -25
  62. package/index.ts +0 -28
  63. package/samlify-2.11.0.tgz +0 -0
  64. package/src/api.ts +0 -48
  65. package/src/binding-post.ts +0 -336
  66. package/src/binding-redirect.ts +0 -335
  67. package/src/binding-simplesign.ts +0 -231
  68. package/src/entity-idp.ts +0 -145
  69. package/src/entity-sp.ts +0 -114
  70. package/src/entity.ts +0 -243
  71. package/src/extractor.ts +0 -399
  72. package/src/flow.ts +0 -469
  73. package/src/libsaml.ts +0 -779
  74. package/src/metadata-idp.ts +0 -146
  75. package/src/metadata-sp.ts +0 -203
  76. package/src/metadata.ts +0 -166
  77. package/src/types.ts +0 -127
  78. package/src/urn.ts +0 -210
  79. package/src/utility.ts +0 -259
  80. package/src/validator.ts +0 -44
  81. package/tsconfig.json +0 -41
  82. package/tslint.json +0 -35
  83. package/types.d.ts +0 -2
  84. package/vitest.config.ts +0 -12
package/build/src/flow.js CHANGED
@@ -56,6 +56,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
56
56
  };
57
57
  Object.defineProperty(exports, "__esModule", { value: true });
58
58
  exports.flow = flow;
59
+ /**
60
+ * @file flow.ts
61
+ * @author tngan
62
+ * @desc Inbound SAML message pipeline. Dispatches between POST, Redirect,
63
+ * and POST-SimpleSign flows, handling decoding, schema validation, status
64
+ * checks, signature verification, and time-window validation.
65
+ */
59
66
  var utility_1 = require("./utility");
60
67
  var validator_1 = require("./validator");
61
68
  var libsaml_1 = __importDefault(require("./libsaml"));
@@ -63,14 +70,20 @@ var extractor_1 = require("./extractor");
63
70
  var urn_1 = require("./urn");
64
71
  var bindDict = urn_1.wording.binding;
65
72
  var urlParams = urn_1.wording.urlParams;
66
- // get the default extractor fields based on the parserType
73
+ /**
74
+ * Map a parser type onto the default extractor fields that populate
75
+ * {@link FlowResult.extract}. Login-response extraction is parameterised by
76
+ * the verified assertion fragment to defend against wrapping attacks.
77
+ *
78
+ * @param parserType SAML message type
79
+ * @param assertion verified assertion XML (required for SAMLResponse)
80
+ */
67
81
  function getDefaultExtractorFields(parserType, assertion) {
68
82
  switch (parserType) {
69
83
  case urn_1.ParserType.SAMLRequest:
70
84
  return extractor_1.loginRequestFields;
71
85
  case urn_1.ParserType.SAMLResponse:
72
86
  if (!assertion) {
73
- // unexpected hit
74
87
  throw new Error('ERR_EMPTY_ASSERTION');
75
88
  }
76
89
  return (0, extractor_1.loginResponseFields)(assertion);
@@ -82,47 +95,48 @@ function getDefaultExtractorFields(parserType, assertion) {
82
95
  throw new Error('ERR_UNDEFINED_PARSERTYPE');
83
96
  }
84
97
  }
85
- // proceed the redirect binding flow
98
+ /**
99
+ * Redirect-binding flow: reads the base64/deflate SAML message from query
100
+ * params and, when required, verifies the detached signature over the
101
+ * canonical octet string.
102
+ */
86
103
  function redirectFlow(options) {
87
104
  return __awaiter(this, void 0, void 0, function () {
88
- var request, parserType, self, _a, checkSignature, from, query, octetString, sigAlg, signature, targetEntityMetadata, direction, content, xmlString, e_1, assertion, verifiedDoc, extractorFields, parseResult, base64Signature, decodeSigAlg, verified, issuer, extractedProperties;
89
- return __generator(this, function (_b) {
90
- switch (_b.label) {
105
+ var request, parserType, self, _a, checkSignature, from, query, octetString, _b, sigAlg, signature, targetEntityMetadata, direction, content, xmlString, _c, assertion, verifiedDoc, extractorFields, parseResult, base64Signature, decodeSigAlg, verified, issuer, extractedProperties;
106
+ var _d;
107
+ return __generator(this, function (_e) {
108
+ switch (_e.label) {
91
109
  case 0:
92
110
  request = options.request, parserType = options.parserType, self = options.self, _a = options.checkSignature, checkSignature = _a === void 0 ? true : _a, from = options.from;
93
111
  query = request.query, octetString = request.octetString;
94
- sigAlg = query.SigAlg, signature = query.Signature;
112
+ _b = query, sigAlg = _b.SigAlg, signature = _b.Signature;
95
113
  targetEntityMetadata = from.entityMeta;
96
114
  direction = libsaml_1.default.getQueryParamByType(parserType);
97
115
  content = query[direction];
98
- // query must contain the saml content
99
116
  if (content === undefined) {
100
- return [2 /*return*/, Promise.reject('ERR_REDIRECT_FLOW_BAD_ARGS')];
117
+ return [2 /*return*/, Promise.reject(new Error('ERR_REDIRECT_FLOW_BAD_ARGS'))];
101
118
  }
102
119
  xmlString = (0, utility_1.inflateString)(decodeURIComponent(content));
103
- _b.label = 1;
120
+ _e.label = 1;
104
121
  case 1:
105
- _b.trys.push([1, 3, , 4]);
122
+ _e.trys.push([1, 3, , 4]);
106
123
  return [4 /*yield*/, libsaml_1.default.isValidXml(xmlString)];
107
124
  case 2:
108
- _b.sent();
125
+ _e.sent();
109
126
  return [3 /*break*/, 4];
110
127
  case 3:
111
- e_1 = _b.sent();
112
- return [2 /*return*/, Promise.reject('ERR_INVALID_XML')];
113
- case 4:
114
- // check status based on different scenarios
115
- return [4 /*yield*/, checkStatus(xmlString, parserType)];
128
+ _c = _e.sent();
129
+ return [2 /*return*/, Promise.reject(new Error('ERR_INVALID_XML'))];
130
+ case 4: return [4 /*yield*/, checkStatus(xmlString, parserType)];
116
131
  case 5:
117
- // check status based on different scenarios
118
- _b.sent();
132
+ _e.sent();
119
133
  assertion = '';
120
134
  if (parserType === urlParams.samlResponse) {
121
135
  verifiedDoc = (0, extractor_1.extract)(xmlString, [{
122
136
  key: 'assertion',
123
137
  localPath: ['~Response', 'Assertion'],
124
138
  attributes: [],
125
- context: true
139
+ context: true,
126
140
  }]);
127
141
  if (verifiedDoc && verifiedDoc.assertion) {
128
142
  assertion = verifiedDoc.assertion;
@@ -134,54 +148,53 @@ function redirectFlow(options) {
134
148
  sigAlg: null,
135
149
  extract: (0, extractor_1.extract)(xmlString, extractorFields),
136
150
  };
137
- // see if signature check is required
138
- // only verify message signature is enough
139
151
  if (checkSignature) {
140
152
  if (!signature || !sigAlg) {
141
- return [2 /*return*/, Promise.reject('ERR_MISSING_SIG_ALG')];
153
+ return [2 /*return*/, Promise.reject(new Error('ERR_MISSING_SIG_ALG'))];
142
154
  }
143
155
  base64Signature = Buffer.from(decodeURIComponent(signature), 'base64');
144
156
  decodeSigAlg = decodeURIComponent(sigAlg);
145
157
  verified = libsaml_1.default.verifyMessageSignature(targetEntityMetadata, octetString, base64Signature, sigAlg);
146
158
  if (!verified) {
147
- // Fail to verify message signature
148
- return [2 /*return*/, Promise.reject('ERR_FAILED_MESSAGE_SIGNATURE_VERIFICATION')];
159
+ return [2 /*return*/, Promise.reject(new Error('ERR_FAILED_MESSAGE_SIGNATURE_VERIFICATION'))];
149
160
  }
150
161
  parseResult.sigAlg = decodeSigAlg;
151
162
  }
152
163
  issuer = targetEntityMetadata.getEntityID();
153
164
  extractedProperties = parseResult.extract;
154
- // unmatched issuer
155
165
  if ((parserType === 'LogoutResponse' || parserType === 'SAMLResponse')
156
166
  && extractedProperties
157
167
  && extractedProperties.issuer !== issuer) {
158
- return [2 /*return*/, Promise.reject('ERR_UNMATCH_ISSUER')];
168
+ return [2 /*return*/, Promise.reject(new Error('ERR_UNMATCH_ISSUER'))];
159
169
  }
160
- // invalid session time
161
- // only run the verifyTime when `SessionNotOnOrAfter` exists
170
+ // Session expiration — only enforced when SessionNotOnOrAfter is present.
162
171
  if (parserType === 'SAMLResponse'
163
- && extractedProperties.sessionIndex.sessionNotOnOrAfter
172
+ && ((_d = extractedProperties.sessionIndex) === null || _d === void 0 ? void 0 : _d.sessionNotOnOrAfter)
164
173
  && !(0, validator_1.verifyTime)(undefined, extractedProperties.sessionIndex.sessionNotOnOrAfter, self.entitySetting.clockDrifts)) {
165
- return [2 /*return*/, Promise.reject('ERR_EXPIRED_SESSION')];
174
+ return [2 /*return*/, Promise.reject(new Error('ERR_EXPIRED_SESSION'))];
166
175
  }
167
- // invalid time
168
- // 2.4.1.2 https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf
176
+ // Assertion validity window. SAML core 2.4.1.2.
169
177
  if (parserType === 'SAMLResponse'
170
178
  && extractedProperties.conditions
171
179
  && !(0, validator_1.verifyTime)(extractedProperties.conditions.notBefore, extractedProperties.conditions.notOnOrAfter, self.entitySetting.clockDrifts)) {
172
- return [2 /*return*/, Promise.reject('ERR_SUBJECT_UNCONFIRMED')];
180
+ return [2 /*return*/, Promise.reject(new Error('ERR_SUBJECT_UNCONFIRMED'))];
173
181
  }
174
182
  return [2 /*return*/, Promise.resolve(parseResult)];
175
183
  }
176
184
  });
177
185
  });
178
186
  }
179
- // proceed the post flow
187
+ /**
188
+ * POST-binding flow: reads the base64 SAML message from the request body
189
+ * and verifies the embedded XML signature. Supports both encrypted-then-
190
+ * signed and signed-then-encrypted assertion pipelines.
191
+ */
180
192
  function postFlow(options) {
181
193
  return __awaiter(this, void 0, void 0, function () {
182
194
  var request, from, self, parserType, _a, checkSignature, body, direction, encodedRequest, samlContent, verificationOptions, decryptRequired, extractorFields, _b, verified, verifiedAssertionNode, result, result, decryptedDoc, _c, decryptedDocVerified, verifiedDecryptedAssertion, parseResult, targetEntityMetadata, issuer, extractedProperties;
183
- return __generator(this, function (_d) {
184
- switch (_d.label) {
195
+ var _d;
196
+ return __generator(this, function (_e) {
197
+ switch (_e.label) {
185
198
  case 0:
186
199
  request = options.request, from = options.from, self = options.self, parserType = options.parserType, _a = options.checkSignature, checkSignature = _a === void 0 ? true : _a;
187
200
  body = request.body;
@@ -194,53 +207,46 @@ function postFlow(options) {
194
207
  };
195
208
  decryptRequired = from.entitySetting.isAssertionEncrypted;
196
209
  extractorFields = [];
197
- // validate the xml first
198
210
  return [4 /*yield*/, libsaml_1.default.isValidXml(samlContent)];
199
211
  case 1:
200
- // validate the xml first
201
- _d.sent();
212
+ _e.sent();
202
213
  if (parserType !== urlParams.samlResponse) {
203
214
  extractorFields = getDefaultExtractorFields(parserType, null);
204
215
  }
205
- // check status based on different scenarios
206
216
  return [4 /*yield*/, checkStatus(samlContent, parserType)];
207
217
  case 2:
208
- // check status based on different scenarios
209
- _d.sent();
218
+ _e.sent();
210
219
  if (!checkSignature) return [3 /*break*/, 7];
211
220
  _b = __read(libsaml_1.default.verifySignature(samlContent, verificationOptions), 2), verified = _b[0], verifiedAssertionNode = _b[1];
212
221
  if (!(decryptRequired && verified && parserType === 'SAMLResponse' && verifiedAssertionNode)) return [3 /*break*/, 4];
213
222
  return [4 /*yield*/, libsaml_1.default.decryptAssertion(self, verifiedAssertionNode)];
214
223
  case 3:
215
- result = _d.sent();
224
+ result = _e.sent();
216
225
  samlContent = result[0];
217
- // extractor depends on signed content
218
226
  extractorFields = getDefaultExtractorFields(parserType, result[1]);
219
227
  return [3 /*break*/, 7];
220
228
  case 4:
221
229
  if (!(decryptRequired && !verified)) return [3 /*break*/, 6];
222
230
  return [4 /*yield*/, libsaml_1.default.decryptAssertion(self, samlContent)];
223
231
  case 5:
224
- result = _d.sent();
232
+ result = _e.sent();
225
233
  decryptedDoc = result[0];
226
234
  _c = __read(libsaml_1.default.verifySignature(decryptedDoc, verificationOptions), 2), decryptedDocVerified = _c[0], verifiedDecryptedAssertion = _c[1];
227
235
  if (decryptedDocVerified) {
228
- // extractor depends on signed content
229
236
  extractorFields = getDefaultExtractorFields(parserType, verifiedDecryptedAssertion);
230
237
  }
231
238
  else {
232
- return [2 /*return*/, Promise.reject('FAILED_TO_VERIFY_SIGNATURE')];
239
+ return [2 /*return*/, Promise.reject(new Error('FAILED_TO_VERIFY_SIGNATURE'))];
233
240
  }
234
241
  return [3 /*break*/, 7];
235
242
  case 6:
236
243
  if (verified) {
237
- // extractor depends on signed content
238
244
  extractorFields = getDefaultExtractorFields(parserType, verifiedAssertionNode);
239
245
  }
240
246
  else {
241
- return [2 /*return*/, Promise.reject('FAILED_TO_VERIFY_SIGNATURE')];
247
+ return [2 /*return*/, Promise.reject(new Error('FAILED_TO_VERIFY_SIGNATURE'))];
242
248
  }
243
- _d.label = 7;
249
+ _e.label = 7;
244
250
  case 7:
245
251
  parseResult = {
246
252
  samlContent: samlContent,
@@ -249,37 +255,36 @@ function postFlow(options) {
249
255
  targetEntityMetadata = from.entityMeta;
250
256
  issuer = targetEntityMetadata.getEntityID();
251
257
  extractedProperties = parseResult.extract;
252
- // unmatched issuer
253
258
  if ((parserType === 'LogoutResponse' || parserType === 'SAMLResponse')
254
259
  && extractedProperties
255
260
  && extractedProperties.issuer !== issuer) {
256
- return [2 /*return*/, Promise.reject('ERR_UNMATCH_ISSUER')];
261
+ return [2 /*return*/, Promise.reject(new Error('ERR_UNMATCH_ISSUER'))];
257
262
  }
258
- // invalid session time
259
- // only run the verifyTime when `SessionNotOnOrAfter` exists
260
263
  if (parserType === 'SAMLResponse'
261
- && extractedProperties.sessionIndex.sessionNotOnOrAfter
264
+ && ((_d = extractedProperties.sessionIndex) === null || _d === void 0 ? void 0 : _d.sessionNotOnOrAfter)
262
265
  && !(0, validator_1.verifyTime)(undefined, extractedProperties.sessionIndex.sessionNotOnOrAfter, self.entitySetting.clockDrifts)) {
263
- return [2 /*return*/, Promise.reject('ERR_EXPIRED_SESSION')];
266
+ return [2 /*return*/, Promise.reject(new Error('ERR_EXPIRED_SESSION'))];
264
267
  }
265
- // invalid time
266
- // 2.4.1.2 https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf
267
268
  if (parserType === 'SAMLResponse'
268
269
  && extractedProperties.conditions
269
270
  && !(0, validator_1.verifyTime)(extractedProperties.conditions.notBefore, extractedProperties.conditions.notOnOrAfter, self.entitySetting.clockDrifts)) {
270
- return [2 /*return*/, Promise.reject('ERR_SUBJECT_UNCONFIRMED')];
271
+ return [2 /*return*/, Promise.reject(new Error('ERR_SUBJECT_UNCONFIRMED'))];
271
272
  }
272
273
  return [2 /*return*/, Promise.resolve(parseResult)];
273
274
  }
274
275
  });
275
276
  });
276
277
  }
277
- // proceed the post simple sign binding flow
278
+ /**
279
+ * POST-SimpleSign flow: reads the base64 SAML message from the request body
280
+ * together with a detached signature over the SimpleSign octet string.
281
+ */
278
282
  function postSimpleSignFlow(options) {
279
283
  return __awaiter(this, void 0, void 0, function () {
280
- var request, parserType, self, _a, checkSignature, from, body, octetString, targetEntityMetadata, direction, encodedRequest, sigAlg, signature, xmlString, e_2, assertion, verifiedDoc, extractorFields, parseResult, base64Signature, verified, issuer, extractedProperties;
281
- return __generator(this, function (_b) {
282
- switch (_b.label) {
284
+ var request, parserType, self, _a, checkSignature, from, body, octetString, targetEntityMetadata, direction, encodedRequest, sigAlg, signature, xmlString, _b, assertion, verifiedDoc, extractorFields, parseResult, base64Signature, verified, issuer, extractedProperties;
285
+ var _c;
286
+ return __generator(this, function (_d) {
287
+ switch (_d.label) {
283
288
  case 0:
284
289
  request = options.request, parserType = options.parserType, self = options.self, _a = options.checkSignature, checkSignature = _a === void 0 ? true : _a, from = options.from;
285
290
  body = request.body, octetString = request.octetString;
@@ -288,34 +293,30 @@ function postSimpleSignFlow(options) {
288
293
  encodedRequest = body[direction];
289
294
  sigAlg = body['SigAlg'];
290
295
  signature = body['Signature'];
291
- // query must contain the saml content
292
296
  if (encodedRequest === undefined) {
293
- return [2 /*return*/, Promise.reject('ERR_SIMPLESIGN_FLOW_BAD_ARGS')];
297
+ return [2 /*return*/, Promise.reject(new Error('ERR_SIMPLESIGN_FLOW_BAD_ARGS'))];
294
298
  }
295
299
  xmlString = String((0, utility_1.base64Decode)(encodedRequest));
296
- _b.label = 1;
300
+ _d.label = 1;
297
301
  case 1:
298
- _b.trys.push([1, 3, , 4]);
302
+ _d.trys.push([1, 3, , 4]);
299
303
  return [4 /*yield*/, libsaml_1.default.isValidXml(xmlString)];
300
304
  case 2:
301
- _b.sent();
305
+ _d.sent();
302
306
  return [3 /*break*/, 4];
303
307
  case 3:
304
- e_2 = _b.sent();
305
- return [2 /*return*/, Promise.reject('ERR_INVALID_XML')];
306
- case 4:
307
- // check status based on different scenarios
308
- return [4 /*yield*/, checkStatus(xmlString, parserType)];
308
+ _b = _d.sent();
309
+ return [2 /*return*/, Promise.reject(new Error('ERR_INVALID_XML'))];
310
+ case 4: return [4 /*yield*/, checkStatus(xmlString, parserType)];
309
311
  case 5:
310
- // check status based on different scenarios
311
- _b.sent();
312
+ _d.sent();
312
313
  assertion = '';
313
314
  if (parserType === urlParams.samlResponse) {
314
315
  verifiedDoc = (0, extractor_1.extract)(xmlString, [{
315
316
  key: 'assertion',
316
317
  localPath: ['~Response', 'Assertion'],
317
318
  attributes: [],
318
- context: true
319
+ context: true,
319
320
  }]);
320
321
  if (verifiedDoc && verifiedDoc.assertion) {
321
322
  assertion = verifiedDoc.assertion;
@@ -327,49 +328,48 @@ function postSimpleSignFlow(options) {
327
328
  sigAlg: null,
328
329
  extract: (0, extractor_1.extract)(xmlString, extractorFields),
329
330
  };
330
- // see if signature check is required
331
- // only verify message signature is enough
332
331
  if (checkSignature) {
333
332
  if (!signature || !sigAlg) {
334
- return [2 /*return*/, Promise.reject('ERR_MISSING_SIG_ALG')];
333
+ return [2 /*return*/, Promise.reject(new Error('ERR_MISSING_SIG_ALG'))];
335
334
  }
336
335
  base64Signature = Buffer.from(signature, 'base64');
337
336
  verified = libsaml_1.default.verifyMessageSignature(targetEntityMetadata, octetString, base64Signature, sigAlg);
338
337
  if (!verified) {
339
- // Fail to verify message signature
340
- return [2 /*return*/, Promise.reject('ERR_FAILED_MESSAGE_SIGNATURE_VERIFICATION')];
338
+ return [2 /*return*/, Promise.reject(new Error('ERR_FAILED_MESSAGE_SIGNATURE_VERIFICATION'))];
341
339
  }
342
340
  parseResult.sigAlg = sigAlg;
343
341
  }
344
342
  issuer = targetEntityMetadata.getEntityID();
345
343
  extractedProperties = parseResult.extract;
346
- // unmatched issuer
347
344
  if ((parserType === 'LogoutResponse' || parserType === 'SAMLResponse')
348
345
  && extractedProperties
349
346
  && extractedProperties.issuer !== issuer) {
350
- return [2 /*return*/, Promise.reject('ERR_UNMATCH_ISSUER')];
347
+ return [2 /*return*/, Promise.reject(new Error('ERR_UNMATCH_ISSUER'))];
351
348
  }
352
- // invalid session time
353
- // only run the verifyTime when `SessionNotOnOrAfter` exists
354
349
  if (parserType === 'SAMLResponse'
355
- && extractedProperties.sessionIndex.sessionNotOnOrAfter
350
+ && ((_c = extractedProperties.sessionIndex) === null || _c === void 0 ? void 0 : _c.sessionNotOnOrAfter)
356
351
  && !(0, validator_1.verifyTime)(undefined, extractedProperties.sessionIndex.sessionNotOnOrAfter, self.entitySetting.clockDrifts)) {
357
- return [2 /*return*/, Promise.reject('ERR_EXPIRED_SESSION')];
352
+ return [2 /*return*/, Promise.reject(new Error('ERR_EXPIRED_SESSION'))];
358
353
  }
359
- // invalid time
360
- // 2.4.1.2 https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf
361
354
  if (parserType === 'SAMLResponse'
362
355
  && extractedProperties.conditions
363
356
  && !(0, validator_1.verifyTime)(extractedProperties.conditions.notBefore, extractedProperties.conditions.notOnOrAfter, self.entitySetting.clockDrifts)) {
364
- return [2 /*return*/, Promise.reject('ERR_SUBJECT_UNCONFIRMED')];
357
+ return [2 /*return*/, Promise.reject(new Error('ERR_SUBJECT_UNCONFIRMED'))];
365
358
  }
366
359
  return [2 /*return*/, Promise.resolve(parseResult)];
367
360
  }
368
361
  });
369
362
  });
370
363
  }
364
+ /**
365
+ * Inspect the SAML `<Status>` code on a response and reject with a
366
+ * detailed error string when the top-tier code is not `Success`.
367
+ *
368
+ * @param content response XML
369
+ * @param parserType parser type (only SAMLResponse/LogoutResponse are checked)
370
+ * @returns `"OK"` when success or `"SKIPPED"` for non-response messages
371
+ */
371
372
  function checkStatus(content, parserType) {
372
- // only check response parser
373
373
  if (parserType !== urlParams.samlResponse && parserType !== urlParams.logoutResponse) {
374
374
  return Promise.resolve('SKIPPED');
375
375
  }
@@ -377,21 +377,25 @@ function checkStatus(content, parserType) {
377
377
  ? extractor_1.loginResponseStatusFields
378
378
  : extractor_1.logoutResponseStatusFields;
379
379
  var _a = (0, extractor_1.extract)(content, fields), top = _a.top, second = _a.second;
380
- // only resolve when top-tier status code is success
381
380
  if (top === urn_1.StatusCode.Success) {
382
381
  return Promise.resolve('OK');
383
382
  }
384
383
  if (!top) {
385
384
  throw new Error('ERR_UNDEFINED_STATUS');
386
385
  }
387
- // returns a detailed error for two-tier error code
388
386
  throw new Error("ERR_FAILED_STATUS with top tier code: ".concat(top, ", second tier code: ").concat(second));
389
387
  }
388
+ /**
389
+ * Entry point: dispatch an inbound SAML message to the matching binding
390
+ * handler based on `options.binding`.
391
+ *
392
+ * @param options flow inputs (request, parserType, entities, binding)
393
+ * @returns resolved {@link FlowResult} on success
394
+ */
390
395
  function flow(options) {
391
396
  var binding = options.binding;
392
397
  var parserType = options.parserType;
393
398
  options.supportBindings = [urn_1.BindingNamespace.Redirect, urn_1.BindingNamespace.Post, urn_1.BindingNamespace.SimpleSign];
394
- // saml response allows POST, REDIRECT
395
399
  if (parserType === urn_1.ParserType.SAMLResponse) {
396
400
  options.supportBindings = [urn_1.BindingNamespace.Post, urn_1.BindingNamespace.Redirect, urn_1.BindingNamespace.SimpleSign];
397
401
  }
@@ -404,6 +408,6 @@ function flow(options) {
404
408
  if (binding === bindDict.simpleSign) {
405
409
  return postSimpleSignFlow(options);
406
410
  }
407
- return Promise.reject('ERR_UNEXPECTED_FLOW');
411
+ return Promise.reject(new Error('ERR_UNEXPECTED_FLOW'));
408
412
  }
409
413
  //# sourceMappingURL=flow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/flow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/flow.ts"],"names":[],"mappings":"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"}