samlesa 2.12.3
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.
- package/.editorconfig +19 -0
- package/.github/FUNDING.yml +1 -0
- package/.idea/compiler.xml +6 -0
- package/.idea/deployment.xml +14 -0
- package/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/.idea/jsLibraryMappings.xml +6 -0
- package/.idea/modules.xml +8 -0
- package/.idea/samlify.iml +12 -0
- package/.idea/vcs.xml +6 -0
- package/.pre-commit.sh +15 -0
- package/.snyk +8 -0
- package/.travis.yml +29 -0
- package/LICENSE +22 -0
- package/Makefile +25 -0
- package/README.md +84 -0
- package/build/.idea/workspace.xml +58 -0
- package/build/index.js +65 -0
- package/build/index.js.map +1 -0
- package/build/src/api.js +24 -0
- package/build/src/api.js.map +1 -0
- package/build/src/binding-post.js +369 -0
- package/build/src/binding-post.js.map +1 -0
- package/build/src/binding-redirect.js +333 -0
- package/build/src/binding-redirect.js.map +1 -0
- package/build/src/binding-simplesign.js +233 -0
- package/build/src/binding-simplesign.js.map +1 -0
- package/build/src/entity-idp.js +131 -0
- package/build/src/entity-idp.js.map +1 -0
- package/build/src/entity-sp.js +97 -0
- package/build/src/entity-sp.js.map +1 -0
- package/build/src/entity.js +236 -0
- package/build/src/entity.js.map +1 -0
- package/build/src/extractor.js +370 -0
- package/build/src/extractor.js.map +1 -0
- package/build/src/flow.js +320 -0
- package/build/src/flow.js.map +1 -0
- package/build/src/libsaml.js +642 -0
- package/build/src/libsaml.js.map +1 -0
- package/build/src/metadata-idp.js +128 -0
- package/build/src/metadata-idp.js.map +1 -0
- package/build/src/metadata-sp.js +232 -0
- package/build/src/metadata-sp.js.map +1 -0
- package/build/src/metadata.js +177 -0
- package/build/src/metadata.js.map +1 -0
- package/build/src/types.js +12 -0
- package/build/src/types.js.map +1 -0
- package/build/src/urn.js +213 -0
- package/build/src/urn.js.map +1 -0
- package/build/src/utility.js +249 -0
- package/build/src/utility.js.map +1 -0
- package/build/src/validator.js +27 -0
- package/build/src/validator.js.map +1 -0
- package/index.d.ts +10 -0
- package/index.js +19 -0
- package/index.js.map +1 -0
- package/index.ts +28 -0
- package/package.json +74 -0
- package/qodana.yaml +29 -0
- package/src/.idea/modules.xml +8 -0
- package/src/.idea/src.iml +12 -0
- package/src/.idea/vcs.xml +6 -0
- package/src/api.ts +36 -0
- package/src/binding-post.ts +338 -0
- package/src/binding-redirect.ts +331 -0
- package/src/binding-simplesign.ts +231 -0
- package/src/entity-idp.ts +145 -0
- package/src/entity-sp.ts +114 -0
- package/src/entity.ts +243 -0
- package/src/extractor.ts +392 -0
- package/src/flow.ts +467 -0
- package/src/libsaml.ts +786 -0
- package/src/metadata-idp.ts +146 -0
- package/src/metadata-sp.ts +268 -0
- package/src/metadata.ts +166 -0
- package/src/types.ts +153 -0
- package/src/urn.ts +211 -0
- package/src/utility.ts +248 -0
- package/src/validator.ts +44 -0
- package/tsconfig.json +38 -0
- package/tslint.json +35 -0
- package/types/index.d.ts +10 -0
- package/types/src/api.d.ts +13 -0
- package/types/src/binding-post.d.ts +46 -0
- package/types/src/binding-redirect.d.ts +52 -0
- package/types/src/binding-simplesign.d.ts +39 -0
- package/types/src/entity-idp.d.ts +42 -0
- package/types/src/entity-sp.d.ts +36 -0
- package/types/src/entity.d.ts +99 -0
- package/types/src/extractor.d.ts +25 -0
- package/types/src/flow.d.ts +6 -0
- package/types/src/libsaml.d.ts +210 -0
- package/types/src/metadata-idp.d.ts +24 -0
- package/types/src/metadata-sp.d.ts +36 -0
- package/types/src/metadata.d.ts +57 -0
- package/types/src/types.d.ts +127 -0
- package/types/src/urn.d.ts +194 -0
- package/types/src/utility.d.ts +134 -0
- package/types/src/validator.d.ts +3 -0
- package/types.d.ts +2 -0
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.flow = flow;
|
|
7
|
+
const utility_js_1 = require("./utility.js");
|
|
8
|
+
const validator_js_1 = require("./validator.js");
|
|
9
|
+
const libsaml_js_1 = __importDefault(require("./libsaml.js"));
|
|
10
|
+
const extractor_js_1 = require("./extractor.js");
|
|
11
|
+
const urn_js_1 = require("./urn.js");
|
|
12
|
+
const bindDict = urn_js_1.wording.binding;
|
|
13
|
+
const urlParams = urn_js_1.wording.urlParams;
|
|
14
|
+
// get the default extractor fields based on the parserType
|
|
15
|
+
function getDefaultExtractorFields(parserType, assertion) {
|
|
16
|
+
switch (parserType) {
|
|
17
|
+
case urn_js_1.ParserType.SAMLRequest:
|
|
18
|
+
return extractor_js_1.loginRequestFields;
|
|
19
|
+
case urn_js_1.ParserType.SAMLResponse:
|
|
20
|
+
if (!assertion) {
|
|
21
|
+
// unexpected hit
|
|
22
|
+
throw new Error('ERR_EMPTY_ASSERTION');
|
|
23
|
+
}
|
|
24
|
+
return (0, extractor_js_1.loginResponseFields)(assertion);
|
|
25
|
+
case urn_js_1.ParserType.LogoutRequest:
|
|
26
|
+
return extractor_js_1.logoutRequestFields;
|
|
27
|
+
case urn_js_1.ParserType.LogoutResponse:
|
|
28
|
+
return extractor_js_1.logoutResponseFields;
|
|
29
|
+
default:
|
|
30
|
+
throw new Error('ERR_UNDEFINED_PARSERTYPE');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// proceed the redirect binding flow
|
|
34
|
+
async function redirectFlow(options) {
|
|
35
|
+
const { request, parserType, self, checkSignature = true, from } = options;
|
|
36
|
+
const { query, octetString } = request;
|
|
37
|
+
const { SigAlg: sigAlg, Signature: signature } = query;
|
|
38
|
+
const targetEntityMetadata = from.entityMeta;
|
|
39
|
+
// ?SAMLRequest= or ?SAMLResponse=
|
|
40
|
+
const direction = libsaml_js_1.default.getQueryParamByType(parserType);
|
|
41
|
+
const content = query[direction];
|
|
42
|
+
// query must contain the saml content
|
|
43
|
+
if (content === undefined) {
|
|
44
|
+
return Promise.reject('ERR_REDIRECT_FLOW_BAD_ARGS');
|
|
45
|
+
}
|
|
46
|
+
const xmlString = (0, utility_js_1.inflateString)(decodeURIComponent(content));
|
|
47
|
+
// validate the xml
|
|
48
|
+
try {
|
|
49
|
+
await libsaml_js_1.default.isValidXml(xmlString);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
return Promise.reject('ERR_INVALID_XML');
|
|
53
|
+
}
|
|
54
|
+
// check status based on different scenarios
|
|
55
|
+
await checkStatus(xmlString, parserType);
|
|
56
|
+
let assertion = '';
|
|
57
|
+
if (parserType === urlParams.samlResponse) {
|
|
58
|
+
// Extract assertion shortcut
|
|
59
|
+
const verifiedDoc = (0, extractor_js_1.extract)(xmlString, [{
|
|
60
|
+
key: 'assertion',
|
|
61
|
+
localPath: ['~Response', 'Assertion'],
|
|
62
|
+
attributes: [],
|
|
63
|
+
context: true
|
|
64
|
+
}]);
|
|
65
|
+
if (verifiedDoc && verifiedDoc.assertion) {
|
|
66
|
+
assertion = verifiedDoc.assertion;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const extractorFields = getDefaultExtractorFields(parserType, assertion.length > 0 ? assertion : null);
|
|
70
|
+
const parseResult = {
|
|
71
|
+
samlContent: xmlString,
|
|
72
|
+
sigAlg: null,
|
|
73
|
+
extract: (0, extractor_js_1.extract)(xmlString, extractorFields),
|
|
74
|
+
};
|
|
75
|
+
// see if signature check is required
|
|
76
|
+
// only verify message signature is enough
|
|
77
|
+
if (checkSignature) {
|
|
78
|
+
if (!signature || !sigAlg) {
|
|
79
|
+
return Promise.reject('ERR_MISSING_SIG_ALG');
|
|
80
|
+
}
|
|
81
|
+
// put the below two assignments into verifyMessageSignature function
|
|
82
|
+
const base64Signature = Buffer.from(decodeURIComponent(signature), 'base64');
|
|
83
|
+
const decodeSigAlg = decodeURIComponent(sigAlg);
|
|
84
|
+
const verified = libsaml_js_1.default.verifyMessageSignature(targetEntityMetadata, octetString, base64Signature, sigAlg);
|
|
85
|
+
if (!verified) {
|
|
86
|
+
// Fail to verify message signature
|
|
87
|
+
return Promise.reject('ERR_FAILED_MESSAGE_SIGNATURE_VERIFICATION');
|
|
88
|
+
}
|
|
89
|
+
parseResult.sigAlg = decodeSigAlg;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Validation part: validate the context of response after signature is verified and decrypted (optional)
|
|
93
|
+
*/
|
|
94
|
+
const issuer = targetEntityMetadata.getEntityID();
|
|
95
|
+
const extractedProperties = parseResult.extract;
|
|
96
|
+
// unmatched issuer
|
|
97
|
+
if ((parserType === 'LogoutResponse' || parserType === 'SAMLResponse')
|
|
98
|
+
&& extractedProperties
|
|
99
|
+
&& extractedProperties.issuer !== issuer) {
|
|
100
|
+
return Promise.reject('ERR_UNMATCH_ISSUER');
|
|
101
|
+
}
|
|
102
|
+
// invalid session time
|
|
103
|
+
// only run the verifyTime when `SessionNotOnOrAfter` exists
|
|
104
|
+
if (parserType === 'SAMLResponse'
|
|
105
|
+
&& extractedProperties.sessionIndex.sessionNotOnOrAfter
|
|
106
|
+
&& !(0, validator_js_1.verifyTime)(undefined, extractedProperties.sessionIndex.sessionNotOnOrAfter, self.entitySetting.clockDrifts)) {
|
|
107
|
+
return Promise.reject('ERR_EXPIRED_SESSION');
|
|
108
|
+
}
|
|
109
|
+
// invalid time
|
|
110
|
+
// 2.4.1.2 https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf
|
|
111
|
+
if (parserType === 'SAMLResponse'
|
|
112
|
+
&& extractedProperties.conditions
|
|
113
|
+
&& !(0, validator_js_1.verifyTime)(extractedProperties.conditions.notBefore, extractedProperties.conditions.notOnOrAfter, self.entitySetting.clockDrifts)) {
|
|
114
|
+
return Promise.reject('ERR_SUBJECT_UNCONFIRMED');
|
|
115
|
+
}
|
|
116
|
+
return Promise.resolve(parseResult);
|
|
117
|
+
}
|
|
118
|
+
// proceed the post flow
|
|
119
|
+
async function postFlow(options) {
|
|
120
|
+
const { request, from, self, parserType, checkSignature = true } = options;
|
|
121
|
+
const { body } = request;
|
|
122
|
+
const direction = libsaml_js_1.default.getQueryParamByType(parserType);
|
|
123
|
+
const encodedRequest = body[direction];
|
|
124
|
+
let samlContent = String((0, utility_js_1.base64Decode)(encodedRequest));
|
|
125
|
+
const verificationOptions = {
|
|
126
|
+
metadata: from.entityMeta,
|
|
127
|
+
signatureAlgorithm: from.entitySetting.requestSignatureAlgorithm,
|
|
128
|
+
};
|
|
129
|
+
const decryptRequired = from.entitySetting.isAssertionEncrypted;
|
|
130
|
+
let extractorFields = [];
|
|
131
|
+
// validate the xml first
|
|
132
|
+
await libsaml_js_1.default.isValidXml(samlContent);
|
|
133
|
+
if (parserType !== urlParams.samlResponse) {
|
|
134
|
+
extractorFields = getDefaultExtractorFields(parserType, null);
|
|
135
|
+
}
|
|
136
|
+
// check status based on different scenarios
|
|
137
|
+
await checkStatus(samlContent, parserType);
|
|
138
|
+
// verify the signatures (the response is encrypted then signed, then verify first then decrypt)
|
|
139
|
+
if (checkSignature &&
|
|
140
|
+
from.entitySetting.messageSigningOrder === urn_js_1.MessageSignatureOrder.ETS) {
|
|
141
|
+
const [verified, verifiedAssertionNode] = libsaml_js_1.default.verifySignature(samlContent, verificationOptions);
|
|
142
|
+
if (!verified) {
|
|
143
|
+
return Promise.reject('ERR_FAIL_TO_VERIFY_ETS_SIGNATURE');
|
|
144
|
+
}
|
|
145
|
+
if (!decryptRequired) {
|
|
146
|
+
extractorFields = getDefaultExtractorFields(parserType, verifiedAssertionNode);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (parserType === 'SAMLResponse' && decryptRequired) {
|
|
150
|
+
const result = await libsaml_js_1.default.decryptAssertion(self, samlContent);
|
|
151
|
+
samlContent = result[0];
|
|
152
|
+
extractorFields = getDefaultExtractorFields(parserType, result[1]);
|
|
153
|
+
}
|
|
154
|
+
// verify the signatures (the response is signed then encrypted, then decrypt first then verify)
|
|
155
|
+
if (checkSignature &&
|
|
156
|
+
from.entitySetting.messageSigningOrder === urn_js_1.MessageSignatureOrder.STE) {
|
|
157
|
+
const [verified, verifiedAssertionNode] = libsaml_js_1.default.verifySignature(samlContent, verificationOptions);
|
|
158
|
+
if (verified) {
|
|
159
|
+
extractorFields = getDefaultExtractorFields(parserType, verifiedAssertionNode);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
return Promise.reject('ERR_FAIL_TO_VERIFY_STE_SIGNATURE');
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const parseResult = {
|
|
166
|
+
samlContent: samlContent,
|
|
167
|
+
extract: (0, extractor_js_1.extract)(samlContent, extractorFields),
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Validation part: validate the context of response after signature is verified and decrypted (optional)
|
|
171
|
+
*/
|
|
172
|
+
const targetEntityMetadata = from.entityMeta;
|
|
173
|
+
const issuer = targetEntityMetadata.getEntityID();
|
|
174
|
+
const extractedProperties = parseResult.extract;
|
|
175
|
+
// unmatched issuer
|
|
176
|
+
if ((parserType === 'LogoutResponse' || parserType === 'SAMLResponse')
|
|
177
|
+
&& extractedProperties
|
|
178
|
+
&& extractedProperties.issuer !== issuer) {
|
|
179
|
+
return Promise.reject('ERR_UNMATCH_ISSUER');
|
|
180
|
+
}
|
|
181
|
+
// invalid session time
|
|
182
|
+
// only run the verifyTime when `SessionNotOnOrAfter` exists
|
|
183
|
+
if (parserType === 'SAMLResponse'
|
|
184
|
+
&& extractedProperties.sessionIndex.sessionNotOnOrAfter
|
|
185
|
+
&& !(0, validator_js_1.verifyTime)(undefined, extractedProperties.sessionIndex.sessionNotOnOrAfter, self.entitySetting.clockDrifts)) {
|
|
186
|
+
return Promise.reject('ERR_EXPIRED_SESSION');
|
|
187
|
+
}
|
|
188
|
+
// invalid time
|
|
189
|
+
// 2.4.1.2 https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf
|
|
190
|
+
if (parserType === 'SAMLResponse'
|
|
191
|
+
&& extractedProperties.conditions
|
|
192
|
+
&& !(0, validator_js_1.verifyTime)(extractedProperties.conditions.notBefore, extractedProperties.conditions.notOnOrAfter, self.entitySetting.clockDrifts)) {
|
|
193
|
+
return Promise.reject('ERR_SUBJECT_UNCONFIRMED');
|
|
194
|
+
}
|
|
195
|
+
return Promise.resolve(parseResult);
|
|
196
|
+
}
|
|
197
|
+
// proceed the post simple sign binding flow
|
|
198
|
+
async function postSimpleSignFlow(options) {
|
|
199
|
+
const { request, parserType, self, checkSignature = true, from } = options;
|
|
200
|
+
const { body, octetString } = request;
|
|
201
|
+
const targetEntityMetadata = from.entityMeta;
|
|
202
|
+
// ?SAMLRequest= or ?SAMLResponse=
|
|
203
|
+
const direction = libsaml_js_1.default.getQueryParamByType(parserType);
|
|
204
|
+
const encodedRequest = body[direction];
|
|
205
|
+
const sigAlg = body['SigAlg'];
|
|
206
|
+
const signature = body['Signature'];
|
|
207
|
+
// query must contain the saml content
|
|
208
|
+
if (encodedRequest === undefined) {
|
|
209
|
+
return Promise.reject('ERR_SIMPLESIGN_FLOW_BAD_ARGS');
|
|
210
|
+
}
|
|
211
|
+
const xmlString = String((0, utility_js_1.base64Decode)(encodedRequest));
|
|
212
|
+
// validate the xml
|
|
213
|
+
try {
|
|
214
|
+
await libsaml_js_1.default.isValidXml(xmlString);
|
|
215
|
+
}
|
|
216
|
+
catch (e) {
|
|
217
|
+
return Promise.reject('ERR_INVALID_XML');
|
|
218
|
+
}
|
|
219
|
+
// check status based on different scenarios
|
|
220
|
+
await checkStatus(xmlString, parserType);
|
|
221
|
+
let assertion = '';
|
|
222
|
+
if (parserType === urlParams.samlResponse) {
|
|
223
|
+
// Extract assertion shortcut
|
|
224
|
+
const verifiedDoc = (0, extractor_js_1.extract)(xmlString, [{
|
|
225
|
+
key: 'assertion',
|
|
226
|
+
localPath: ['~Response', 'Assertion'],
|
|
227
|
+
attributes: [],
|
|
228
|
+
context: true
|
|
229
|
+
}]);
|
|
230
|
+
if (verifiedDoc && verifiedDoc.assertion) {
|
|
231
|
+
assertion = verifiedDoc.assertion;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const extractorFields = getDefaultExtractorFields(parserType, assertion.length > 0 ? assertion : null);
|
|
235
|
+
const parseResult = {
|
|
236
|
+
samlContent: xmlString,
|
|
237
|
+
sigAlg: null,
|
|
238
|
+
extract: (0, extractor_js_1.extract)(xmlString, extractorFields),
|
|
239
|
+
};
|
|
240
|
+
// see if signature check is required
|
|
241
|
+
// only verify message signature is enough
|
|
242
|
+
if (checkSignature) {
|
|
243
|
+
if (!signature || !sigAlg) {
|
|
244
|
+
return Promise.reject('ERR_MISSING_SIG_ALG');
|
|
245
|
+
}
|
|
246
|
+
// put the below two assignments into verifyMessageSignature function
|
|
247
|
+
const base64Signature = Buffer.from(signature, 'base64');
|
|
248
|
+
const verified = libsaml_js_1.default.verifyMessageSignature(targetEntityMetadata, octetString, base64Signature, sigAlg);
|
|
249
|
+
if (!verified) {
|
|
250
|
+
// Fail to verify message signature
|
|
251
|
+
return Promise.reject('ERR_FAILED_MESSAGE_SIGNATURE_VERIFICATION');
|
|
252
|
+
}
|
|
253
|
+
parseResult.sigAlg = sigAlg;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Validation part: validate the context of response after signature is verified and decrypted (optional)
|
|
257
|
+
*/
|
|
258
|
+
const issuer = targetEntityMetadata.getEntityID();
|
|
259
|
+
const extractedProperties = parseResult.extract;
|
|
260
|
+
// unmatched issuer
|
|
261
|
+
if ((parserType === 'LogoutResponse' || parserType === 'SAMLResponse')
|
|
262
|
+
&& extractedProperties
|
|
263
|
+
&& extractedProperties.issuer !== issuer) {
|
|
264
|
+
return Promise.reject('ERR_UNMATCH_ISSUER');
|
|
265
|
+
}
|
|
266
|
+
// invalid session time
|
|
267
|
+
// only run the verifyTime when `SessionNotOnOrAfter` exists
|
|
268
|
+
if (parserType === 'SAMLResponse'
|
|
269
|
+
&& extractedProperties.sessionIndex.sessionNotOnOrAfter
|
|
270
|
+
&& !(0, validator_js_1.verifyTime)(undefined, extractedProperties.sessionIndex.sessionNotOnOrAfter, self.entitySetting.clockDrifts)) {
|
|
271
|
+
return Promise.reject('ERR_EXPIRED_SESSION');
|
|
272
|
+
}
|
|
273
|
+
// invalid time
|
|
274
|
+
// 2.4.1.2 https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf
|
|
275
|
+
if (parserType === 'SAMLResponse'
|
|
276
|
+
&& extractedProperties.conditions
|
|
277
|
+
&& !(0, validator_js_1.verifyTime)(extractedProperties.conditions.notBefore, extractedProperties.conditions.notOnOrAfter, self.entitySetting.clockDrifts)) {
|
|
278
|
+
return Promise.reject('ERR_SUBJECT_UNCONFIRMED');
|
|
279
|
+
}
|
|
280
|
+
return Promise.resolve(parseResult);
|
|
281
|
+
}
|
|
282
|
+
function checkStatus(content, parserType) {
|
|
283
|
+
// only check response parser
|
|
284
|
+
if (parserType !== urlParams.samlResponse && parserType !== urlParams.logoutResponse) {
|
|
285
|
+
return Promise.resolve('SKIPPED');
|
|
286
|
+
}
|
|
287
|
+
const fields = parserType === urlParams.samlResponse
|
|
288
|
+
? extractor_js_1.loginResponseStatusFields
|
|
289
|
+
: extractor_js_1.logoutResponseStatusFields;
|
|
290
|
+
const { top, second } = (0, extractor_js_1.extract)(content, fields);
|
|
291
|
+
// only resolve when top-tier status code is success
|
|
292
|
+
if (top === urn_js_1.StatusCode.Success) {
|
|
293
|
+
return Promise.resolve('OK');
|
|
294
|
+
}
|
|
295
|
+
if (!top) {
|
|
296
|
+
throw new Error('ERR_UNDEFINED_STATUS');
|
|
297
|
+
}
|
|
298
|
+
// returns a detailed error for two-tier error code
|
|
299
|
+
throw new Error(`ERR_FAILED_STATUS with top tier code: ${top}, second tier code: ${second}`);
|
|
300
|
+
}
|
|
301
|
+
function flow(options) {
|
|
302
|
+
const binding = options.binding;
|
|
303
|
+
const parserType = options.parserType;
|
|
304
|
+
options.supportBindings = [urn_js_1.BindingNamespace.Redirect, urn_js_1.BindingNamespace.Post, urn_js_1.BindingNamespace.SimpleSign];
|
|
305
|
+
// saml response allows POST, REDIRECT
|
|
306
|
+
if (parserType === urn_js_1.ParserType.SAMLResponse) {
|
|
307
|
+
options.supportBindings = [urn_js_1.BindingNamespace.Post, urn_js_1.BindingNamespace.Redirect, urn_js_1.BindingNamespace.SimpleSign];
|
|
308
|
+
}
|
|
309
|
+
if (binding === bindDict.post) {
|
|
310
|
+
return postFlow(options);
|
|
311
|
+
}
|
|
312
|
+
if (binding === bindDict.redirect) {
|
|
313
|
+
return redirectFlow(options);
|
|
314
|
+
}
|
|
315
|
+
if (binding === bindDict.simpleSign) {
|
|
316
|
+
return postSimpleSignFlow(options);
|
|
317
|
+
}
|
|
318
|
+
return Promise.reject('ERR_UNEXPECTED_FLOW');
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/flow.ts"],"names":[],"mappings":"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"}
|