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.
Files changed (99) hide show
  1. package/.editorconfig +19 -0
  2. package/.github/FUNDING.yml +1 -0
  3. package/.idea/compiler.xml +6 -0
  4. package/.idea/deployment.xml +14 -0
  5. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  6. package/.idea/jsLibraryMappings.xml +6 -0
  7. package/.idea/modules.xml +8 -0
  8. package/.idea/samlify.iml +12 -0
  9. package/.idea/vcs.xml +6 -0
  10. package/.pre-commit.sh +15 -0
  11. package/.snyk +8 -0
  12. package/.travis.yml +29 -0
  13. package/LICENSE +22 -0
  14. package/Makefile +25 -0
  15. package/README.md +84 -0
  16. package/build/.idea/workspace.xml +58 -0
  17. package/build/index.js +65 -0
  18. package/build/index.js.map +1 -0
  19. package/build/src/api.js +24 -0
  20. package/build/src/api.js.map +1 -0
  21. package/build/src/binding-post.js +369 -0
  22. package/build/src/binding-post.js.map +1 -0
  23. package/build/src/binding-redirect.js +333 -0
  24. package/build/src/binding-redirect.js.map +1 -0
  25. package/build/src/binding-simplesign.js +233 -0
  26. package/build/src/binding-simplesign.js.map +1 -0
  27. package/build/src/entity-idp.js +131 -0
  28. package/build/src/entity-idp.js.map +1 -0
  29. package/build/src/entity-sp.js +97 -0
  30. package/build/src/entity-sp.js.map +1 -0
  31. package/build/src/entity.js +236 -0
  32. package/build/src/entity.js.map +1 -0
  33. package/build/src/extractor.js +370 -0
  34. package/build/src/extractor.js.map +1 -0
  35. package/build/src/flow.js +320 -0
  36. package/build/src/flow.js.map +1 -0
  37. package/build/src/libsaml.js +642 -0
  38. package/build/src/libsaml.js.map +1 -0
  39. package/build/src/metadata-idp.js +128 -0
  40. package/build/src/metadata-idp.js.map +1 -0
  41. package/build/src/metadata-sp.js +232 -0
  42. package/build/src/metadata-sp.js.map +1 -0
  43. package/build/src/metadata.js +177 -0
  44. package/build/src/metadata.js.map +1 -0
  45. package/build/src/types.js +12 -0
  46. package/build/src/types.js.map +1 -0
  47. package/build/src/urn.js +213 -0
  48. package/build/src/urn.js.map +1 -0
  49. package/build/src/utility.js +249 -0
  50. package/build/src/utility.js.map +1 -0
  51. package/build/src/validator.js +27 -0
  52. package/build/src/validator.js.map +1 -0
  53. package/index.d.ts +10 -0
  54. package/index.js +19 -0
  55. package/index.js.map +1 -0
  56. package/index.ts +28 -0
  57. package/package.json +74 -0
  58. package/qodana.yaml +29 -0
  59. package/src/.idea/modules.xml +8 -0
  60. package/src/.idea/src.iml +12 -0
  61. package/src/.idea/vcs.xml +6 -0
  62. package/src/api.ts +36 -0
  63. package/src/binding-post.ts +338 -0
  64. package/src/binding-redirect.ts +331 -0
  65. package/src/binding-simplesign.ts +231 -0
  66. package/src/entity-idp.ts +145 -0
  67. package/src/entity-sp.ts +114 -0
  68. package/src/entity.ts +243 -0
  69. package/src/extractor.ts +392 -0
  70. package/src/flow.ts +467 -0
  71. package/src/libsaml.ts +786 -0
  72. package/src/metadata-idp.ts +146 -0
  73. package/src/metadata-sp.ts +268 -0
  74. package/src/metadata.ts +166 -0
  75. package/src/types.ts +153 -0
  76. package/src/urn.ts +211 -0
  77. package/src/utility.ts +248 -0
  78. package/src/validator.ts +44 -0
  79. package/tsconfig.json +38 -0
  80. package/tslint.json +35 -0
  81. package/types/index.d.ts +10 -0
  82. package/types/src/api.d.ts +13 -0
  83. package/types/src/binding-post.d.ts +46 -0
  84. package/types/src/binding-redirect.d.ts +52 -0
  85. package/types/src/binding-simplesign.d.ts +39 -0
  86. package/types/src/entity-idp.d.ts +42 -0
  87. package/types/src/entity-sp.d.ts +36 -0
  88. package/types/src/entity.d.ts +99 -0
  89. package/types/src/extractor.d.ts +25 -0
  90. package/types/src/flow.d.ts +6 -0
  91. package/types/src/libsaml.d.ts +210 -0
  92. package/types/src/metadata-idp.d.ts +24 -0
  93. package/types/src/metadata-sp.d.ts +36 -0
  94. package/types/src/metadata.d.ts +57 -0
  95. package/types/src/types.d.ts +127 -0
  96. package/types/src/urn.d.ts +194 -0
  97. package/types/src/utility.d.ts +134 -0
  98. package/types/src/validator.d.ts +3 -0
  99. package/types.d.ts +2 -0
