function checkIfCanGetAccessToken()

in functions/source/getDynamicsToken-test/getDynamicsToken-test.js [15:91]


function checkIfCanGetAccessToken(event, context, callback) {
  console.log(
    "Validating that we can get an access token from Azure AD for Dynamics 365 based on the Quick Start template parameters"
  );
  const azureADDomain = event["ResourceProperties"]["AzureADDomain"];
  console.log("Template parameter for Azure AD Domain: " + azureADDomain);
  const dynamicsHostDomain = event["ResourceProperties"]["DynamicsHostDomain"];
  console.log(
    "Template parameter for Dynamics 365 Domain: " + dynamicsHostDomain
  );
  const dynamicsClientId = event["ResourceProperties"]["DynamicsClientId"];
  console.log("Template parameter for Dynamics Client Id: " + dynamicsClientId);
  const dynamicsClientSecret =
    event["ResourceProperties"]["DynamicsClientSecret"];
  console.log(
    "Not showing template parameter value for Dynamics Client Secret because it's a secret"
  );
  const azureADAuthPath = "/" + azureADDomain + "/oauth2/token";
  const dynamicsResourceUrl = "https://" + dynamicsHostDomain;

  var authRequestBody = "";
  authRequestBody += "grant_type=" + encodeURIComponent(grantType);
  authRequestBody += "&resource=" + encodeURIComponent(dynamicsResourceUrl);
  authRequestBody += "&client_id=" + encodeURIComponent(dynamicsClientId);
  authRequestBody +=
    "&client_secret=" + encodeURIComponent(dynamicsClientSecret);

  const authRequestHeaders = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Content-Length": Buffer.byteLength(authRequestBody)
  };

  const options = {
    host: authHost,
    path: azureADAuthPath,
    method: "POST",
    headers: authRequestHeaders
  };

  var authRequestClient = https.request(options, function(response) {
    var authResponse = "";
    response.setEncoding("utf8");

    response.on("data", function(dataChunk) {
      authResponse += dataChunk;
    });

    response.on("end", function() {
      if (response.statusCode == 200) {
        console.log("Success! Got Dynamics 365 access token!");
        cfnResponse.send(event, context, cfnResponse.SUCCESS);
      } else {
        var failMsg =
          "Dynamics 365 access token request failed. Please validate the Azure AD Domain, Dynamics Host Domain, Dynamics Client Id and Dynamics Secret Id parameters. Response code was " +
          response.statusCode +
          ". ";
        console.error(failMsg);
        cfnResponse.send(event, context, cfnResponse.FAILED, {
          error: failMsg
        });
      }
    });
  });

  authRequestClient.on("error", function(e) {
    var failMsg =
        "Dynamics 365 access token request failed. Please validate the Azure AD Domain, Dynamics Host Domain, Dynamics Client Id and Dynamics Secret Id parameters. ",
      e;
    console.error(failMsg);
    cfnResponse.send(event, context, cfnResponse.FAILED, {
      error: failMsg
    });
  });

  authRequestClient.write(authRequestBody);
  authRequestClient.end();
}