// 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);
            }
        }
示例#2
0
        /// <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);
        }