// ReSharper disable once InconsistentNaming private void HydrateSettingsFromUI() { if (ConnectionDetail != null) { TxtOutput.AppendText("CRM Authentication Type Detected: " + ConnectionDetail.AuthType + Environment.NewLine); Settings.Domain = GetUserDomain(); Settings.Password = ConnectionDetail.GetUserPassword(); Settings.SupportsActions = ConnectionDetail.OrganizationMajorVersion >= Crm2013; Settings.UseCrmOnline = ConnectionDetail.UseOnline; Settings.UserName = ConnectionDetail.UserName; Settings.Url = ConnectionDetail.GetUrlString(); if (Settings.UseConnectionString && string.IsNullOrWhiteSpace(Settings.Password) && ConnectionDetail.NewAuthType != AuthenticationType.Certificate && ConnectionDetail.NewAuthType != AuthenticationType.ClientSecret && ConnectionDetail.NewAuthType != AuthenticationType.OAuth) { // Fix for https://github.com/daryllabar/DLaB.Xrm.XrmToolBoxTools/issues/43 // Difficulties with Early Bound Generator #43 var askForPassword = new PasswordDialog(this); Settings.Password = askForPassword.ShowDialog(this) == DialogResult.OK ? askForPassword.Password : "******"; } if (ConnectionDetail.AuthType == AuthenticationProviderType.ActiveDirectory && string.IsNullOrWhiteSpace(Settings.UserName)) { Settings.UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; } if (string.IsNullOrWhiteSpace(Settings.ConnectionString)) { // Load any non-username/password situations via connection string #268 Settings.ConnectionString = ConnectionDetail.GetNonUserConnectionString(); if (!string.IsNullOrWhiteSpace(Settings.ConnectionString)) { Settings.UseConnectionString = true; } } } SettingsMap.PushChanges(); Settings.RootPath = Path.GetDirectoryName(Path.GetFullPath(TxtSettingsPath.Text)); if (SettingsMap.UseDeprecatedOptionSetNaming) { Settings.SetExtensionArgument(CreationType.OptionSets, CrmSrvUtilService.CodeWriterFilter, @"DLaB.CrmSvcUtilExtensions.OptionSet.CodeWriterFilterService,DLaB.CrmSvcUtilExtensions"); Settings.SetExtensionArgument(CreationType.OptionSets, CrmSrvUtilService.NamingService, string.Empty); } else { var defaultConfig = EarlyBoundGeneratorConfig.GetDefault(); defaultConfig.CrmSvcUtilRelativeRootPath = Paths.PluginsPath; Settings.SetExtensionArgument(CreationType.OptionSets, CrmSrvUtilService.CodeWriterFilter, defaultConfig.GetExtensionArgument(CreationType.OptionSets, CrmSrvUtilService.CodeWriterFilter).Value); Settings.SetExtensionArgument(CreationType.OptionSets, CrmSrvUtilService.NamingService, defaultConfig.GetExtensionArgument(CreationType.OptionSets, CrmSrvUtilService.NamingService).Value); } }
/// <summary> /// Handles returning the url for Certificate, ClientSecret and OAuth with MFA /// </summary> public static string GetNonUserConnectionString(this ConnectionDetail detail) { switch (detail.NewAuthType) { case Microsoft.Xrm.Tooling.Connector.AuthenticationType.Certificate: return($"AuthType=Certificate;Url={detail.GetUrlString()};ThumbPrint={detail.Certificate.Thumbprint};ClientId={detail.AzureAdAppId};"); case Microsoft.Xrm.Tooling.Connector.AuthenticationType.ClientSecret: return($"AuthType=ClientSecret;Url={detail.GetUrlString()};ClientId={detail.AzureAdAppId};ClientSecret={detail.GetClientSecret()};"); case Microsoft.Xrm.Tooling.Connector.AuthenticationType.OAuth: if (detail.UseMfa) { var path = Path.Combine(Path.GetTempPath(), detail.ConnectionId.Value.ToString("B")); return($"AuthType=OAuth;Username={detail.UserName};Url={detail.GetUrlString()};AppId={detail.AzureAdAppId};RedirectUri={detail.ReplyUrl};TokenCacheStorePath={path};LoginPrompt=Auto"); } break; } return(null); }