private async void CmBDiscoveryServiceUrl_KeyDown(object sender, KeyEventArgs e) { if (!IsControlsEnabled) { return; } if (e.Key != Key.Enter) { return; } string discoveryServiceUrl = cmBDiscoveryServiceUrl.Text?.Trim(); if (string.IsNullOrEmpty(discoveryServiceUrl)) { return; } if (!discoveryServiceUrl.EndsWith(Properties.MessageBoxStrings.DefaultDiscoveryServiceUrlSuffix, StringComparison.InvariantCultureIgnoreCase)) { discoveryServiceUrl = discoveryServiceUrl.TrimEnd('/') + Properties.MessageBoxStrings.DefaultDiscoveryServiceUrlSuffix; } if (!Uri.TryCreate(discoveryServiceUrl, UriKind.Absolute, out Uri discoveryServiceUri)) { _iWriteToOutput.WriteToOutput(null, Properties.WindowStatusStrings.DiscoveryServiceCouldNotBeReceived); _iWriteToOutput.ActivateOutputWindow(null, this); return; } ToggleControls(null, false, Properties.WindowStatusStrings.DiscoveringOrganizations); try { this._itemsSource.Clear(); var serviceManagement = await CreateManagementAsync(discoveryServiceUri); if (serviceManagement == null) { ToggleControls(null, true, Properties.WindowStatusStrings.DiscoveryServiceConfigurationCouldNotBeReceived); _iWriteToOutput.ActivateOutputWindow(null, this); return; } var user = cmBDiscoveryServiceUser.SelectedItem as ConnectionUserData; var discoveryService = QuickConnection.CreateDiscoveryService(serviceManagement, user?.Username, user?.Password); if (discoveryService == null) { ToggleControls(null, true, Properties.WindowStatusStrings.DiscoveryServiceCouldNotBeReceived); _iWriteToOutput.ActivateOutputWindow(null, this); return; } var repository = new DiscoveryServiceRepository(discoveryService); var orgs = await repository.DiscoverOrganizationsAsync(); this._itemsSource.Clear(); foreach (var org in orgs.OrderBy(o => o.UniqueName).ThenBy(o => o.OrganizationId)) { var viewItem = new OrganizationDetailViewItem(discoveryServiceUri, user, org); this._itemsSource.Add(viewItem); } ToggleControls(null, true, Properties.WindowStatusStrings.DiscoveringOrganizationsCompleted); } catch (Exception ex) { ToggleControls(null, true, Properties.WindowStatusStrings.DiscoveringOrganizationsFailed); _iWriteToOutput.WriteErrorToOutput(null, ex); } }
private static async Task <Tuple <OrganizationServiceProxy, OrganizationDetail> > ConnectInternal(ConnectionData connectionData, bool withDiscoveryRequest) { OrganizationServiceProxy serviceProxy = null; OrganizationDetail organizationDetail = null; Uri orgUri = null; if ((withDiscoveryRequest || string.IsNullOrEmpty(connectionData.OrganizationUrl)) && !string.IsNullOrEmpty(connectionData.DiscoveryUrl) && Uri.TryCreate(connectionData.DiscoveryUrl, UriKind.Absolute, out var discoveryUri) ) { var disco = CreateDiscoveryService(connectionData, discoveryUri, connectionData.User?.Username, connectionData.User?.Password); if (disco != null) { using (disco) { var repositoryDiscoveryService = new DiscoveryServiceRepository(disco); var orgs = await repositoryDiscoveryService.DiscoverOrganizationsAsync(); if (orgs.Count == 1) { organizationDetail = orgs[0]; } else if (orgs.Count > 0) { organizationDetail = orgs.FirstOrDefault(a => string.Equals(a.UniqueName, connectionData.UniqueOrgName, StringComparison.InvariantCultureIgnoreCase)); if (organizationDetail == null) { organizationDetail = orgs.FirstOrDefault(); } } if (organizationDetail != null && organizationDetail.Endpoints.ContainsKey(EndpointType.OrganizationService)) { orgUri = new Uri(organizationDetail.Endpoints[EndpointType.OrganizationService]); } } } } if (!string.IsNullOrEmpty(connectionData.OrganizationUrl) && Uri.TryCreate(connectionData.OrganizationUrl, UriKind.RelativeOrAbsolute, out Uri custromOrgUri) ) { orgUri = custromOrgUri; } if (orgUri != null) { var serviceManagement = GetOrganizationServiceConfiguration(connectionData, orgUri); if (serviceManagement != null) { var credentials = GetCredentials(serviceManagement, connectionData.User?.Username, connectionData.User?.Password); if (serviceManagement.AuthenticationType != AuthenticationProviderType.ActiveDirectory && serviceManagement.AuthenticationType != AuthenticationProviderType.None ) { AuthenticationCredentials tokenCredentials = serviceManagement.Authenticate(credentials); serviceProxy = new OrganizationServiceProxy(serviceManagement, tokenCredentials.SecurityTokenResponse); } else { serviceProxy = new OrganizationServiceProxy(serviceManagement, credentials.ClientCredentials); } serviceProxy.EnableProxyTypes(); serviceProxy.Timeout = TimeSpan.FromMinutes(30); } } return(Tuple.Create(serviceProxy, organizationDetail)); }