@@ -0,0 +1,370 @@
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.logoutResponseFields = exports.logoutRequestFields = exports.loginResponseFields = exports.logoutResponseStatusFields = exports.loginResponseStatusFields = exports.loginRequestFields = void 0;
7
+ exports.extract = extract;
8
+ const xpath_1 = require("xpath");
9
+ const utility_js_1 = require("./utility.js");
10
+ const api_js_1 = require("./api.js");
11
+ const camelcase_1 = __importDefault(require("camelcase"));
12
+ function buildAbsoluteXPath(paths) {
13
+ return paths.reduce((currentPath, name) => {
14
+ let appendedPath = currentPath;
15
+ const isWildcard = name.startsWith('~');
16
+ if (isWildcard) {
17
+ const pathName = name.replace('~', '');
18
+ appendedPath = currentPath + `/*[contains(local-name(), '${pathName}')]`;
19
+ }
20
+ if (!isWildcard) {
21
+ appendedPath = currentPath + `/*[local-name(.)='${name}']`;
22
+ }
23
+ return appendedPath;
24
+ }, '');
25
+ }
26
+ function buildAttributeXPath(attributes) {
27
+ if (attributes.length === 0) {
28
+ return '/text()';
29
+ }
30
+ if (attributes.length === 1) {
31
+ return `/@${attributes[0]}`;
32
+ }
33
+ const filters = attributes.map(attribute => `name()='${attribute}'`).join(' or ');
34
+ return `/@*[${filters}]`;
35
+ }
36
+ exports.loginRequestFields = [
37
+ {
38
+ key: 'request',
39
+ localPath: ['AuthnRequest'],
40
+ attributes: ['ID', 'IssueInstant', 'Destination', 'AssertionConsumerServiceURL']
41
+ },
42
+ {
43
+ key: 'issuer',
44
+ localPath: ['AuthnRequest', 'Issuer'],
45
+ attributes: []
46
+ },
47
+ {
48
+ key: 'nameIDPolicy',
49
+ localPath: ['AuthnRequest', 'NameIDPolicy'],
50
+ attributes: ['Format', 'AllowCreate']
51
+ },
52
+ {
53
+ key: 'authnContextClassRef',
54
+ localPath: ['AuthnRequest', 'AuthnContextClassRef'],
55
+ attributes: []
56
+ },
57
+ {
58
+ key: 'signature',
59
+ localPath: ['AuthnRequest', 'Signature'],
60
+ attributes: [],
61
+ context: true
62
+ }
63
+ ];
64
+ // support two-tiers status code
65
+ exports.loginResponseStatusFields = [
66
+ {
67
+ key: 'top',
68
+ localPath: ['Response', 'Status', 'StatusCode'],
69
+ attributes: ['Value'],
70
+ },
71
+ {
72
+ key: 'second',
73
+ localPath: ['Response', 'Status', 'StatusCode', 'StatusCode'],
74
+ attributes: ['Value'],
75
+ }
76
+ ];
77
+ // support two-tiers status code
78
+ exports.logoutResponseStatusFields = [
79
+ {
80
+ key: 'top',
81
+ localPath: ['LogoutResponse', 'Status', 'StatusCode'],
82
+ attributes: ['Value']
83
+ },
84
+ {
85
+ key: 'second',
86
+ localPath: ['LogoutResponse', 'Status', 'StatusCode', 'StatusCode'],
87
+ attributes: ['Value'],
88
+ }
89
+ ];
90
+ const loginResponseFields = assertion => [
91
+ {
92
+ key: 'conditions',
93
+ localPath: ['Assertion', 'Conditions'],
94
+ attributes: ['NotBefore', 'NotOnOrAfter'],
95
+ shortcut: assertion
96
+ },
97
+ {
98
+ key: 'response',
99
+ localPath: ['Response'],
100
+ attributes: ['ID', 'IssueInstant', 'Destination', 'InResponseTo'],
101
+ },
102
+ {
103
+ key: 'audience',
104
+ localPath: ['Assertion', 'Conditions', 'AudienceRestriction', 'Audience'],
105
+ attributes: [],
106
+ shortcut: assertion
107
+ },
108
+ // {
109
+ // key: 'issuer',
110
+ // localPath: ['Response', 'Issuer'],
111
+ // attributes: []
112
+ // },
113
+ {
114
+ key: 'issuer',
115
+ localPath: ['Assertion', 'Issuer'],
116
+ attributes: [],
117
+ shortcut: assertion
118
+ },
119
+ {
120
+ key: 'nameID',
121
+ localPath: ['Assertion', 'Subject', 'NameID'],
122
+ attributes: [],
123
+ shortcut: assertion
124
+ },
125
+ {
126
+ key: 'sessionIndex',
127
+ localPath: ['Assertion', 'AuthnStatement'],
128
+ attributes: ['AuthnInstant', 'SessionNotOnOrAfter', 'SessionIndex'],
129
+ shortcut: assertion
130
+ },
131
+ {
132
+ key: 'attributes',
133
+ localPath: ['Assertion', 'AttributeStatement', 'Attribute'],
134
+ index: ['Name'],
135
+ attributePath: ['AttributeValue'],
136
+ attributes: [],
137
+ shortcut: assertion
138
+ }
139
+ ];
140
+ exports.loginResponseFields = loginResponseFields;
141
+ exports.logoutRequestFields = [
142
+ {
143
+ key: 'request',
144
+ localPath: ['LogoutRequest'],
145
+ attributes: ['ID', 'IssueInstant', 'Destination']
146
+ },
147
+ {
148
+ key: 'issuer',
149
+ localPath: ['LogoutRequest', 'Issuer'],
150
+ attributes: []
151
+ },
152
+ {
153
+ key: 'nameID',
154
+ localPath: ['LogoutRequest', 'NameID'],
155
+ attributes: []
156
+ },
157
+ {
158
+ key: 'sessionIndex',
159
+ localPath: ['LogoutRequest', 'SessionIndex'],
160
+ attributes: []
161
+ },
162
+ {
163
+ key: 'signature',
164
+ localPath: ['LogoutRequest', 'Signature'],
165
+ attributes: [],
166
+ context: true
167
+ }
168
+ ];
169
+ exports.logoutResponseFields = [
170
+ {
171
+ key: 'response',
172
+ localPath: ['LogoutResponse'],
173
+ attributes: ['ID', 'Destination', 'InResponseTo']
174
+ },
175
+ {
176
+ key: 'issuer',
177
+ localPath: ['LogoutResponse', 'Issuer'],
178
+ attributes: []
179
+ },
180
+ {
181
+ key: 'signature',
182
+ localPath: ['LogoutResponse', 'Signature'],
183
+ attributes: [],
184
+ context: true
185
+ }
186
+ ];
187
+ function extract(context, fields) {
188
+ const { dom } = (0, api_js_1.getContext)();
189
+ const rootDoc = dom.parseFromString(context);
190
+ return fields.reduce((result, field) => {
191
+ // get essential fields
192
+ const key = field.key;
193
+ const localPath = field.localPath;
194
+ const attributes = field.attributes;
195
+ const isEntire = field.context;
196
+ const shortcut = field.shortcut;
197
+ // get optional fields
198
+ const index = field.index;
199
+ const attributePath = field.attributePath;
200
+ // set allowing overriding if there is a shortcut injected
201
+ let targetDoc = rootDoc;
202
+ // if shortcut is used, then replace the doc
203
+ // it's a design for overriding the doc used during runtime
204
+ if (shortcut) {
205
+ targetDoc = dom.parseFromString(shortcut);
206
+ }
207
+ // special case: multiple path
208
+ /*
209
+ {
210
+ key: 'issuer',
211
+ localPath: [
212
+ ['Response', 'Issuer'],
213
+ ['Response', 'Assertion', 'Issuer']
214
+ ],
215
+ attributes: []
216
+ }
217
+ */
218
+ if (localPath.every(path => Array.isArray(path))) {
219
+ const multiXPaths = localPath
220
+ .map(path => {
221
+ // not support attribute yet, so ignore it
222
+ return `${buildAbsoluteXPath(path)}/text()`;
223
+ })
224
+ .join(' | ');
225
+ return {
226
+ ...result,
227
+ [key]: (0, utility_js_1.uniq)((0, xpath_1.select)(multiXPaths, targetDoc).map((n) => n.nodeValue).filter(utility_js_1.notEmpty))
228
+ };
229
+ }
230
+ // eo special case: multiple path
231
+ const baseXPath = buildAbsoluteXPath(localPath);
232
+ const attributeXPath = buildAttributeXPath(attributes);
233
+ // special case: get attributes where some are in child, some are in parent
234
+ /*
235
+ {
236
+ key: 'attributes',
237
+ localPath: ['Response', 'Assertion', 'AttributeStatement', 'Attribute'],
238
+ index: ['Name'],
239
+ attributePath: ['AttributeValue'],
240
+ attributes: []
241
+ }
242
+ */
243
+ if (index && attributePath) {
244
+ // find the index in localpath
245
+ const indexPath = buildAttributeXPath(index);
246
+ const fullLocalXPath = `${baseXPath}${indexPath}`;
247
+ const parentNodes = (0, xpath_1.select)(baseXPath, targetDoc);
248
+ // [uid, mail, edupersonaffiliation], ready for aggregate
249
+ const parentAttributes = (0, xpath_1.select)(fullLocalXPath, targetDoc).map((n) => n.value);
250
+ // [attribute, attributevalue]
251
+ const childXPath = buildAbsoluteXPath([(0, utility_js_1.last)(localPath)].concat(attributePath));
252
+ const childAttributeXPath = buildAttributeXPath(attributes);
253
+ const fullChildXPath = `${childXPath}${childAttributeXPath}`;
254
+ // [ 'test', 'test@example.com', [ 'users', 'examplerole1' ] ]
255
+ const childAttributes = parentNodes.map(node => {
256
+ const nodeDoc = dom.parseFromString(node.toString());
257
+ if (attributes.length === 0) {
258
+ const childValues = (0, xpath_1.select)(fullChildXPath, nodeDoc).map((n) => n.nodeValue);
259
+ if (childValues.length === 1) {
260
+ return childValues[0];
261
+ }
262
+ return childValues;
263
+ }
264
+ if (attributes.length > 0) {
265
+ const childValues = (0, xpath_1.select)(fullChildXPath, nodeDoc).map((n) => n.value);
266
+ if (childValues.length === 1) {
267
+ return childValues[0];
268
+ }
269
+ return childValues;
270
+ }
271
+ return null;
272
+ });
273
+ // aggregation
274
+ const obj = (0, utility_js_1.zipObject)(parentAttributes, childAttributes, false);
275
+ return {
276
+ ...result,
277
+ [key]: obj
278
+ };
279
+ }
280
+ // case: fetch entire content, only allow one existence
281
+ /*
282
+ {
283
+ key: 'signature',
284
+ localPath: ['AuthnRequest', 'Signature'],
285
+ attributes: [],
286
+ context: true
287
+ }
288
+ */
289
+ if (isEntire) {
290
+ const node = (0, xpath_1.select)(baseXPath, targetDoc);
291
+ let value = null;
292
+ if (node.length === 1) {
293
+ value = node[0].toString();
294
+ }
295
+ if (node.length > 1) {
296
+ value = node.map(n => n.toString());
297
+ }
298
+ return {
299
+ ...result,
300
+ [key]: value
301
+ };
302
+ }
303
+ // case: multiple attribute
304
+ /*
305
+ {
306
+ key: 'nameIDPolicy',
307
+ localPath: ['AuthnRequest', 'NameIDPolicy'],
308
+ attributes: ['Format', 'AllowCreate']
309
+ }
310
+ */
311
+ if (attributes.length > 1) {
312
+ const baseNode = (0, xpath_1.select)(baseXPath, targetDoc).map(n => n.toString());
313
+ const childXPath = `${buildAbsoluteXPath([(0, utility_js_1.last)(localPath)])}${attributeXPath}`;
314
+ const attributeValues = baseNode.map((node) => {
315
+ const nodeDoc = dom.parseFromString(node);
316
+ const values = (0, xpath_1.select)(childXPath, nodeDoc).reduce((r, n) => {
317
+ r[(0, camelcase_1.default)(n.name, { locale: 'en-us' })] = n.value;
318
+ return r;
319
+ }, {});
320
+ return values;
321
+ });
322
+ return {
323
+ ...result,
324
+ [key]: attributeValues.length === 1 ? attributeValues[0] : attributeValues
325
+ };
326
+ }
327
+ // case: single attribute
328
+ /*
329
+ {
330
+ key: 'statusCode',
331
+ localPath: ['Response', 'Status', 'StatusCode'],
332
+ attributes: ['Value'],
333
+ }
334
+ */
335
+ if (attributes.length === 1) {
336
+ const fullPath = `${baseXPath}${attributeXPath}`;
337
+ const attributeValues = (0, xpath_1.select)(fullPath, targetDoc).map((n) => n.value);
338
+ return {
339
+ ...result,
340
+ [key]: attributeValues[0]
341
+ };
342
+ }
343
+ // case: zero attribute
344
+ /*
345
+ {
346
+ key: 'issuer',
347
+ localPath: ['AuthnRequest', 'Issuer'],
348
+ attributes: []
349
+ }
350
+ */
351
+ if (attributes.length === 0) {
352
+ let attributeValue = null;
353
+ const node = (0, xpath_1.select)(baseXPath, targetDoc);
354
+ if (node.length === 1) {
355
+ const fullPath = `string(${baseXPath}${attributeXPath})`;
356
+ attributeValue = (0, xpath_1.select)(fullPath, targetDoc);
357
+ }
358
+ if (node.length > 1) {
359
+ attributeValue = node.filter((n) => n.firstChild)
360
+ .map((n) => n.firstChild.nodeValue);
361
+ }
362
+ return {
363
+ ...result,
364
+ [key]: attributeValue
365
+ };
366
+ }
367
+ return result;
368
+ }, {});
369
+ }
370
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/extractor.ts"],"names":[],"mappings":"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"}