
{
  "origin": "8600b043320dbf667abd29db829273d3",
  "innernodes": {
    "9c0a279b-d95b-4486-b60f-83f0c058be43": {
      "_id": "9c0a279b-d95b-4486-b60f-83f0c058be43",
      "passwordExpiryTime": 5,
      "_type": {
        "_id": "OneTimePasswordCollectorDecisionNode",
        "name": "OTP Collector Decision",
        "collection": true
      },
      "_outcomes": [
        {
          "id": "true",
          "displayName": "True"
        },
        {
          "id": "false",
          "displayName": "False"
        }
      ]
    }
  },
  "nodes": {
    "0c7a3b6a-01fb-47e0-8783-cec5bb3ff464": {
      "_id": "0c7a3b6a-01fb-47e0-8783-cec5bb3ff464",
      "length": 8,
      "_type": {
        "_id": "OneTimePasswordGeneratorNode",
        "name": "HOTP Generator",
        "collection": true
      },
      "_outcomes": [
        {
          "id": "outcome",
          "displayName": "Outcome"
        }
      ]
    },
    "2ee89680-9d67-41ae-854a-8a9d196212c8": {
      "_id": "2ee89680-9d67-41ae-854a-8a9d196212c8",
      "inputs": [
        "*"
      ],
      "outcomes": [
        "known",
        "unknown"
      ],
      "outputs": [
        "*"
      ],
      "script": "739bdc48-fd24-4c52-b353-88706d75558a",
      "_type": {
        "_id": "ScriptedDecisionNode",
        "name": "Scripted Decision",
        "collection": true
      },
      "_outcomes": [
        {
          "id": "known",
          "displayName": "known"
        },
        {
          "id": "unknown",
          "displayName": "unknown"
        }
      ]
    },
    "7dc90872-d664-46cf-a27b-9304d8fa60b7": {
      "_id": "7dc90872-d664-46cf-a27b-9304d8fa60b7",
      "nodes": [
        {
          "_id": "9c0a279b-d95b-4486-b60f-83f0c058be43",
          "nodeType": "OneTimePasswordCollectorDecisionNode",
          "displayName": "Validate OTP"
        }
      ],
      "pageHeader": {
        "en": "Please Check Your Email"
      },
      "pageDescription": {
        "en": "We have sent a one-time password (OTP) to your email address."
      },
      "_type": {
        "_id": "PageNode",
        "name": "Page Node",
        "collection": true
      },
      "_outcomes": [
        {
          "id": "true",
          "displayName": "True"
        },
        {
          "id": "false",
          "displayName": "False"
        }
      ]
    },
    "a52cb8d9-31a3-4210-b032-67e598688dfe": {
      "_id": "a52cb8d9-31a3-4210-b032-67e598688dfe",
      "emailAttribute": "mail",
      "emailTemplateName": "oneTimePassword",
      "identityAttribute": "userName",
      "_type": {
        "_id": "EmailTemplateNode",
        "name": "Email Template Node",
        "collection": true
      },
      "_outcomes": [
        {
          "id": "EMAIL_SENT",
          "displayName": "Email Sent"
        },
        {
          "id": "EMAIL_NOT_SENT",
          "displayName": "Email Not Sent"
        }
      ]
    },
    "bda397c6-f163-47d5-9eb2-b6ca0c9abbc4": {
      "_id": "bda397c6-f163-47d5-9eb2-b6ca0c9abbc4",
      "identityAttribute": "userName",
      "identityResource": "managed/alpha_user",
      "ignoredFields": [
        "userName"
      ],
      "patchAsObject": false,
      "_type": {
        "_id": "PatchObjectNode",
        "name": "Patch Object",
        "collection": true
      },
      "_outcomes": [
        {
          "id": "PATCHED",
          "displayName": "Patched"
        },
        {
          "id": "FAILURE",
          "displayName": "Failed"
        }
      ]
    },
    "cc20f10a-be0d-491b-9802-3ac5202703c6": {
      "_id": "cc20f10a-be0d-491b-9802-3ac5202703c6",
      "inputs": [
        "*"
      ],
      "outcomes": [
        "true"
      ],
      "outputs": [
        "*"
      ],
      "script": "98a87024-3d07-4c75-b1ea-43ff905e9def",
      "_type": {
        "_id": "ScriptedDecisionNode",
        "name": "Scripted Decision",
        "collection": true
      },
      "_outcomes": [
        {
          "id": "true",
          "displayName": "true"
        }
      ]
    },
    "deb7912e-5d58-443d-9697-e18211dc3d6b": {
      "_id": "deb7912e-5d58-443d-9697-e18211dc3d6b",
      "inputs": [
        "*"
      ],
      "outcomes": [
        "true"
      ],
      "outputs": [
        "*"
      ],
      "script": "5561a45f-bf00-4ec5-bab4-f069bac9a38b",
      "_type": {
        "_id": "ScriptedDecisionNode",
        "name": "Scripted Decision",
        "collection": true
      },
      "_outcomes": [
        {
          "id": "true",
          "displayName": "true"
        }
      ]
    },
    "ee075206-8bc0-4b3b-b773-60f32dc25ebb": {
      "_id": "ee075206-8bc0-4b3b-b773-60f32dc25ebb",
      "identityAttribute": "userName",
      "identityResource": "managed/alpha_user",
      "ignoredFields": [
        "userName"
      ],
      "patchAsObject": false,
      "_type": {
        "_id": "PatchObjectNode",
        "name": "Patch Object",
        "collection": true
      },
      "_outcomes": [
        {
          "id": "PATCHED",
          "displayName": "Patched"
        },
        {
          "id": "FAILURE",
          "displayName": "Failed"
        }
      ]
    }
  },
  "scripts": {
    "739bdc48-fd24-4c52-b353-88706d75558a": {
      "_id": "739bdc48-fd24-4c52-b353-88706d75558a",
      "name": "Check Username",
      "description": "Check if username has already been collected.",
      "script": "LyogQ2hlY2sgVXNlcm5hbWUKICoKICogQXV0aG9yOiB2b2xrZXIuc2NoZXViZXJAZm9yZ2Vyb2NrLmNvbQogKiAKICogQ2hlY2sgaWYgdXNlcm5hbWUgaGFzIGFscmVhZHkgYmVlbiBjb2xsZWN0ZWQuCiAqIFJldHVybiAia25vd24iIGlmIHllcywgInVua25vd24iIG90aGVyd2lzZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0ga25vd24KICogLSB1bmtub3duCiAqLwppZiAobnVsbCAhPSBzaGFyZWRTdGF0ZS5nZXQoInVzZXJuYW1lIikpIHsKCW91dGNvbWUgPSAia25vd24iOwp9CmVsc2UgewogCW91dGNvbWUgPSAidW5rbm93biI7Cn0=",
      "default": false,
      "language": "JAVASCRIPT",
      "context": "AUTHENTICATION_TREE_DECISION_NODE",
      "createdBy": "null",
      "creationDate": 0,
      "lastModifiedBy": "null",
      "lastModifiedDate": 0
    },
    "98a87024-3d07-4c75-b1ea-43ff905e9def": {
      "_id": "98a87024-3d07-4c75-b1ea-43ff905e9def",
      "name": "ResetOTPProfileAttribute",
      "description": "Reset the IDM profile shared state so it can be patched to the user profile.",
      "script": "LyogUmVzZXRPVFBQcm9maWxlQXR0cmlidXRlCiAqCiAqIEF1dGhvcjogdm9sa2VyLnNjaGV1YmVyQGZvcmdlcm9jay5jb20KICogCiAqIFJlc2V0IHRoZSBJRE0gcHJvZmlsZSBzaGFyZWQgc3RhdGUgc28gaXQgY2FuIGJlIHBhdGNoZWQgdG8gdGhlIHVzZXIgcHJvZmlsZS4KICogCiAqIFRoaXMgc2NyaXB0IGRvZXMgbm90IG5lZWQgdG8gYmUgcGFyYW1ldHJpemVkLiBJdCB3aWxsIHdvcmsgcHJvcGVybHkgYXMgaXMuCiAqIAogKiBUaGUgU2NyaXB0ZWQgRGVjaXNpb24gTm9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIG91dGNvbWVzIGRlZmluZWQ6CiAqIC0gdHJ1ZQogKi8KaWYgKHNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpKSB7CglzaGFyZWRTdGF0ZS5nZXQoIm9iamVjdEF0dHJpYnV0ZXMiKS5wdXQoImRlc2NyaXB0aW9uIiwgIiIpCn0KZWxzZSB7CglzaGFyZWRTdGF0ZS5wdXQoIm9iamVjdEF0dHJpYnV0ZXMiLCB7ZGVzY3JpcHRpb246ICIifSk7Cn0Kb3V0Y29tZSA9ICJ0cnVlIjs=",
      "default": false,
      "language": "JAVASCRIPT",
      "context": "AUTHENTICATION_TREE_DECISION_NODE",
      "createdBy": "null",
      "creationDate": 0,
      "lastModifiedBy": "null",
      "lastModifiedDate": 0
    },
    "5561a45f-bf00-4ec5-bab4-f069bac9a38b": {
      "_id": "5561a45f-bf00-4ec5-bab4-f069bac9a38b",
      "name": "CopyOTPToObjectAttributes",
      "description": "Copy an OTP generated by the \"HOTP Generator\" node to the IDM profile shared state so it can be patched to the user profile.",
      "script": "LyogQ29weU9UUFRvT2JqZWN0QXR0cmlidXRlcwogKgogKiBBdXRob3I6IHZvbGtlci5zY2hldWJlckBmb3JnZXJvY2suY29tCiAqIAogKiBDb3B5IGFuIE9UUCBnZW5lcmF0ZWQgYnkgdGhlICJIT1RQIEdlbmVyYXRvciIgbm9kZSB0byB0aGUgSURNIHByb2ZpbGUgCiAqIHNoYXJlZCBzdGF0ZSBzbyBpdCBjYW4gYmUgcGF0Y2hlZCB0byB0aGUgdXNlciBwcm9maWxlLgogKiAKICogVGhpcyBzY3JpcHQgZG9lcyBub3QgbmVlZCB0byBiZSBwYXJhbWV0cml6ZWQuIEl0IHdpbGwgd29yayBwcm9wZXJseSBhcyBpcy4KICogCiAqIFRoZSBTY3JpcHRlZCBEZWNpc2lvbiBOb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgb3V0Y29tZXMgZGVmaW5lZDoKICogLSB0cnVlCiAqLwppZiAoc2hhcmVkU3RhdGUuZ2V0KCJvYmplY3RBdHRyaWJ1dGVzIikpIHsKCXNoYXJlZFN0YXRlLmdldCgib2JqZWN0QXR0cmlidXRlcyIpLnB1dCgiZGVzY3JpcHRpb24iLCBzaGFyZWRTdGF0ZS5nZXQoIm9uZVRpbWVQYXNzd29yZCIpKQp9CmVsc2UgewoJc2hhcmVkU3RhdGUucHV0KCJvYmplY3RBdHRyaWJ1dGVzIiwge2Rlc2NyaXB0aW9uOiBzaGFyZWRTdGF0ZS5nZXQoIm9uZVRpbWVQYXNzd29yZCIpfSk7Cn0Kb3V0Y29tZSA9ICJ0cnVlIjs=",
      "default": false,
      "language": "JAVASCRIPT",
      "context": "AUTHENTICATION_TREE_DECISION_NODE",
      "createdBy": "null",
      "creationDate": 0,
      "lastModifiedBy": "null",
      "lastModifiedDate": 0
    }
  },
  "emailTemplates": {
    "oneTimePassword": {
      "_id": "emailTemplate/oneTimePassword",
      "defaultLocale": "en",
      "enabled": true,
      "from": "",
      "message": {
        "en": "<h3>This is your one-time password:</h3><h4>{{object.description}}</a></h4>"
      },
      "mimeType": "text/html",
      "subject": {
        "en": "One-Time Password for login"
      }
    }
  },
  "tree": {
    "_id": "MFAWithEmailOTP",
    "entryNodeId": "2ee89680-9d67-41ae-854a-8a9d196212c8",
    "nodes": {
      "deb7912e-5d58-443d-9697-e18211dc3d6b": {
        "x": 476,
        "y": 113.76666259765625,
        "connections": {
          "true": "ee075206-8bc0-4b3b-b773-60f32dc25ebb"
        },
        "nodeType": "ScriptedDecisionNode",
        "displayName": "Prep OTP Store"
      },
      "a52cb8d9-31a3-4210-b032-67e598688dfe": {
        "x": 802,
        "y": 355.76666259765625,
        "connections": {
          "EMAIL_NOT_SENT": "e301438c-0bd0-429c-ab0c-66126501069a",
          "EMAIL_SENT": "7dc90872-d664-46cf-a27b-9304d8fa60b7"
        },
        "nodeType": "EmailTemplateNode",
        "displayName": "Send OTP"
      },
      "ee075206-8bc0-4b3b-b773-60f32dc25ebb": {
        "x": 636,
        "y": 205.76666259765625,
        "connections": {
          "FAILURE": "e301438c-0bd0-429c-ab0c-66126501069a",
          "PATCHED": "a52cb8d9-31a3-4210-b032-67e598688dfe"
        },
        "nodeType": "PatchObjectNode",
        "displayName": "Store OTP"
      },
      "cc20f10a-be0d-491b-9802-3ac5202703c6": {
        "x": 1146,
        "y": 647.7666625976562,
        "connections": {
          "true": "bda397c6-f163-47d5-9eb2-b6ca0c9abbc4"
        },
        "nodeType": "ScriptedDecisionNode",
        "displayName": "Prep OTP Reset"
      },
      "bda397c6-f163-47d5-9eb2-b6ca0c9abbc4": {
        "x": 1275,
        "y": 756.7666625976562,
        "connections": {
          "FAILURE": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0",
          "PATCHED": "70e691a5-1e33-4ac3-a356-e7b6d60d92e0"
        },
        "nodeType": "PatchObjectNode",
        "displayName": "Reset OTP"
      },
      "2ee89680-9d67-41ae-854a-8a9d196212c8": {
        "x": 137,
        "y": 154.015625,
        "connections": {
          "known": "0c7a3b6a-01fb-47e0-8783-cec5bb3ff464",
          "unknown": "e301438c-0bd0-429c-ab0c-66126501069a"
        },
        "nodeType": "ScriptedDecisionNode",
        "displayName": "Check Username"
      },
      "0c7a3b6a-01fb-47e0-8783-cec5bb3ff464": {
        "x": 314,
        "y": 15.76666259765625,
        "connections": {
          "outcome": "deb7912e-5d58-443d-9697-e18211dc3d6b"
        },
        "nodeType": "OneTimePasswordGeneratorNode",
        "displayName": "Generate HOTP"
      },
      "7dc90872-d664-46cf-a27b-9304d8fa60b7": {
        "x": 983,
        "y": 457.015625,
        "connections": {
          "true": "cc20f10a-be0d-491b-9802-3ac5202703c6",
          "false": "e301438c-0bd0-429c-ab0c-66126501069a"
        },
        "nodeType": "PageNode",
        "displayName": "OTP Validation"
      }
    },
    "staticNodes": {
      "startNode": {
        "x": 50,
        "y": 75
      },
      "70e691a5-1e33-4ac3-a356-e7b6d60d92e0": {
        "x": 1494,
        "y": 781
      },
      "e301438c-0bd0-429c-ab0c-66126501069a": {
        "x": 1371,
        "y": 20
      }
    },
    "identityResource": "managed/alpha_user",
    "uiConfig": {}
  }
}
