{
  "id": "createNewUser",
  "name": "createNewUser",
  "displayName": "createNewUser",
  "description": "createNewUser",
  "type": "provisioning",
  "_rev": 4,
  "steps": [
    {
      "name": "approvalTask-74cf85c35437",
      "displayName": "Approval Task",
      "type": "approvalTask",
      "approvalTask": {
        "nextStep": [
          {
            "condition": null,
            "outcome": "EXPIRATION",
            "step": null
          },
          {
            "condition": null,
            "outcome": "APPROVE",
            "step": "scriptTask-0359a9d77ee2"
          },
          {
            "condition": null,
            "outcome": "REJECT",
            "step": "scriptTask-aec6c36b3a45"
          }
        ],
        "approvalMode": "any",
        "actors": [
          {
            "id": "managed/user/c51d9ee1-43b3-49d1-8742-cbb33842a5cc",
            "permissions": {
              "approve": true,
              "reject": true,
              "reassign": true,
              "modify": true,
              "comment": true
            }
          }
        ],
        "events": {
          "assignment": {
            "notification": "requestAssigned"
          },
          "reassign": {
            "notification": "requestReassigned"
          },
          "reminder": {
            "notification": "requestReminder",
            "frequency": 3,
            "date": {
              "isExpression": true,
              "value": "(new Date(new Date().getTime()+(3*1*24*60*60*1000))).toISOString()"
            }
          },
          "escalation": {
            "notification": "requestEscalated",
            "date": {
              "isExpression": true,
              "value": "(new Date(new Date().getTime()+(5*1*24*60*60*1000))).toISOString()"
            },
            "actors": [
              {
                "id": "managed/user/517c1964-a205-4e1f-b8d8-590f29795c4d"
              }
            ]
          },
          "expiration": {
            "action": "reject",
            "notification": "requestExpired",
            "actors": [
              {
                "id": "managed/user/517c1964-a205-4e1f-b8d8-590f29795c4d"
              }
            ],
            "date": {
              "isExpression": true,
              "value": "(new Date(new Date().getTime()+(1*24*60*60*1000))).toISOString()"
            },
            "frequency": 1
          }
        }
      },
      "approvalMode": "any"
    },
    {
      "name": "scriptTask-0359a9d77ee2",
      "displayName": "Create User",
      "type": "scriptTask",
      "scriptTask": {
        "nextStep": [
          {
            "condition": "true",
            "outcome": "done",
            "step": null
          }
        ],
        "language": "javascript",
        "script": "logger.info(\"Creating User\");\n\nvar content = execution.getVariables();\nvar requestId = content.get('id');\nvar failureReason = null;\n\ntry {\n  var requestObj = openidm.action('iga/governance/requests/' + requestId, 'GET', {}, {});\n  logger.info(\"requestObj: \" + requestObj);\n}\ncatch (e) {\n  failureReason = \"Provisioning failed: Error reading request with id \" + requestId;\n}\n\nif(!failureReason) {\n  try {\n    var request = requestObj.request;\n    var payload = {\n      \"userName\": request.custom.userName,\n      \"givenName\": request.custom.givenName,\n      \"sn\": request.custom.sn,\n      \"mail\": request.custom.mail,\n      \"password\": 'DemoP@ssword1'\n    };\n\n    /** Create new user **/\n    var result = openidm.create('managed/alpha_user', null, payload, queryParams);\n\n    /** Send new user email **/\n    var body = { \n      subject: \"Welcome \" + payload.givenName + \" \" + payload.sn + \"!\",\n      to: payload.mail,\n      body: \"Your new user has been created in the system.\\n\\nUsername: \" + payload.userName + \"\\nPassword: \" + payload.password + \"\\n\\nLogin to your account here: https://openam-gov-dev-4.forgeblocks.com/am/XUI/?realm=/alpha#/\",\n      object: {}\n    };\n    openidm.action(\"external/email\", \"send\", body);\n  }\n  catch (e) {\n    failureReason = \"Creating user failed: Error during creation of user \" + request.custom.userName + \". Error message: \" + e.message;\n  }\n  \n  var decision = {'status': 'complete', 'decision': 'approved'};\n  if (failureReason) {\n    decision.outcome = 'not provisioned';\n    decision.comment = failureReason;\n    decision.failure = true;\n  }\n  else {\n    decision.outcome = 'provisioned';\n  }\n\n  var queryParams = { '_action': 'update'};\n  openidm.action('iga/governance/requests/' + requestId, 'POST', decision, queryParams);\n  logger.info(\"Request \" + requestId + \" completed.\");\n}"
      }
    },
    {
      "name": "scriptTask-aec6c36b3a45",
      "displayName": "Reject Request",
      "type": "scriptTask",
      "scriptTask": {
        "nextStep": [
          {
            "condition": "true",
            "outcome": "done",
            "step": null
          }
        ],
        "language": "javascript",
        "script": "logger.info(\"Rejecting request\");\n\nvar content = execution.getVariables();\nvar requestId = content.get('id');\n\nlogger.info(\"Execution Content: \" + content);\nvar requestIndex = openidm.action('iga/governance/requests/' + requestId, 'GET', {}, {});\nvar decision = {'outcome': 'denied', 'status': 'complete', 'decision': 'rejected'};\nvar queryParams = { '_action': 'update'};\nopenidm.action('iga/governance/requests/' + requestId, 'POST', decision, queryParams);"
      }
    },
    {
      "name": "scriptTask-d76490953517",
      "displayName": "Request Context Check",
      "type": "scriptTask",
      "scriptTask": {
        "nextStep": [
          {
            "condition": "true",
            "outcome": "done",
            "step": "exclusiveGateway-8cd9decab2e4"
          }
        ],
        "language": "javascript",
        "script": "var content = execution.getVariables();\nvar requestId = content.get('id');\nvar context = null;\nvar skipApproval = false;\ntry {\n  var requestObj = openidm.action('iga/governance/requests/' + requestId, 'GET', {}, {});\n  if (requestObj.request.common.context) {\n    context = requestObj.request.common.context.type;\n    if (context == 'admin') {\n      skipApproval = true;\n    }\n  }\n}\ncatch (e) {\n  logger.info(\"Request Context Check failed \"+e.message);\n}\n\nlogger.info(\"Context: \" + context);\nexecution.setVariable(\"context\", context);\nexecution.setVariable(\"skipApproval\", skipApproval);"
      }
    },
    {
      "name": "exclusiveGateway-8cd9decab2e4",
      "displayName": "Context Gateway",
      "type": "scriptTask",
      "scriptTask": {
        "nextStep": [
          {
            "condition": "skipApproval == true",
            "outcome": "AutoApproval",
            "step": "scriptTask-8506123e6208"
          },
          {
            "condition": "skipApproval == false",
            "outcome": "Approval",
            "step": "approvalTask-74cf85c35437"
          }
        ],
        "language": "javascript",
        "script": "logger.info(\"This is exclusive gateway\");"
      }
    },
    {
      "name": "scriptTask-8506123e6208",
      "displayName": "Auto Approval",
      "type": "scriptTask",
      "scriptTask": {
        "nextStep": [
          {
            "condition": "true",
            "outcome": "done",
            "step": "scriptTask-0359a9d77ee2"
          }
        ],
        "language": "javascript",
        "script": "var content = execution.getVariables();\nvar requestId = content.get('id');\nvar context = content.get('context');\nvar queryParams = {\n  \"_action\": \"update\"\n}\ntry {\n  var decision = {\n      \"decision\": \"approved\",\n      \"comment\": \"Request auto-approved due to request context: \" + context\n  }\n  openidm.action('iga/governance/requests/' + requestId, 'POST', decision, queryParams);\n}\ncatch (e) {\n  var failureReason = \"Failure updating decision on request. Error message: \" + e.message;\n  var update = {'comment': failureReason, 'failure': true};\n  openidm.action('iga/governance/requests/' + requestId, 'POST', update, queryParams);\n\n}"
      }
    }
  ],
  "staticNodes": {
    "startNode": {
      "id": "startNode",
      "x": 70,
      "y": 140,
      "connections": {
        "start": "scriptTask-d76490953517"
      }
    },
    "endNode": {
      "id": "endNode",
      "x": 1172,
      "y": 175,
      "connections": null
    },
    "uiConfig": {
      "approvalTask-74cf85c35437": {
        "actors": [
          {
            "type": "user",
            "id": {
              "isExpression": false,
              "value": "managed/user/c51d9ee1-43b3-49d1-8742-cbb33842a5cc"
            }
          }
        ],
        "events": {
          "escalationType": "script",
          "escalationDate": 5,
          "escalationTimeSpan": "day(s)",
          "reminderDate": 3,
          "reminderTimeSpan": "day(s)",
          "expirationDate": 1
        },
        "x": 668,
        "y": 142
      },
      "scriptTask-0359a9d77ee2": {
        "x": 892,
        "y": 59.015625
      },
      "scriptTask-aec6c36b3a45": {
        "x": 891,
        "y": 228.015625
      },
      "scriptTask-d76490953517": {
        "x": 161,
        "y": 142.015625
      },
      "exclusiveGateway-8cd9decab2e4": {
        "x": 419,
        "y": 122.015625
      },
      "scriptTask-8506123e6208": {
        "x": 667,
        "y": 57.015625
      }
    }
  },
  "status": "published",
  "mutable": true
}