@rockcarver/frodo-lib 0.17.3 → 0.17.4

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 (63) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/cjs/api/Saml2Api.js +36 -14
  3. package/cjs/api/Saml2Api.js.map +1 -1
  4. package/cjs/api/ScriptApi.js +23 -2
  5. package/cjs/api/ScriptApi.js.map +1 -1
  6. package/cjs/ops/IdpOps.js +3 -3
  7. package/cjs/ops/IdpOps.js.map +1 -1
  8. package/cjs/ops/JourneyOps.js +49 -35
  9. package/cjs/ops/JourneyOps.js.map +1 -1
  10. package/cjs/ops/JourneyOps.test.js.map +1 -1
  11. package/cjs/ops/OpsTypes.js.map +1 -1
  12. package/cjs/ops/Saml2Ops.js +104 -57
  13. package/cjs/ops/Saml2Ops.js.map +1 -1
  14. package/cjs/ops/Saml2Ops.test.js.map +1 -1
  15. package/cjs/ops/ScriptOps.js +193 -186
  16. package/cjs/ops/ScriptOps.js.map +1 -1
  17. package/cjs/ops/ScriptOps.test.js.map +1 -0
  18. package/cjs/test/mocks/ForgeRockApiMockEngine.js +5 -0
  19. package/cjs/test/mocks/ForgeRockApiMockEngine.js.map +1 -1
  20. package/cjs/test/mocks/JourneyOps/importJourney/FrodoTestJourney1.journey.json +148 -0
  21. package/cjs/test/mocks/JourneyOps/importJourney/FrodoTestJourney2.journey.json +76 -0
  22. package/cjs/test/mocks/JourneyOps/importJourney/FrodoTestJourney3.journey.json +873 -0
  23. package/cjs/test/mocks/JourneyOps/importJourney/FrodoTestJourney4.journey.json +930 -0
  24. package/cjs/test/mocks/JourneyOps/importJourney/FrodoTestJourney5.journey.json +873 -0
  25. package/cjs/test/mocks/JourneyOps/importJourney/FrodoTestJourney6.journey.json +148 -0
  26. package/cjs/test/mocks/JourneyOps/importJourney/FrodoTestJourney7.journey.json +148 -0
  27. package/cjs/test/mocks/JourneyOps/importJourney/FrodoTestJourney8.journey.json +148 -0
  28. package/cjs/test/mocks/JourneyOps/importJourney/FrodoTestJourney9.journey.json +148 -0
  29. package/esm/api/Saml2Api.mjs +17 -1
  30. package/esm/api/ScriptApi.mjs +17 -2
  31. package/esm/ops/IdpOps.mjs +4 -4
  32. package/esm/ops/JourneyOps.mjs +30 -21
  33. package/esm/ops/JourneyOps.test.mjs +220 -246
  34. package/esm/ops/Saml2Ops.mjs +66 -31
  35. package/esm/ops/Saml2Ops.test.mjs +399 -333
  36. package/esm/ops/ScriptOps.mjs +148 -152
  37. package/esm/ops/ScriptOps.test.mjs +282 -0
  38. package/esm/test/mocks/ForgeRockApiMockEngine.mjs +4 -0
  39. package/esm/test/mocks/JourneyOps/importJourney/FrodoTestJourney1.journey.json +148 -0
  40. package/esm/test/mocks/JourneyOps/importJourney/FrodoTestJourney2.journey.json +76 -0
  41. package/esm/test/mocks/JourneyOps/importJourney/FrodoTestJourney3.journey.json +873 -0
  42. package/esm/test/mocks/JourneyOps/importJourney/FrodoTestJourney4.journey.json +930 -0
  43. package/esm/test/mocks/JourneyOps/importJourney/FrodoTestJourney5.journey.json +873 -0
  44. package/esm/test/mocks/JourneyOps/importJourney/FrodoTestJourney6.journey.json +148 -0
  45. package/esm/test/mocks/JourneyOps/importJourney/FrodoTestJourney7.journey.json +148 -0
  46. package/esm/test/mocks/JourneyOps/importJourney/FrodoTestJourney8.journey.json +148 -0
  47. package/esm/test/mocks/JourneyOps/importJourney/FrodoTestJourney9.journey.json +148 -0
  48. package/package.json +10 -2
  49. package/types/api/Saml2Api.d.ts +8 -1
  50. package/types/api/Saml2Api.d.ts.map +1 -1
  51. package/types/api/ScriptApi.d.ts +7 -1
  52. package/types/api/ScriptApi.d.ts.map +1 -1
  53. package/types/ops/IdpOps.d.ts.map +1 -1
  54. package/types/ops/JourneyOps.d.ts +17 -3
  55. package/types/ops/JourneyOps.d.ts.map +1 -1
  56. package/types/ops/OpsTypes.d.ts +1 -1
  57. package/types/ops/OpsTypes.d.ts.map +1 -1
  58. package/types/ops/Saml2Ops.d.ts +24 -12
  59. package/types/ops/Saml2Ops.d.ts.map +1 -1
  60. package/types/ops/ScriptOps.d.ts +56 -20
  61. package/types/ops/ScriptOps.d.ts.map +1 -1
  62. package/types/test/mocks/ForgeRockApiMockEngine.d.ts +1 -0
  63. package/types/test/mocks/ForgeRockApiMockEngine.d.ts.map +1 -1
