in Scheduler/Forms/ValidateConnection.cs [43:150]
private void ValidateButton_Click(object sender, EventArgs e)
{
messagesTextBox.Text = string.Empty;
User user = null;
if (userAuthRadioButton.Checked)
{
user = (User) userComboBox.SelectedItem;
if (user == null)
{
messagesTextBox.Text = Resources.Select_user_first;
return;
}
}
var application = (AadApplication) aadApplicationComboBox.SelectedItem;
if (application == null)
{
messagesTextBox.Text = Resources.Select_AAD_client_first;
return;
}
Guid.TryParse(application.ClientId, out Guid aadClientGuid);
var settings = new Common.JobSettings.DownloadJobSettings
{
RetryCount = 1,
RetryDelay = 1,
AadClientId = aadClientGuid,
AadClientSecret = EncryptDecrypt.Decrypt(application.Secret),
ActivityId = Guid.Empty,
UseServiceAuthentication = serviceAuthRadioButton.Checked
};
if (Instance != null)
{
settings.AadTenant = Instance.AadTenant;
settings.AosUri = Instance.AosUri.TrimEnd('/');
settings.AzureAuthEndpoint = Instance.AzureAuthEndpoint;
settings.UseADAL = Instance.UseADAL;
}
if (user != null)
{
settings.UserName = user.Login;
settings.UserPassword = EncryptDecrypt.Decrypt(user.Password);
}
var httpClientHelper = new HttpClientHelper(settings);
try
{
var response = Task.Run(async () =>
{
var result = await httpClientHelper.GetRequestAsync(new Uri(settings.AosUri));
return result;
});
response.Wait();
messagesTextBox.Text += Resources.AAD_authentication_was_successful + Environment.NewLine;
if (response.Result.StatusCode == HttpStatusCode.OK)
{
messagesTextBox.Text += Resources.D365FO_instance_seems_to_be_up_and_running + Environment.NewLine;
}
else
{
messagesTextBox.Text += $"{Resources.Warning_HTTP_response_status_for_D365FO_instance_is} {response.Result.StatusCode} {response.Result.ReasonPhrase}." + Environment.NewLine;
}
var checkAccess = httpClientHelper.GetDequeueUri();
var checkAccessResponse = Task.Run(async () =>
{
var result = await httpClientHelper.GetRequestAsync(checkAccess);
return result;
});
checkAccessResponse.Wait();
if (checkAccessResponse.Result.StatusCode == HttpStatusCode.Forbidden)
{
if (settings.UseServiceAuthentication)
{
messagesTextBox.Text += Resources.AAD_application_is_not_mapped + Environment.NewLine;
}
else
{
messagesTextBox.Text += Resources.User_is_not_enabled + Environment.NewLine;
}
}
else if(checkAccessResponse.Result.StatusCode == HttpStatusCode.InternalServerError)
{
//Internal error is expected as we are using empty guid as activity id. We only check access to API
//TODO: Investigate better approach
messagesTextBox.Text += Resources.Access_to_D365FO_instance_was_successful + Environment.NewLine;
}
}
catch (Exception ex)
{
if (!string.IsNullOrEmpty(ex.Message))
messagesTextBox.Text += ex.Message + Environment.NewLine;
var inner = ex;
while (inner.InnerException != null)
{
var innerMessage = inner.InnerException?.Message;
if (!string.IsNullOrEmpty(innerMessage))
messagesTextBox.Text += innerMessage + Environment.NewLine;
inner = inner.InnerException;
}
}
}