@@ -0,0 +1,930 @@
1
+ {
2
+ "meta": {
3
+ "origin": "https://openam-volker-dev.forgeblocks.com/am",
4
+ "originAmVersion": "7.3.0",
5
+ "exportedBy": "volker.scheuber@forgerock.com",
6
+ "exportDate": "2023-01-04T19:11:16.352Z",
7
+ "exportTool": "frodo",
8
+ "exportToolVersion": "v0.17.3 [v18.7.0]"
9
+ },
10
+ "innerNodes": {
11
+ "c5c121b8-e5e9-4125-ac38-27066bda75e6": {
12
+ "_id": "c5c121b8-e5e9-4125-ac38-27066bda75e6",
13
+ "_rev": "-1492163973",
14
+ "usernameAttribute": "userName",
15
+ "validateInput": false,
16
+ "_type": {
17
+ "_id": "ValidatedUsernameNode",
18
+ "name": "Platform Username",
19
+ "collection": true
20
+ },
21
+ "_outcomes": [
22
+ {
23
+ "id": "outcome",
24
+ "displayName": "Outcome"
25
+ }
26
+ ]
27
+ },
28
+ "659704c7-d4e6-47a8-a90f-3da1ef8bbd09": {
29
+ "_id": "659704c7-d4e6-47a8-a90f-3da1ef8bbd09",
30
+ "_rev": "-1746977123",
31
+ "passwordAttribute": "password",
32
+ "validateInput": false,
33
+ "_type": {
34
+ "_id": "ValidatedPasswordNode",
35
+ "name": "Platform Password",
36
+ "collection": true
37
+ },
38
+ "_outcomes": [
39
+ {
40
+ "id": "outcome",
41
+ "displayName": "Outcome"
42
+ }
43
+ ]
44
+ },
45
+ "824d0331-2d1c-4d26-8d8e-7fa1b2d40343": {
46
+ "_id": "824d0331-2d1c-4d26-8d8e-7fa1b2d40343",
47
+ "_rev": "955554307",
48
+ "includeLocalAuthentication": true,
49
+ "filteredProviders": [
50
+ "google",
51
+ "facebook",
52
+ "azure"
53
+ ],
54
+ "identityAttribute": "mail",
55
+ "passwordAttribute": "password",
56
+ "offerOnlyExisting": false,
57
+ "_type": {
58
+ "_id": "SelectIdPNode",
59
+ "name": "Select Identity Provider",
60
+ "collection": true
61
+ },
62
+ "_outcomes": [
63
+ {
64
+ "id": "socialAuthentication",
65
+ "displayName": "Social Authentication"
66
+ },
67
+ {
68
+ "id": "localAuthentication",
69
+ "displayName": "Local Authentication"
70
+ }
71
+ ]
72
+ },
73
+ "ce53336d-77cd-4880-b510-39d008fce072": {
74
+ "_id": "ce53336d-77cd-4880-b510-39d008fce072",
75
+ "_rev": "-706817602",
76
+ "passwordAttribute": "password",
77
+ "validateInput": false,
78
+ "_type": {
79
+ "_id": "ValidatedPasswordNode",
80
+ "name": "Platform Password",
81
+ "collection": true
82
+ },
83
+ "_outcomes": [
84
+ {
85
+ "id": "outcome",
86
+ "displayName": "Outcome"
87
+ }
88
+ ]
89
+ },
90
+ "39214bc4-beb9-466b-bec8-d36f4031f0ad": {
91
+ "_id": "39214bc4-beb9-466b-bec8-d36f4031f0ad",
92
+ "_rev": "167882971",
93
+ "includeLocalAuthentication": true,
94
+ "filteredProviders": [
95
+ "adfs",
96
+ "github"
97
+ ],
98
+ "identityAttribute": "mail",
99
+ "passwordAttribute": "password",
100
+ "offerOnlyExisting": false,
101
+ "_type": {
102
+ "_id": "SelectIdPNode",
103
+ "name": "Select Identity Provider",
104
+ "collection": true
105
+ },
106
+ "_outcomes": [
107
+ {
108
+ "id": "socialAuthentication",
109
+ "displayName": "Social Authentication"
110
+ },
111
+ {
112
+ "id": "localAuthentication",
113
+ "displayName": "Local Authentication"
114
+ }
115
+ ]
116
+ }
117
+ },
118
+ "nodes": {
119
+ "4d4535f0-ceb9-4aac-a86e-78cf8e11c044": {
120
+ "_id": "4d4535f0-ceb9-4aac-a86e-78cf8e11c044",
121
+ "_rev": "-1692319734",
122
+ "script": "739bdc48-fd24-4c52-b353-88706d75558a",
123
+ "outcomes": [
124
+ "known",
125
+ "unknown"
126
+ ],
127
+ "outputs": [
128
+ "*"
129
+ ],
130
+ "inputs": [
131
+ "*"
132
+ ],
133
+ "_type": {
134
+ "_id": "ScriptedDecisionNode",
135
+ "name": "Scripted Decision",
136
+ "collection": true
137
+ },
138
+ "_outcomes": [
139
+ {
140
+ "id": "known",
141
+ "displayName": "known"
142
+ },
143
+ {
144
+ "id": "unknown",
145
+ "displayName": "unknown"
146
+ }
147
+ ]
148
+ },
149
+ "848e3f95-7dcb-4d90-9333-76fea189fbb9": {
150
+ "_id": "848e3f95-7dcb-4d90-9333-76fea189fbb9",
151
+ "_rev": "-2032734673",
152
+ "metaAlias": "/alpha/iSPAzure",
153
+ "allowCreate": true,
154
+ "authnContextClassRef": [],
155
+ "authnContextDeclRef": [],
156
+ "authComparison": "MINIMUM",
157
+ "nameIdFormat": "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent",
158
+ "requestBinding": "HTTP_REDIRECT",
159
+ "binding": "HTTP_ARTIFACT",
160
+ "forceAuthn": false,
161
+ "idpEntityId": "urn:federation:MicrosoftOnline",
162
+ "isPassive": false,
163
+ "_type": {
164
+ "_id": "product-Saml2Node",
165
+ "name": "SAML2 Authentication",
166
+ "collection": true
167
+ },
168
+ "_outcomes": [
169
+ {
170
+ "id": "ACCOUNT_EXISTS",
171
+ "displayName": "Account exists"
172
+ },
173
+ {
174
+ "id": "NO_ACCOUNT",
175
+ "displayName": "No account exists"
176
+ }
177
+ ]
178
+ },
179
+ "ee68b747-ffd4-4ee2-9111-55e0ef511dcd": {
180
+ "_id": "ee68b747-ffd4-4ee2-9111-55e0ef511dcd",
181
+ "_rev": "1772728285",
182
+ "tree": "FrodoTestJourney2",
183
+ "_type": {
184
+ "_id": "InnerTreeEvaluatorNode",
185
+ "name": "Inner Tree Evaluator",
186
+ "collection": true
187
+ },
188
+ "_outcomes": [
189
+ {
190
+ "id": "true",
191
+ "displayName": "True"
192
+ },
193
+ {
194
+ "id": "false",
195
+ "displayName": "False"
196
+ }
197
+ ]
198
+ },
199
+ "27671bb9-3f18-41a1-8c4a-2ae74e7f7c23": {
200
+ "_id": "27671bb9-3f18-41a1-8c4a-2ae74e7f7c23",
201
+ "_rev": "459779283",
202
+ "emailTemplateName": "welcome",
203
+ "identityAttribute": "userName",
204
+ "emailAttribute": "mail",
205
+ "_type": {
206
+ "_id": "EmailTemplateNode",
207
+ "name": "Email Template Node",
208
+ "collection": true
209
+ },
210
+ "_outcomes": [
211
+ {
212
+ "id": "EMAIL_SENT",
213
+ "displayName": "Email Sent"
214
+ },
215
+ {
216
+ "id": "EMAIL_NOT_SENT",
217
+ "displayName": "Email Not Sent"
218
+ }
219
+ ]
220
+ },
221
+ "d6bf3b33-f8b9-4e9c-82bf-56917952eae2": {
222
+ "_id": "d6bf3b33-f8b9-4e9c-82bf-56917952eae2",
223
+ "_rev": "-844385322",
224
+ "nodes": [
225
+ {
226
+ "_id": "c5c121b8-e5e9-4125-ac38-27066bda75e6",
227
+ "nodeType": "ValidatedUsernameNode",
228
+ "displayName": "Username"
229
+ },
230
+ {
231
+ "_id": "659704c7-d4e6-47a8-a90f-3da1ef8bbd09",
232
+ "nodeType": "ValidatedPasswordNode",
233
+ "displayName": "Password"
234
+ },
235
+ {
236
+ "_id": "824d0331-2d1c-4d26-8d8e-7fa1b2d40343",
237
+ "nodeType": "SelectIdPNode",
238
+ "displayName": "Select IDP"
239
+ }
240
+ ],
241
+ "pageDescription": {},
242
+ "pageHeader": {},
243
+ "_type": {
244
+ "_id": "PageNode",
245
+ "name": "Page Node",
246
+ "collection": true
247
+ },
248
+ "_outcomes": [
249
+ {
250
+ "id": "socialAuthentication",
251
+ "displayName": "Social Authentication"
252
+ },
253
+ {
254
+ "id": "localAuthentication",
255
+ "displayName": "Local Authentication"
256
+ }
257
+ ]
258
+ },
259
+ "f7dbafa0-4872-4895-8f16-166c67f37351": {
260
+ "_id": "f7dbafa0-4872-4895-8f16-166c67f37351",
261
+ "_rev": "1388888287",
262
+ "clientType": "BROWSER",
263
+ "script": "58c824ae-84ed-4724-82cd-db128fc3f6c",
264
+ "usernameAttribute": "userName",
265
+ "_type": {
266
+ "_id": "SocialProviderHandlerNode",
267
+ "name": "Social Provider Handler Node",
268
+ "collection": true
269
+ },
270
+ "_outcomes": [
271
+ {
272
+ "id": "ACCOUNT_EXISTS",
273
+ "displayName": "Account exists"
274
+ },
275
+ {
276
+ "id": "NO_ACCOUNT",
277
+ "displayName": "No account exists"
278
+ }
279
+ ]
280
+ },
281
+ "9d8ba851-9a00-4bd1-968c-bb8dc89d31ef": {
282
+ "_id": "9d8ba851-9a00-4bd1-968c-bb8dc89d31ef",
283
+ "_rev": "-1302949831",
284
+ "useUniversalIdForUsername": true,
285
+ "minimumPasswordLength": 8,
286
+ "_type": {
287
+ "_id": "IdentityStoreDecisionNode",
288
+ "name": "Identity Store Decision",
289
+ "collection": true
290
+ },
291
+ "_outcomes": [
292
+ {
293
+ "id": "TRUE",
294
+ "displayName": "True"
295
+ },
296
+ {
297
+ "id": "FALSE",
298
+ "displayName": "False"
299
+ },
300
+ {
301
+ "id": "LOCKED",
302
+ "displayName": "Locked"
303
+ },
304
+ {
305
+ "id": "CANCELLED",
306
+ "displayName": "Cancelled"
307
+ },
308
+ {
309
+ "id": "EXPIRED",
310
+ "displayName": "Expired"
311
+ }
312
+ ]
313
+ },
314
+ "fbb62b61-346d-45f4-98bf-bfa56a71bbb0": {
315
+ "_id": "fbb62b61-346d-45f4-98bf-bfa56a71bbb0",
316
+ "_rev": "-1096162297",
317
+ "nodes": [
318
+ {
319
+ "_id": "ce53336d-77cd-4880-b510-39d008fce072",
320
+ "nodeType": "ValidatedPasswordNode",
321
+ "displayName": "Password"
322
+ },
323
+ {
324
+ "_id": "39214bc4-beb9-466b-bec8-d36f4031f0ad",
325
+ "nodeType": "SelectIdPNode",
326
+ "displayName": "Select IDP"
327
+ }
328
+ ],
329
+ "pageDescription": {},
330
+ "pageHeader": {},
331
+ "_type": {
332
+ "_id": "PageNode",
333
+ "name": "Page Node",
334
+ "collection": true
335
+ },
336
+ "_outcomes": [
337
+ {
338
+ "id": "socialAuthentication",
339
+ "displayName": "Social Authentication"
340
+ },
341
+ {
342
+ "id": "localAuthentication",
343
+ "displayName": "Local Authentication"
344
+ }
345
+ ]
346
+ }
347
+ },
348
+ "scripts": {
349
+ "739bdc48-fd24-4c52-b353-88706d75558a": {
350
+ "_id": "739bdc48-fd24-4c52-b353-88706d75558a",
351
+ "name": "Check Username",
352
+ "description": "Check if username has already been collected.",
353
+ "script": "\"/* Check Username\\n *\\n * Author: volker.scheuber@forgerock.com\\n * \\n * Check if username has already been collected.\\n * Return \\\"known\\\" if yes, \\\"unknown\\\" otherwise.\\n * \\n * This script does not need to be parametrized. It will work properly as is.\\n * \\n * The Scripted Decision Node needs the following outcomes defined:\\n * - known\\n * - unknown\\n */\\n(function () {\\n if (null != sharedState.get(\\\"username\\\")) {\\n outcome = \\\"known\\\";\\n }\\n else {\\n outcome = \\\"unknown\\\";\\n }\\n}());\"",
354
+ "default": false,
355
+ "language": "JAVASCRIPT",
356
+ "context": "AUTHENTICATION_TREE_DECISION_NODE",
357
+ "createdBy": "null",
358
+ "creationDate": 0,
359
+ "lastModifiedBy": "null",
360
+ "lastModifiedDate": 0
361
+ },
362
+ "58c824ae-84ed-4724-82cd-db128fc3f6c": {
363
+ "_id": "58c824ae-84ed-4724-82cd-db128fc3f6c",
364
+ "name": "Normalized Profile to Managed User",
365
+ "description": "Converts a normalized social profile into a managed user",
366
+ "script": "\"/*\\n * Copyright 2020 ForgeRock AS. All Rights Reserved\\n *\\n * Use of this code requires a commercial software license with ForgeRock AS.\\n * or with one of its affiliates. All use shall be exclusively subject\\n * to such license between the licensee and ForgeRock AS.\\n */\\n\\nimport static org.forgerock.json.JsonValue.field\\nimport static org.forgerock.json.JsonValue.json\\nimport static org.forgerock.json.JsonValue.object\\n\\nimport org.forgerock.json.JsonValue\\n\\nJsonValue managedUser = json(object(\\n field(\\\"givenName\\\", normalizedProfile.givenName),\\n field(\\\"sn\\\", normalizedProfile.familyName),\\n field(\\\"mail\\\", normalizedProfile.email),\\n field(\\\"userName\\\", normalizedProfile.username)))\\n\\nif (normalizedProfile.postalAddress.isNotNull()) managedUser.put(\\\"postalAddress\\\", normalizedProfile.postalAddress)\\nif (normalizedProfile.addressLocality.isNotNull()) managedUser.put(\\\"city\\\", normalizedProfile.addressLocality)\\nif (normalizedProfile.addressRegion.isNotNull()) managedUser.put(\\\"stateProvince\\\", normalizedProfile.addressRegion)\\nif (normalizedProfile.postalCode.isNotNull()) managedUser.put(\\\"postalCode\\\", normalizedProfile.postalCode)\\nif (normalizedProfile.country.isNotNull()) managedUser.put(\\\"country\\\", normalizedProfile.country)\\nif (normalizedProfile.phone.isNotNull()) managedUser.put(\\\"telephoneNumber\\\", normalizedProfile.phone)\\n\\n// if the givenName and familyName is null or empty\\n// then add a boolean flag to the shared state to indicate names are not present\\n// this could be used elsewhere\\n// for eg. this could be used in a scripted decision node to by-pass patching\\n// the user object with blank values when givenName and familyName is not present\\nboolean noGivenName = normalizedProfile.givenName.isNull() || (!normalizedProfile.givenName.asString()?.trim())\\nboolean noFamilyName = normalizedProfile.familyName.isNull() || (!normalizedProfile.familyName.asString()?.trim())\\nsharedState.put(\\\"nameEmptyOrNull\\\", noGivenName && noFamilyName)\\n\\nreturn managedUser\\n\"",
367
+ "default": true,
368
+ "language": "GROOVY",
369
+ "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION",
370
+ "createdBy": "null",
371
+ "creationDate": 0,
372
+ "lastModifiedBy": "null",
373
+ "lastModifiedDate": 0
374
+ },
375
+ "58d29080-4563-480b-89bb-1e7719776a21": {
376
+ "_id": "58d29080-4563-480b-89bb-1e7719776a21",
377
+ "name": "Google Profile Normalization",
378
+ "description": "Normalizes raw profile data from Google",
379
+ "script": "\"/*\\n * Copyright 2020 ForgeRock AS. All Rights Reserved\\n *\\n * Use of this code requires a commercial software license with ForgeRock AS.\\n * or with one of its affiliates. All use shall be exclusively subject\\n * to such license between the licensee and ForgeRock AS.\\n */\\n\\nimport static org.forgerock.json.JsonValue.field\\nimport static org.forgerock.json.JsonValue.json\\nimport static org.forgerock.json.JsonValue.object\\n\\nreturn json(object(\\n field(\\\"id\\\", rawProfile.sub),\\n field(\\\"displayName\\\", rawProfile.name),\\n field(\\\"givenName\\\", rawProfile.given_name),\\n field(\\\"familyName\\\", rawProfile.family_name),\\n field(\\\"photoUrl\\\", rawProfile.picture),\\n field(\\\"email\\\", rawProfile.email),\\n field(\\\"username\\\", rawProfile.email),\\n field(\\\"locale\\\", rawProfile.locale)))\"",
380
+ "default": true,
381
+ "language": "GROOVY",
382
+ "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION",
383
+ "createdBy": "null",
384
+ "creationDate": 0,
385
+ "lastModifiedBy": "null",
386
+ "lastModifiedDate": 0
387
+ },
388
+ "bae1d54a-e97d-4997-aa5d-c027f21af82c": {
389
+ "_id": "bae1d54a-e97d-4997-aa5d-c027f21af82c",
390
+ "name": "Facebook Profile Normalization",
391
+ "description": "Normalizes raw profile data from Facebook",
392
+ "script": "\"/*\\n * Copyright 2020 ForgeRock AS. All Rights Reserved\\n *\\n * Use of this code requires a commercial software license with ForgeRock AS.\\n * or with one of its affiliates. All use shall be exclusively subject\\n * to such license between the licensee and ForgeRock AS.\\n */\\n\\nimport static org.forgerock.json.JsonValue.field\\nimport static org.forgerock.json.JsonValue.json\\nimport static org.forgerock.json.JsonValue.object\\n\\nreturn json(object(\\n field(\\\"id\\\", rawProfile.id),\\n field(\\\"displayName\\\", rawProfile.name),\\n field(\\\"givenName\\\", rawProfile.first_name),\\n field(\\\"familyName\\\", rawProfile.last_name),\\n field(\\\"photoUrl\\\", rawProfile.picture.data.url),\\n field(\\\"email\\\", rawProfile.email),\\n field(\\\"username\\\", rawProfile.email)))\"",
393
+ "default": true,
394
+ "language": "GROOVY",
395
+ "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION",
396
+ "createdBy": "null",
397
+ "creationDate": 0,
398
+ "lastModifiedBy": "null",
399
+ "lastModifiedDate": 0
400
+ },
401
+ "73cecbfc-dad0-4395-be6a-6858ee3a80e5": {
402
+ "_id": "73cecbfc-dad0-4395-be6a-6858ee3a80e5",
403
+ "name": "Microsoft Profile Normalization",
404
+ "description": "Normalizes raw profile data from Microsoft",
405
+ "script": "\"/*\\n * Copyright 2020 ForgeRock AS. All Rights Reserved\\n *\\n * Use of this code requires a commercial software license with ForgeRock AS.\\n * or with one of its affiliates. All use shall be exclusively subject\\n * to such license between the licensee and ForgeRock AS.\\n */\\n\\n/*\\n{\\n \\\"@odata.context\\\": \\\"https://graph.microsoft.com/v1.0/$metadata#users/$entity\\\",\\n \\\"@odata.id\\\": \\\"https://graph.microsoft.com/v2/711ffa9c-5972-4713-ace3-688c9732614a/directoryObjects/7d7759e2-36d8-4e64-b173-3f890d7d46d6/Microsoft.DirectoryServices.User\\\",\\n \\\"businessPhones\\\": [\\n \\\"18014735451\\\"\\n ],\\n \\\"displayName\\\": \\\"Volker Scheuber\\\",\\n \\\"givenName\\\": \\\"Volker\\\",\\n \\\"jobTitle\\\": null,\\n \\\"mail\\\": \\\"vscheuber@vscheuber.onmicrosoft.com\\\",\\n \\\"mobilePhone\\\": null,\\n \\\"officeLocation\\\": null,\\n \\\"preferredLanguage\\\": null,\\n \\\"surname\\\": \\\"Scheuber\\\",\\n \\\"userPrincipalName\\\": \\\"vscheuber@vscheuber.onmicrosoft.com\\\",\\n \\\"id\\\": \\\"7d7759e2-36d8-4e64-b173-3f890d7d46d6\\\"\\n}\\n */\\n\\nimport static org.forgerock.json.JsonValue.field\\nimport static org.forgerock.json.JsonValue.json\\nimport static org.forgerock.json.JsonValue.object\\n\\nlogger.message(\\\"Kauai Microsoft Profile Normalization: rawProfile={}\\\", rawProfile)\\n\\nreturn json(object(\\n field(\\\"id\\\", rawProfile.id),\\n field(\\\"displayName\\\", rawProfile.displayName),\\n field(\\\"givenName\\\", rawProfile.givenName),\\n field(\\\"familyName\\\", rawProfile.surname),\\n field(\\\"email\\\", rawProfile.userPrincipalName),\\n field(\\\"username\\\", rawProfile.userPrincipalName),\\n field(\\\"groups\\\", rawProfile.groups)))\"",
406
+ "default": true,
407
+ "language": "GROOVY",
408
+ "context": "SOCIAL_IDP_PROFILE_TRANSFORMATION",
409
+ "createdBy": "null",
410
+ "creationDate": 0,
411
+ "lastModifiedBy": "null",
412
+ "lastModifiedDate": 0
413
+ }
414
+ },
415
+ "emailTemplates": {
416
+ "welcome": {
417
+ "_id": "emailTemplate/welcome",
418
+ "defaultLocale": "en",
419
+ "displayName": "Welcome",
420
+ "enabled": true,
421
+ "from": "saas@forgerock.com",
422
+ "html": {
423
+ "en": "<div class=\"content\"><p>Welcome. Your username is '{{object.userName}}'.</p></div>"
424
+ },
425
+ "message": {
426
+ "en": "<html><head></head><body style=\"background-color: #324054; color: #5e6d82; padding: 60px; text-align: center;\"><div class=\"content\" style=\"background-color: #fff; border-radius: 4px; margin: 0 auto; padding: 48px; width: 235px;\"><p>Welcome. Your username is '{{object.userName}}'.</p></div></body></html>"
427
+ },
428
+ "mimeType": "text/html",
429
+ "styles": "body{\n background-color:#324054;\n color:#5e6d82;\n padding:60px;\n text-align:center\n}\na{\n text-decoration:none;\n color:#109cf1\n}\n.content{\n background-color:#fff;\n border-radius:4px;\n margin:0 auto;\n padding:48px;\n width:235px\n}\n",
430
+ "subject": {
431
+ "en": "Your account has been created"
432
+ }
433
+ }
434
+ },
435
+ "socialIdentityProviders": {
436
+ "google": {
437
+ "clientId": "297338177925-mho17cgnm540s2gre8h27feb6sbs1msd.apps.googleusercontent.com",
438
+ "pkceMethod": "S256",
439
+ "wellKnownEndpoint": "https://accounts.google.com/.well-known/openid-configuration",
440
+ "jwtEncryptionMethod": "NONE",
441
+ "authorizationEndpoint": "https://accounts.google.com/o/oauth2/v2/auth",
442
+ "jwtEncryptionAlgorithm": "NONE",
443
+ "clientSecret": null,
444
+ "issuerComparisonCheckType": "EXACT",
445
+ "encryptJwtRequestParameter": false,
446
+ "scopeDelimiter": " ",
447
+ "scopes": [
448
+ "openid",
449
+ "profile",
450
+ "email"
451
+ ],
452
+ "issuer": "https://accounts.google.com",
453
+ "userInfoResponseType": "JSON",
454
+ "acrValues": [],
455
+ "encryptedIdTokens": false,
456
+ "enabled": true,
457
+ "jwtRequestParameterOption": "NONE",
458
+ "authenticationIdKey": "sub",
459
+ "uiConfig": {
460
+ "buttonClass": "",
461
+ "buttonCustomStyle": "background-color: #fff; color: #757575; border-color: #ddd;",
462
+ "buttonCustomStyleHover": "color: #6d6d6d; background-color: #eee; border-color: #ccc;",
463
+ "buttonDisplayName": "Google",
464
+ "buttonImage": "images/g-logo.png",
465
+ "iconBackground": "#4184f3",
466
+ "iconClass": "fa-google",
467
+ "iconFontColor": "white"
468
+ },
469
+ "privateKeyJwtExpTime": 600,
470
+ "revocationCheckOptions": [],
471
+ "enableNativeNonce": true,
472
+ "transform": "58d29080-4563-480b-89bb-1e7719776a21",
473
+ "userInfoEndpoint": "https://www.googleapis.com/oauth2/v3/userinfo",
474
+ "jwtSigningAlgorithm": "NONE",
475
+ "redirectURI": "https://idc.scheuber.io/login",
476
+ "clientAuthenticationMethod": "CLIENT_SECRET_POST",
477
+ "responseMode": "DEFAULT",
478
+ "useCustomTrustStore": false,
479
+ "tokenEndpoint": "https://www.googleapis.com/oauth2/v4/token",
480
+ "_id": "google",
481
+ "_type": {
482
+ "_id": "googleConfig",
483
+ "name": "Client configuration for Google.",
484
+ "collection": true
485
+ }
486
+ },
487
+ "facebook": {
488
+ "clientId": "123741918345526",
489
+ "pkceMethod": "S256",
490
+ "jwtEncryptionMethod": "NONE",
491
+ "authorizationEndpoint": "https://www.facebook.com/dialog/oauth",
492
+ "jwtEncryptionAlgorithm": "NONE",
493
+ "clientSecret": null,
494
+ "issuerComparisonCheckType": "EXACT",
495
+ "scopeDelimiter": " ",
496
+ "scopes": [
497
+ "email"
498
+ ],
499
+ "enabled": true,
500
+ "authenticationIdKey": "id",
501
+ "uiConfig": {
502
+ "buttonClass": "fa-facebook-official",
503
+ "buttonCustomStyle": "background-color: #3b5998; border-color: #3b5998; color: white;",
504
+ "buttonCustomStyleHover": "background-color: #334b7d; border-color: #334b7d; color: white;",
505
+ "buttonDisplayName": "Facebook",
506
+ "buttonImage": "",
507
+ "iconBackground": "#3b5998",
508
+ "iconClass": "fa-facebook",
509
+ "iconFontColor": "white"
510
+ },
511
+ "privateKeyJwtExpTime": 3600,
512
+ "revocationCheckOptions": [],
513
+ "transform": "bae1d54a-e97d-4997-aa5d-c027f21af82c",
514
+ "userInfoEndpoint": "https://graph.facebook.com/me?fields=id,name,picture,email,first_name,last_name,locale",
515
+ "jwtSigningAlgorithm": "NONE",
516
+ "redirectURI": "https://idc.scheuber.io/am/XUI/?realm=%2Falpha",
517
+ "clientAuthenticationMethod": "CLIENT_SECRET_POST",
518
+ "responseMode": "DEFAULT",
519
+ "useCustomTrustStore": false,
520
+ "tokenEndpoint": "https://graph.facebook.com/v2.7/oauth/access_token",
521
+ "_id": "facebook",
522
+ "_type": {
523
+ "_id": "oauth2Config",
524
+ "name": "Client configuration for providers that implement the OAuth2 specification.",
525
+ "collection": true
526
+ }
527
+ },
528
+ "azure": {
529
+ "clientId": "c42a3dc8-f276-496b-a722-269f131cc21c",
530
+ "pkceMethod": "S256",
531
+ "jwtEncryptionMethod": "NONE",
532
+ "authorizationEndpoint": "https://login.microsoftonline.com/711ffa9c-5972-4713-ace3-688c9732614a/oauth2/v2.0/authorize",
533
+ "jwtEncryptionAlgorithm": "NONE",
534
+ "clientSecret": null,
535
+ "issuerComparisonCheckType": "EXACT",
536
+ "scopeDelimiter": " ",
537
+ "scopes": [
538
+ "User.Read",
539
+ "openid"
540
+ ],
541
+ "enabled": true,
542
+ "authenticationIdKey": "id",
543
+ "uiConfig": {
544
+ "buttonClass": "",
545
+ "buttonCustomStyle": "background-color: #fff; border-color: #8b8b8b; color: #8b8b8b;",
546
+ "buttonCustomStyleHover": "background-color: #fff; border-color: #8b8b8b; color: #8b8b8b;",
547
+ "buttonDisplayName": "Microsoft Azure",
548
+ "buttonImage": "/login/images/microsoft-logo.png",
549
+ "iconBackground": "#0078d7",
550
+ "iconClass": "fa-windows",
551
+ "iconFontColor": "white"
552
+ },
553
+ "privateKeyJwtExpTime": 600,
554
+ "revocationCheckOptions": [],
555
+ "transform": "73cecbfc-dad0-4395-be6a-6858ee3a80e5",
556
+ "userInfoEndpoint": "https://graph.microsoft.com/v1.0/me",
557
+ "jwtSigningAlgorithm": "NONE",
558
+ "redirectURI": "https://idc.scheuber.io/login",
559
+ "clientAuthenticationMethod": "CLIENT_SECRET_POST",
560
+ "responseMode": "DEFAULT",
561
+ "useCustomTrustStore": false,
562
+ "tokenEndpoint": "https://login.microsoftonline.com/711ffa9c-5972-4713-ace3-688c9732614a/oauth2/v2.0/token",
563
+ "_id": "azure",
564
+ "_type": {
565
+ "_id": "microsoftConfig",
566
+ "name": "Client configuration for Microsoft.",
567
+ "collection": true
568
+ }
569
+ }
570
+ },
571
+ "themes": [],
572
+ "saml2Entities": {
573
+ "aVNQQXp1cmU": {
574
+ "_id": "aVNQQXp1cmU",
575
+ "_rev": "1379466460",
576
+ "entityId": "iSPAzure",
577
+ "serviceProvider": {
578
+ "assertionContent": {
579
+ "signingAndEncryption": {
580
+ "requestResponseSigning": {},
581
+ "encryption": {},
582
+ "secretIdAndAlgorithms": {}
583
+ },
584
+ "nameIdFormat": {
585
+ "nameIdFormatList": [
586
+ "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent",
587
+ "urn:oasis:names:tc:SAML:2.0:nameid-format:transient",
588
+ "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
589
+ "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified",
590
+ "urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName",
591
+ "urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos",
592
+ "urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName"
593
+ ]
594
+ },
595
+ "authenticationContext": {
596
+ "authenticationContextMapper": "com.sun.identity.saml2.plugins.DefaultSPAuthnContextMapper",
597
+ "authContextItems": [
598
+ {
599
+ "contextReference": "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport",
600
+ "level": 0,
601
+ "defaultItem": true
602
+ }
603
+ ],
604
+ "authenticationComparisonType": "Exact",
605
+ "includeRequestedAuthenticationContext": true
606
+ },
607
+ "assertionTimeSkew": 300,
608
+ "basicAuthentication": {}
609
+ },
610
+ "assertionProcessing": {
611
+ "attributeMapper": {
612
+ "attributeMapper": "com.sun.identity.saml2.plugins.DefaultSPAttributeMapper",
613
+ "attributeMap": [
614
+ {
615
+ "key": "http://schemas.microsoft.com/identity/claims/displayname",
616
+ "value": "cn"
617
+ },
618
+ {
619
+ "key": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname",
620
+ "value": "givenName"
621
+ },
622
+ {
623
+ "key": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname",
624
+ "value": "sn"
625
+ },
626
+ {
627
+ "key": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",
628
+ "value": "mail"
629
+ },
630
+ {
631
+ "key": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",
632
+ "value": "uid"
633
+ }
634
+ ]
635
+ },
636
+ "autoFederation": {
637
+ "autoFedEnabled": false
638
+ },
639
+ "accountMapping": {
640
+ "spAccountMapper": "com.sun.identity.saml2.plugins.DefaultSPAccountMapper",
641
+ "useNameIDAsSPUserID": true
642
+ },
643
+ "responseArtifactMessageEncoding": {
644
+ "encoding": "URI"
645
+ },
646
+ "url": {},
647
+ "adapter": {}
648
+ },
649
+ "services": {
650
+ "metaAlias": "/alpha/iSPAzure",
651
+ "serviceAttributes": {
652
+ "singleLogoutService": [
653
+ {
654
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect",
655
+ "location": "https://idc.scheuber.io/am/SPSloRedirect/metaAlias/alpha/iSPAzure",
656
+ "responseLocation": "https://idc.scheuber.io/am/SPSloRedirect/metaAlias/alpha/iSPAzure"
657
+ },
658
+ {
659
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST",
660
+ "location": "https://idc.scheuber.io/am/SPSloPOST/metaAlias/alpha/iSPAzure",
661
+ "responseLocation": "https://idc.scheuber.io/am/SPSloPOST/metaAlias/alpha/iSPAzure"
662
+ },
663
+ {
664
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:SOAP",
665
+ "location": "https://idc.scheuber.io/am/SPSloSoap/metaAlias/alpha/iSPAzure"
666
+ }
667
+ ],
668
+ "nameIdService": [
669
+ {
670
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect",
671
+ "location": "https://idc.scheuber.io/am/SPMniRedirect/metaAlias/alpha/iSPAzure",
672
+ "responseLocation": "https://idc.scheuber.io/am/SPMniRedirect/metaAlias/alpha/iSPAzure"
673
+ },
674
+ {
675
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST",
676
+ "location": "https://idc.scheuber.io/am/SPMniPOST/metaAlias/alpha/iSPAzure",
677
+ "responseLocation": "https://idc.scheuber.io/am/SPMniPOST/metaAlias/alpha/iSPAzure"
678
+ },
679
+ {
680
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:SOAP",
681
+ "location": "https://idc.scheuber.io/am/SPMniSoap/metaAlias/alpha/iSPAzure",
682
+ "responseLocation": "https://idc.scheuber.io/am/SPMniSoap/metaAlias/alpha/iSPAzure"
683
+ }
684
+ ],
685
+ "assertionConsumerService": [
686
+ {
687
+ "isDefault": true,
688
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact",
689
+ "location": "https://idc.scheuber.io/am/AuthConsumer/metaAlias/alpha/iSPAzure",
690
+ "index": 0
691
+ },
692
+ {
693
+ "isDefault": false,
694
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST",
695
+ "location": "https://idc.scheuber.io/am/AuthConsumer/metaAlias/alpha/iSPAzure",
696
+ "index": 1
697
+ },
698
+ {
699
+ "isDefault": false,
700
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:PAOS",
701
+ "location": "https://idc.scheuber.io/am/Consumer/ECP/metaAlias/alpha/iSPAzure",
702
+ "index": 2
703
+ }
704
+ ]
705
+ }
706
+ },
707
+ "advanced": {
708
+ "saeConfiguration": {
709
+ "spUrl": "https://idc.scheuber.io/am/spsaehandler/metaAlias/alpha/iSPAzure"
710
+ },
711
+ "ecpConfiguration": {
712
+ "ecpRequestIdpListFinderImpl": "com.sun.identity.saml2.plugins.ECPIDPFinder"
713
+ },
714
+ "idpProxy": {},
715
+ "relayStateUrlList": {}
716
+ }
717
+ },
718
+ "entityLocation": "hosted"
719
+ },
720
+ "dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l": {
721
+ "_id": "dXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5l",
722
+ "_rev": "1971501705",
723
+ "entityId": "urn:federation:MicrosoftOnline",
724
+ "serviceProvider": {
725
+ "assertionContent": {
726
+ "signingAndEncryption": {
727
+ "requestResponseSigning": {
728
+ "assertion": true
729
+ },
730
+ "encryption": {}
731
+ },
732
+ "nameIdFormat": {
733
+ "nameIdFormatList": [
734
+ "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
735
+ "urn:mace:shibboleth:1.0:nameIdentifier",
736
+ "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified",
737
+ "urn:oasis:names:tc:SAML:2.0:nameid-format:transient",
738
+ "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
739
+ ]
740
+ },
741
+ "basicAuthentication": {}
742
+ },
743
+ "assertionProcessing": {
744
+ "attributeMapper": {
745
+ "attributeMap": [
746
+ {
747
+ "samlAttribute": "IDPEmail",
748
+ "localAttribute": "mail",
749
+ "binary": false
750
+ },
751
+ {
752
+ "samlAttribute": "UOPClassID",
753
+ "localAttribute": "UOPClassID",
754
+ "binary": false
755
+ }
756
+ ]
757
+ },
758
+ "responseArtifactMessageEncoding": {
759
+ "encoding": "URI"
760
+ }
761
+ },
762
+ "services": {
763
+ "serviceAttributes": {
764
+ "singleLogoutService": [
765
+ {
766
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST",
767
+ "location": "https://login.microsoftonline.com/login.srf"
768
+ }
769
+ ],
770
+ "assertionConsumerService": [
771
+ {
772
+ "isDefault": true,
773
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST",
774
+ "location": "https://login.microsoftonline.com/login.srf",
775
+ "index": 0
776
+ },
777
+ {
778
+ "isDefault": false,
779
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign",
780
+ "location": "https://login.microsoftonline.com/login.srf",
781
+ "index": 1
782
+ },
783
+ {
784
+ "isDefault": false,
785
+ "binding": "urn:oasis:names:tc:SAML:2.0:bindings:PAOS",
786
+ "location": "https://login.microsoftonline.com/login.srf",
787
+ "index": 2
788
+ }
789
+ ]
790
+ }
791
+ },
792
+ "advanced": {
793
+ "saeConfiguration": {},
794
+ "idpProxy": {}
795
+ }
796
+ },
797
+ "entityLocation": "remote",
798
+ "base64EntityXML": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI_Pgo8RW50aXR5RGVzY3JpcHRvciBlbnRpdHlJRD0idXJuOmZlZGVyYXRpb246TWljcm9zb2Z0T25saW5lIiBJRD0iX2U0NmExMTkzLWU4YTctNDhlZC04MDRmLTE1MTY3MjllY2I1ZiIgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDptZXRhZGF0YSIgeG1sbnM6cXVlcnk9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOm1ldGFkYXRhOmV4dDpxdWVyeSIgeG1sbnM6bWRhdHRyPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDptZXRhZGF0YTphdHRyaWJ1dGUiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iIHhtbG5zOnhlbmM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jIyIgeG1sbnM6eGVuYzExPSJodHRwOi8vd3d3LnczLm9yZy8yMDA5L3htbGVuYzExIyIgeG1sbnM6YWxnPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDptZXRhZGF0YTphbGdzdXBwb3J0IiB4bWxuczp4NTA5cXJ5PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDptZXRhZGF0YTpYNTA5OnF1ZXJ5IiB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI-CiAgICA8RXh0ZW5zaW9ucz4KICAgICAgICA8YWxnOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIi8-CiAgICAgICAgPGFsZzpTaWduaW5nTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExIi8-CiAgICA8L0V4dGVuc2lvbnM-CiAgICA8U1BTU09EZXNjcmlwdG9yIFdhbnRBc3NlcnRpb25zU2lnbmVkPSJ0cnVlIiBwcm90b2NvbFN1cHBvcnRFbnVtZXJhdGlvbj0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIj4KICAgICAgICA8S2V5RGVzY3JpcHRvciB1c2U9InNpZ25pbmciPgogICAgICAgICAgICA8ZHM6S2V5SW5mbz4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZHM6WDUwOURhdGE-CiAgICAgICAgICAgICAgICAgICAgPGRzOlg1MDlDZXJ0aWZpY2F0ZT4KTUlJQy9UQ0NBZVdnQXdJQkFnSVFiZ0RIZmkzdDFKTkdWcXdENS83bG1qQU5CZ2txaGtpRzl3MEJBUXNGQURBcE1TY3dKUVlEVlFRRApFeDVNYVhabElFbEVJRk5VVXlCVGFXZHVhVzVuSUZCMVlteHBZeUJMWlhrd0hoY05NakF4TWpJeE1EQXdNREF3V2hjTk1qVXhNakl4Ck1EQXdNREF3V2pBcE1TY3dKUVlEVlFRREV4NU1hWFpsSUVsRUlGTlVVeUJUYVdkdWFXNW5JRkIxWW14cFl5QkxaWGt3Z2dFaU1BMEcKQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUURGVDAvMC8ycVF1cm5ZYTBMYkpIRjlZWW96aEVINnI5bUN4VkRCWWJldwpTRzR0R2dyV3BzZXdRLzk2cGNjekdNUWN0TXZVK2gyZVgzOEh4L2Y5SkFJRGJ1UlF6UWxzUGhRUzdERFo2V2xUWFUrdDhkL2cyQzdmCnBTb0xzNEtWZEppaDR4eWpMVVdqK0JLL2lqc1JqQnQ0Uml3OVZiSkgvRGRXS3lvU01iRUNFaUUrczFSdExQL2VZb01tTmZ4eVFHcVcKaXJDTnFWTkJUbHF6WVFwNGRnRjBmb1l5NGt0b3h3bVFPVm9UY0lNRllwMUk0cEZQSTdDeHVNTGtmSzBYN2FUYk03WUdwaHZNZkp4SgpranJRZHlJN0c1ZDF0NEROaTN6a0ViQlQ3RkdBcjZxUHQzS245cmFscHFKS0hkcEVCQTlOMHZOd1FvNVhUWUloVWJQUTE2SVJBZ01CCkFBR2pJVEFmTUIwR0ExVWREZ1FXQkJSczd0UG1ma2tzU3I2N0t0RWxIallaYmVhQ1RqQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUEKSnF3TVpTalFKMzZ4KzFzdHk2RWVMS1FMUWV3UXdQYUVDNDdadXQrOGJYZWQ2UThqTVowYmZhL01NN1hxdUVjYWJhTVpMUXVLTGZ0NAo0WVh3WFhRT2ZRckkycWpRcjNlVG9KRmxEVDloUjByZnA5d1FxdHREeGQ2QWE2Uld3RFRnbzVvS1VRQ1RLTEhoRXk4dVd6U2NLMGVHCnQyZDdUV1RhRFhqUlN3TnE2dE03ZlJoWnMwN3RLQlYzeGZpOUVReS9tbGF2QU1GUkJWbTg2TlNvN0FzT0cxSU9NcTAzVTNvb0NXQVgKaDlQZHZ2SE5mSGhIMTlmdXRBbkMvSGVPandSRjFRYzUyN2FCTXBoWUZRTGRpVGhmbWZtaUUvQWhRcUN3WjJvRTd1Q0poQnRSK0tiMQpaR2hqSTM1cEhmc1NxR2lGYTdLcis1YXZlODIyUERja2U4OU12Zz09CiAgICAgICAgICAgICAgICAgICAgPC9kczpYNTA5Q2VydGlmaWNhdGU-CiAgICAgICAgICAgICAgICA8L2RzOlg1MDlEYXRhPgogICAgICAgICAgICA8L2RzOktleUluZm8-CiAgICAgICAgPC9LZXlEZXNjcmlwdG9yPgogICAgICAgIDxLZXlEZXNjcmlwdG9yIHVzZT0ic2lnbmluZyI-CiAgICAgICAgICAgIDxkczpLZXlJbmZvPgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkczpYNTA5RGF0YT4KICAgICAgICAgICAgICAgICAgICA8ZHM6WDUwOUNlcnRpZmljYXRlPgpNSUlDL1RDQ0FlV2dBd0lCQWdJUU4vR1BlZ25UOGJsUDJFY1NkTU1iQnpBTkJna3Foa2lHOXcwQkFRc0ZBREFwTVNjd0pRWURWUVFECkV4NU1hWFpsSUVsRUlGTlVVeUJUYVdkdWFXNW5JRkIxWW14cFl5QkxaWGt3SGhjTk1qRXdNakU0TURBd01EQXdXaGNOTWpZd01qRTQKTURBd01EQXdXakFwTVNjd0pRWURWUVFERXg1TWFYWmxJRWxFSUZOVVV5QlRhV2R1YVc1bklGQjFZbXhwWXlCTFpYa3dnZ0VpTUEwRwpDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRRFhkTEdVMkxsNVJQZERVbktRK2YvSFM1cWlUYXkyY0NoOVUyQVM2b0RNCjZTT3hWaFlHdG9lSjFWUGViY0xucGdMZmhQeHpyd1dvVnpYU0VGK1ZSUWJuWUlEMkpiNGtoamd5RWVvVGhrM1ZxclRod2hhaHBTYkIKZzJ2bzA2dklPcDFUUzJSMUJpd0hLVExvQjFpMUlKbmFJRlNDM0JONnBZNGZsWFd5TFF0LzVBQlhFbHYyWFpMcVhNOUVlZmo2Smk0MApuTElzaVc0ZFd3M0JEYS95d1dXME1zaVc1b2pHcTR2b3ZjQWdFTmUvNE5VYmp1NzBnSFAvV1M1RDliVzVwK09JUWk3L3VucmxXZS9oCjNBNmp0QmJiUmxYWVhsTitaMjJ1VFR5eUNEL1c4emVYYUFDTHZIYWd3RU1yUWVQRFhCWnFjL2lYMmtJK29vWnIxc0MvSDM5UkFnTUIKQUFHaklUQWZNQjBHQTFVZERnUVdCQlNyWDJkbTNMd1Q5amIvcCtiQUFkWVFwRSsvTmpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQQplcUpmWUhuc0E5cWhHdHRYRmZGcFBXNERRTGg1dzZKQ2NlN3ZHdldJTnI1ZnIxRG5RZGNPcit3d2pRL3RxYmNrQUwydjZ6MUFxamhTCjc4a2JmZWduQVFEd2lvSloxb2xZWXZMT3hLb2E2SEYrYjEvcDBNbHViOFp1a2sybjFiMmxLUEJCT2liT2FzU1k3Z1FEd2xJWmk3dGwKOW5NVHhVZmRZSytFNUF4djdEVm5tVUN3Y25ucFY1LzFTRmROeVcya1dPNEM2OHJyak1PdkVDZndyS2tiZlZKTThmOWtyRVVCdW9CRgo4ZFREdjdEMlpNNFEyYnVDNzBOYmZhTldVWDB5RnZLSTBJdVRxazhSQmZHVFJRNGZaQWJoTVBheWtFcEJ1NmROalRpNVlPYTBsTnFGCkdTN0F4N2xlQ2g1eDlsVjhlbGNMa1hzOHlTbzhBT1FKazBoZ0l3PT0KICAgICAgICAgICAgICAgICAgICA8L2RzOlg1MDlDZXJ0aWZpY2F0ZT4KICAgICAgICAgICAgICAgIDwvZHM6WDUwOURhdGE-CiAgICAgICAgICAgIDwvZHM6S2V5SW5mbz4KICAgICAgICA8L0tleURlc2NyaXB0b3I-CiAgICAgICAgPEtleURlc2NyaXB0b3IgdXNlPSJzaWduaW5nIj4KICAgICAgICAgICAgPGRzOktleUluZm8-CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgPGRzOlg1MDlEYXRhPgogICAgICAgICAgICAgICAgICAgIDxkczpYNTA5Q2VydGlmaWNhdGU-Ck1JSUMvVENDQWVXZ0F3SUJBZ0lRTi9HUGVnblQ4YmxQMkVjU2RNTWJCekFOQmdrcWhraUc5dzBCQVFzRkFEQXBNU2N3SlFZRFZRUUQKRXg1TWFYWmxJRWxFSUZOVVV5QlRhV2R1YVc1bklGQjFZbXhwWXlCTFpYa3dIaGNOTWpFd01qRTRNREF3TURBd1doY05Nall3TWpFNApNREF3TURBd1dqQXBNU2N3SlFZRFZRUURFeDVNYVhabElFbEVJRk5VVXlCVGFXZHVhVzVuSUZCMVlteHBZeUJMWlhrd2dnRWlNQTBHCkNTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEWGRMR1UyTGw1UlBkRFVuS1ErZi9IUzVxaVRheTJjQ2g5VTJBUzZvRE0KNlNPeFZoWUd0b2VKMVZQZWJjTG5wZ0xmaFB4enJ3V29WelhTRUYrVlJRYm5ZSUQySmI0a2hqZ3lFZW9UaGszVnFyVGh3aGFocFNiQgpnMnZvMDZ2SU9wMVRTMlIxQml3SEtUTG9CMWkxSUpuYUlGU0MzQk42cFk0ZmxYV3lMUXQvNUFCWEVsdjJYWkxxWE05RWVmajZKaTQwCm5MSXNpVzRkV3czQkRhL3l3V1cwTXNpVzVvakdxNHZvdmNBZ0VOZS80TlVianU3MGdIUC9XUzVEOWJXNXArT0lRaTcvdW5ybFdlL2gKM0E2anRCYmJSbFhZWGxOK1oyMnVUVHl5Q0QvVzh6ZVhhQUNMdkhhZ3dFTXJRZVBEWEJacWMvaVgya0krb29acjFzQy9IMzlSQWdNQgpBQUdqSVRBZk1CMEdBMVVkRGdRV0JCU3JYMmRtM0x3VDlqYi9wK2JBQWRZUXBFKy9OakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBCmVxSmZZSG5zQTlxaEd0dFhGZkZwUFc0RFFMaDV3NkpDY2U3dkd2V0lOcjVmcjFEblFkY09yK3d3alEvdHFiY2tBTDJ2NnoxQXFqaFMKNzhrYmZlZ25BUUR3aW9KWjFvbFlZdkxPeEtvYTZIRitiMS9wME1sdWI4WnVrazJuMWIybEtQQkJPaWJPYXNTWTdnUUR3bElaaTd0bAo5bk1UeFVmZFlLK0U1QXh2N0RWbm1VQ3djbm5wVjUvMVNGZE55VzJrV080QzY4cnJqTU92RUNmd3JLa2JmVkpNOGY5a3JFVUJ1b0JGCjhkVER2N0QyWk00UTJidUM3ME5iZmFOV1VYMHlGdktJMEl1VHFrOFJCZkdUUlE0ZlpBYmhNUGF5a0VwQnU2ZE5qVGk1WU9hMGxOcUYKR1M3QXg3bGVDaDV4OWxWOGVsY0xrWHM4eVNvOEFPUUprMGhnSXc9PQogICAgICAgICAgICAgICAgICAgIDwvZHM6WDUwOUNlcnRpZmljYXRlPgogICAgICAgICAgICAgICAgPC9kczpYNTA5RGF0YT4KICAgICAgICAgICAgPC9kczpLZXlJbmZvPgogICAgICAgIDwvS2V5RGVzY3JpcHRvcj4KICAgICAgICA8U2luZ2xlTG9nb3V0U2VydmljZSBCaW5kaW5nPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1QT1NUIiBMb2NhdGlvbj0iaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tL2xvZ2luLnNyZiIvPgogICAgICAgIDxOYW1lSURGb3JtYXQ-dXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6ZW1haWxBZGRyZXNzPC9OYW1lSURGb3JtYXQ-CiAgICAgICAgPE5hbWVJREZvcm1hdD51cm46bWFjZTpzaGliYm9sZXRoOjEuMDpuYW1lSWRlbnRpZmllcjwvTmFtZUlERm9ybWF0PgogICAgICAgIDxOYW1lSURGb3JtYXQ-dXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6dW5zcGVjaWZpZWQ8L05hbWVJREZvcm1hdD4KICAgICAgICA8TmFtZUlERm9ybWF0PnVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpuYW1laWQtZm9ybWF0OnRyYW5zaWVudDwvTmFtZUlERm9ybWF0PgogICAgICAgIDxOYW1lSURGb3JtYXQ-dXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOm5hbWVpZC1mb3JtYXQ6cGVyc2lzdGVudDwvTmFtZUlERm9ybWF0PgogICAgICAgIDxBc3NlcnRpb25Db25zdW1lclNlcnZpY2UgaW5kZXg9IjAiIGlzRGVmYXVsdD0idHJ1ZSIgQmluZGluZz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmJpbmRpbmdzOkhUVFAtUE9TVCIgTG9jYXRpb249Imh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS9sb2dpbi5zcmYiLz4KICAgICAgICA8QXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlIGluZGV4PSIxIiBpc0RlZmF1bHQ9ImZhbHNlIiBCaW5kaW5nPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1QT1NULVNpbXBsZVNpZ24iIExvY2F0aW9uPSJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vbG9naW4uc3JmIi8-CiAgICAgICAgPEFzc2VydGlvbkNvbnN1bWVyU2VydmljZSBpbmRleD0iMiIgaXNEZWZhdWx0PSJmYWxzZSIgQmluZGluZz0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmJpbmRpbmdzOlBBT1MiIExvY2F0aW9uPSJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vbG9naW4uc3JmIi8-CiAgICA8L1NQU1NPRGVzY3JpcHRvcj4KPC9FbnRpdHlEZXNjcmlwdG9yPgoK"
799
+ }
800
+ },
801
+ "circlesOfTrust": {
802
+ "AzureCOT": {
803
+ "_id": "AzureCOT",
804
+ "_rev": "-954827061",
805
+ "trustedProviders": [
806
+ "iSPAzure|saml2",
807
+ "urn:federation:MicrosoftOnline|saml2",
808
+ "https://sts.windows.net/711ffa9c-5972-4713-ace3-688c9732614a/|saml2",
809
+ "SPAzure|saml2",
810
+ "https://idc.scheuber.io/am/saml2/IDPAzure|saml2"
811
+ ],
812
+ "status": "active",
813
+ "_type": {
814
+ "_id": "circlesoftrust",
815
+ "name": "Circle of Trust",
816
+ "collection": true
817
+ }
818
+ }
819
+ },
820
+ "tree": {
821
+ "_id": "FrodoTestJourney4",
822
+ "_rev": "2064789684",
823
+ "identityResource": "managed/alpha_user",
824
+ "uiConfig": {
825
+ "categories": "[\"Frodo\",\"Prototype\"]"
826
+ },
827
+ "entryNodeId": "4d4535f0-ceb9-4aac-a86e-78cf8e11c044",
828
+ "nodes": {
829
+ "4d4535f0-ceb9-4aac-a86e-78cf8e11c044": {
830
+ "x": 210,
831
+ "y": 305.5,
832
+ "connections": {
833
+ "unknown": "d6bf3b33-f8b9-4e9c-82bf-56917952eae2",
834
+ "known": "fbb62b61-346d-45f4-98bf-bfa56a71bbb0"
835
+ },
836
+ "nodeType": "ScriptedDecisionNode",
837
+ "displayName": "Check Username"
838
+ },
839
+ "848e3f95-7dcb-4d90-9333-76fea189fbb9": {
840
+ "x": 1163,
841
+ "y": 305.5,
842
+ "connections": {
843
+ "ACCOUNT_EXISTS": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0",
844
+ "NO_ACCOUNT": "e301438c-0bd0-429c-ab0c-66126501069a"
845
+ },
846
+ "nodeType": "product-Saml2Node",
847
+ "displayName": "SAML2 Authentication"
848
+ },
849
+ "ee68b747-ffd4-4ee2-9111-55e0ef511dcd": {
850
+ "x": 915,
851
+ "y": 168.66666666666669,
852
+ "connections": {
853
+ "false": "e301438c-0bd0-429c-ab0c-66126501069a",
854
+ "true": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0"
855
+ },
856
+ "nodeType": "InnerTreeEvaluatorNode",
857
+ "displayName": "Login"
858
+ },
859
+ "27671bb9-3f18-41a1-8c4a-2ae74e7f7c23": {
860
+ "x": 915,
861
+ "y": 309.33333333333337,
862
+ "connections": {
863
+ "EMAIL_NOT_SENT": "e301438c-0bd0-429c-ab0c-66126501069a",
864
+ "EMAIL_SENT": "848e3f95-7dcb-4d90-9333-76fea189fbb9"
865
+ },
866
+ "nodeType": "EmailTemplateNode",
867
+ "displayName": "Email Template Node"
868
+ },
869
+ "d6bf3b33-f8b9-4e9c-82bf-56917952eae2": {
870
+ "x": 440,
871
+ "y": 80,
872
+ "connections": {
873
+ "localAuthentication": "9d8ba851-9a00-4bd1-968c-bb8dc89d31ef",
874
+ "socialAuthentication": "f7dbafa0-4872-4895-8f16-166c67f37351"
875
+ },
876
+ "nodeType": "PageNode",
877
+ "displayName": "Login Page"
878
+ },
879
+ "f7dbafa0-4872-4895-8f16-166c67f37351": {
880
+ "x": 685,
881
+ "y": 371.8333333333333,
882
+ "connections": {
883
+ "ACCOUNT_EXISTS": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0",
884
+ "NO_ACCOUNT": "27671bb9-3f18-41a1-8c4a-2ae74e7f7c23"
885
+ },
886
+ "nodeType": "SocialProviderHandlerNode",
887
+ "displayName": "Social Login"
888
+ },
889
+ "9d8ba851-9a00-4bd1-968c-bb8dc89d31ef": {
890
+ "x": 685,
891
+ "y": 143.66666666666666,
892
+ "connections": {
893
+ "CANCELLED": "ee68b747-ffd4-4ee2-9111-55e0ef511dcd",
894
+ "EXPIRED": "ee68b747-ffd4-4ee2-9111-55e0ef511dcd",
895
+ "FALSE": "e301438c-0bd0-429c-ab0c-66126501069a",
896
+ "LOCKED": "e301438c-0bd0-429c-ab0c-66126501069a",
897
+ "TRUE": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0"
898
+ },
899
+ "nodeType": "IdentityStoreDecisionNode",
900
+ "displayName": "Validate Creds"
901
+ },
902
+ "fbb62b61-346d-45f4-98bf-bfa56a71bbb0": {
903
+ "x": 440,
904
+ "y": 424,
905
+ "connections": {
906
+ "localAuthentication": "9d8ba851-9a00-4bd1-968c-bb8dc89d31ef",
907
+ "socialAuthentication": "f7dbafa0-4872-4895-8f16-166c67f37351"
908
+ },
909
+ "nodeType": "PageNode",
910
+ "displayName": "Login Page"
911
+ }
912
+ },
913
+ "staticNodes": {
914
+ "startNode": {
915
+ "x": 70,
916
+ "y": 323
917
+ },
918
+ "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": {
919
+ "x": 1417,
920
+ "y": 192
921
+ },
922
+ "e301438c-0bd0-429c-ab0c-66126501069a": {
923
+ "x": 1417,
924
+ "y": 286
925
+ }
926
+ },
927
+ "description": "Frodo test journey utilizing a variety of nodes and dependencies to test support for complex journeys.",
928
+ "enabled": true
929
+ }
930
+ }