Merge pull request #1239 from cnurse/dev
Implement Database Migrations and add Multi-Database Support
This commit is contained in:
		| @ -1,4 +1,5 @@ | ||||
| @namespace Oqtane.Modules.Admin.Sites | ||||
| @using Oqtane.Interfaces | ||||
| @inherits ModuleBase | ||||
| @inject NavigationManager NavigationManager | ||||
| @inject ITenantService TenantService | ||||
| @ -9,6 +10,7 @@ | ||||
| @inject IUserService UserService | ||||
| @inject IInstallationService InstallationService | ||||
| @inject IStringLocalizer<Add> Localizer | ||||
| @inject IEnumerable<IOqtaneDatabase> Databases | ||||
|  | ||||
| @if (_tenants == null) | ||||
| { | ||||
| @ -117,7 +119,7 @@ else | ||||
|                 <Label For="name" HelpText="Enter the name for the tenant" ResourceKey="TenantName">Tenant Name: </Label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <input id="name" class="form-control" @bind="@_tenantname" /> | ||||
|                 <input id="name" class="form-control" @bind="@_tenantName" /> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr> | ||||
| @ -125,64 +127,67 @@ else | ||||
|                 <Label For="databaseType" HelpText="Select the database type for the tenant" ResourceKey="DatabaseType">Database Type: </Label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <select id="databaseType" class="custom-select" @bind="@_databasetype"> | ||||
|                     <option value="LocalDB">@Localizer["Local Database"]</option> | ||||
|                     <option value="SQLServer">@Localizer["SQL Server"]</option> | ||||
|                 <select id="databaseType" class="custom-select" @bind="@_databaseType"> | ||||
|                     @{ | ||||
|                         foreach (var database in Databases) | ||||
|                         { | ||||
|                             <option value="@database.Name">@Localizer[@database.FriendlyName]</option> | ||||
|                         } | ||||
|                     } | ||||
|                 </select> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <Label For="server" HelpText="Enter the server for the tenant" ResourceKey="DatabaseServer">Server: </Label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <input id="server" type="text" class="form-control" @bind="@_server" /> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <Label For="database" HelpText="Enter the database for the tenant" ResourceKey="Database">Database: </Label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <input id="database" type="text" class="form-control" @bind="@_database" /> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <Label For="integratedSecurity" HelpText="Select if you want integrated security or not" ResourceKey="IntegratedSecurity">Integrated Security: </Label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <select id="integratedSecurity" class="custom-select" @onchange="SetIntegratedSecurity"> | ||||
|                     <option value="true" selected>@Localizer["True"]</option> | ||||
|                     <option value="false">@Localizer["False"]</option> | ||||
|                 </select> | ||||
|             </td> | ||||
|         </tr> | ||||
|         @if (!_integratedsecurity) | ||||
|         { | ||||
|             <tr> | ||||
|                 <td> | ||||
|                     <Label For="username" HelpText="Enter the username for the integrated security" ResourceKey="DatabaseUsername">Database Username: </Label> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                     <input id="username" type="text" class="form-control" @bind="@_username" /> | ||||
|                 </td> | ||||
|             </tr> | ||||
|             <tr> | ||||
|                 <td> | ||||
|                     <Label For="password" HelpText="Enter the password for the integrated security" ResourceKey="DatabasePassword">Database Password: </Label> | ||||
|                 </td> | ||||
|                 <td> | ||||
|                     <input id="password" type="password" class="form-control" @bind="@_password" /> | ||||
|                 </td> | ||||
|             </tr> | ||||
|             _selectedDatabase = Databases.Single(d => d.Name == _databaseType); | ||||
|             foreach (var field in _selectedDatabase.ConnectionStringFields) | ||||
|             { | ||||
|                 var fieldId = field.Name.ToLowerInvariant(); | ||||
|                 if (field.Name != "IntegratedSecurity") | ||||
|                 { | ||||
|                     var isVisible = ""; | ||||
|                     var fieldType = (field.Name == "Pwd") ? "password" : "text"; | ||||
|                     if ((field.Name == "Uid" || field.Name == "Pwd") && _selectedDatabase.Name != "MySQL" ) | ||||
|                     { | ||||
|                         var intSecurityField = _selectedDatabase.ConnectionStringFields.Single(f => f.Name == "IntegratedSecurity"); | ||||
|                         if (intSecurityField != null) | ||||
|                         { | ||||
|                             isVisible = (Convert.ToBoolean(intSecurityField.Value)) ? "display: none;" : ""; | ||||
|                         } | ||||
|                     } | ||||
|  | ||||
|                     field.Value = field.Value.Replace("{{Date}}", DateTime.UtcNow.ToString("yyyyMMddHHmm")); | ||||
|                      | ||||
|                     <tr style="@isVisible"> | ||||
|                         <td> | ||||
|                             <Label For="@fieldId" HelpText="@field.HelpText" ResourceKey="@field.Name">@Localizer[$"{field.FriendlyName}:"]</Label> | ||||
|                         </td> | ||||
|                         <td> | ||||
|                             <input id="@fieldId" type="@fieldType" class="form-control" @bind="@field.Value" /> | ||||
|                         </td> | ||||
|                     </tr> | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     <tr> | ||||
|                         <td> | ||||
|                             <Label For="@fieldId" HelpText="@field.HelpText" ResourceKey="@field.Name">@Localizer[$"{field.FriendlyName}:"]</Label> | ||||
|                         </td> | ||||
|                         <td> | ||||
|                             <select id="@fieldId" class="custom-select" @bind="@field.Value"> | ||||
|                                 <option value="true" selected>@Localizer["True"]</option> | ||||
|                                 <option value="false">@Localizer["False"]</option> | ||||
|                             </select> | ||||
|                         </td> | ||||
|                     </tr> | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         <tr> | ||||
|             <td> | ||||
|                 <Label For="hostUsername" HelpText="Enter the username of the host for this site" ResourceKey="HostUsername">Host Username:</Label> | ||||
|             </td> | ||||
|             <td> | ||||
|                 <input id="hostUsername" class="form-control" @bind="@_hostusername" readonly /> | ||||
|                 <input id="hostUsername" class="form-control" @bind="@_hostUserName" readonly /> | ||||
|             </td> | ||||
|         </tr> | ||||
|         <tr> | ||||
| @ -207,14 +212,11 @@ else | ||||
|     private List<Tenant> _tenants; | ||||
|     private string _tenantid = "-"; | ||||
|  | ||||
|     private string _tenantname = string.Empty; | ||||
|     private string _databasetype = "LocalDB"; | ||||
|     private string _server = "(LocalDb)\\MSSQLLocalDB"; | ||||
|     private string _database = "Oqtane-" + DateTime.UtcNow.ToString("yyyyMMddHHmm"); | ||||
|     private string _username = string.Empty; | ||||
|     private string _password = string.Empty; | ||||
|     private bool _integratedsecurity = true; | ||||
|     private string _hostusername = UserNames.Host; | ||||
|     private string _tenantName = string.Empty; | ||||
|     private IOqtaneDatabase _selectedDatabase; | ||||
|     private string _databaseType = "LocalDB"; | ||||
|  | ||||
|     private string _hostUserName = UserNames.Host; | ||||
|     private string _hostpassword = string.Empty; | ||||
|  | ||||
|     private string _name = string.Empty; | ||||
| @ -238,22 +240,9 @@ else | ||||
|     private void TenantChanged(ChangeEventArgs e) | ||||
|     { | ||||
|         _tenantid = (string)e.Value; | ||||
|         if (string.IsNullOrEmpty(_tenantname)) | ||||
|         if (string.IsNullOrEmpty(_tenantName)) | ||||
|         { | ||||
|             _tenantname = _name; | ||||
|         } | ||||
|         StateHasChanged(); | ||||
|     } | ||||
|  | ||||
|     private void SetIntegratedSecurity(ChangeEventArgs e) | ||||
|     { | ||||
|         if (Convert.ToBoolean((string)e.Value)) | ||||
|         { | ||||
|             _integratedsecurity = true; | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             _integratedsecurity = false; | ||||
|             _tenantName = _name; | ||||
|         } | ||||
|         StateHasChanged(); | ||||
|     } | ||||
| @ -302,7 +291,7 @@ else | ||||
|  | ||||
|                 if (_tenantid == "+") | ||||
|                 { | ||||
|                     if (!string.IsNullOrEmpty(_tenantname) && _tenants.FirstOrDefault(item => item.Name == _tenantname) == null) | ||||
|                     if (!string.IsNullOrEmpty(_tenantName) && _tenants.FirstOrDefault(item => item.Name == _tenantName) == null) | ||||
|                     { | ||||
|                         // validate host credentials | ||||
|                         var user = new User(); | ||||
| @ -312,32 +301,15 @@ else | ||||
|                         user = await UserService.LoginUserAsync(user, false, false); | ||||
|                         if (user.IsAuthenticated) | ||||
|                         { | ||||
|                             if (!string.IsNullOrEmpty(_server) && !string.IsNullOrEmpty(_database)) | ||||
|                             var connectionString = _selectedDatabase.BuildConnectionString(); | ||||
|                             if (connectionString != "") | ||||
|                             { | ||||
|                                 var connectionString = string.Empty; | ||||
|                                 if (_databasetype == "LocalDB") | ||||
|                                 { | ||||
|                                     connectionString = "Data Source=" + _server + ";AttachDbFilename=|DataDirectory|\\" + _database + ".mdf;Initial Catalog=" + _database + ";Integrated Security=SSPI;"; | ||||
|                                 } | ||||
|                                 else | ||||
|                                 { | ||||
|                                     connectionString = "Data Source=" + _server + ";Initial Catalog=" + _database + ";"; | ||||
|  | ||||
|                                     if (_integratedsecurity) | ||||
|                                     { | ||||
|                                         connectionString += "Integrated Security=SSPI;"; | ||||
|                                     } | ||||
|                                     else | ||||
|                                     { | ||||
|                                         connectionString += "User ID=" + _username + ";Password=" + _password; | ||||
|                                     } | ||||
|                                 } | ||||
|  | ||||
|                                 config.DatabaseType = _databaseType; | ||||
|                                 config.ConnectionString = connectionString; | ||||
|                                 config.HostPassword = _hostpassword; | ||||
|                                 config.HostEmail = user.Email; | ||||
|                                 config.HostName = user.DisplayName; | ||||
|                                 config.TenantName = _tenantname; | ||||
|                                 config.TenantName = _tenantName; | ||||
|                                 config.IsNewTenant = true; | ||||
|                             } | ||||
|                             else | ||||
|  | ||||
| @ -84,7 +84,7 @@ | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 htmltext = new HtmlTextInfo(); | ||||
|                 htmltext = new HtmlText(); | ||||
|                 htmltext.ModuleId = ModuleState.ModuleId; | ||||
|                 htmltext.Content = content; | ||||
|                 await HtmlTextService.AddHtmlTextAsync(htmltext); | ||||
|  | ||||
| @ -19,18 +19,18 @@ namespace Oqtane.Modules.HtmlText.Services | ||||
|  | ||||
|         private string ApiUrl => CreateApiUrl(_siteState.Alias, "HtmlText"); | ||||
|  | ||||
|         public async Task<HtmlTextInfo> GetHtmlTextAsync(int moduleId) | ||||
|         public async Task<Models.HtmlText> GetHtmlTextAsync(int moduleId) | ||||
|         { | ||||
|             var htmltext = await GetJsonAsync<List<HtmlTextInfo>>(CreateAuthorizationPolicyUrl($"{ApiUrl}/{moduleId}", moduleId)); | ||||
|             var htmltext = await GetJsonAsync<List<Models.HtmlText>>(CreateAuthorizationPolicyUrl($"{ApiUrl}/{moduleId}", moduleId)); | ||||
|             return htmltext.FirstOrDefault(); | ||||
|         } | ||||
|  | ||||
|         public async Task AddHtmlTextAsync(HtmlTextInfo htmlText) | ||||
|         public async Task AddHtmlTextAsync(Models.HtmlText htmlText) | ||||
|         { | ||||
|             await PostJsonAsync(CreateAuthorizationPolicyUrl($"{ApiUrl}", htmlText.ModuleId), htmlText); | ||||
|         } | ||||
|  | ||||
|         public async Task UpdateHtmlTextAsync(HtmlTextInfo htmlText) | ||||
|         public async Task UpdateHtmlTextAsync(Models.HtmlText htmlText) | ||||
|         { | ||||
|             await PutJsonAsync(CreateAuthorizationPolicyUrl($"{ApiUrl}/{htmlText.HtmlTextId}", htmlText.ModuleId), htmlText); | ||||
|         } | ||||
|  | ||||
| @ -6,11 +6,11 @@ namespace Oqtane.Modules.HtmlText.Services | ||||
| { | ||||
|     public interface IHtmlTextService  | ||||
|     { | ||||
|         Task<HtmlTextInfo> GetHtmlTextAsync(int ModuleId); | ||||
|         Task<Models.HtmlText> GetHtmlTextAsync(int ModuleId); | ||||
|  | ||||
|         Task AddHtmlTextAsync(HtmlTextInfo htmltext); | ||||
|         Task AddHtmlTextAsync(Models.HtmlText htmltext); | ||||
|  | ||||
|         Task UpdateHtmlTextAsync(HtmlTextInfo htmltext); | ||||
|         Task UpdateHtmlTextAsync(Models.HtmlText htmltext); | ||||
|  | ||||
|         Task DeleteHtmlTextAsync(int ModuleId); | ||||
|     } | ||||
|  | ||||
| @ -21,11 +21,11 @@ | ||||
|   </PropertyGroup> | ||||
|    | ||||
|   <ItemGroup> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.0" /> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.0" PrivateAssets="all" /> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="5.0.0" /> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.4" /> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.4" PrivateAssets="all" /> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="5.0.4" /> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Localization" Version="2.2.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Localization" Version="5.0.0" /> | ||||
|     <PackageReference Include="Microsoft.Extensions.Localization" Version="5.0.4" /> | ||||
|     <PackageReference Include="System.Net.Http.Json" Version="5.0.0" /> | ||||
|   </ItemGroup> | ||||
|  | ||||
|  | ||||
| @ -13,6 +13,7 @@ using Microsoft.AspNetCore.Components.WebAssembly.Hosting; | ||||
| using Microsoft.AspNetCore.Localization; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.JSInterop; | ||||
| using Oqtane.Interfaces; | ||||
| using Oqtane.Modules; | ||||
| using Oqtane.Providers; | ||||
| using Oqtane.Services; | ||||
| @ -74,8 +75,8 @@ namespace Oqtane.Client | ||||
|             var assemblies = AppDomain.CurrentDomain.GetOqtaneAssemblies(); | ||||
|             foreach (var assembly in assemblies) | ||||
|             { | ||||
|                 // dynamically register module services  | ||||
|                 var implementationTypes = assembly.GetInterfaces<IService>();  | ||||
|                 // dynamically register module services | ||||
|                 var implementationTypes = assembly.GetInterfaces<IService>(); | ||||
|                 foreach (var implementationType in implementationTypes) | ||||
|                 { | ||||
|                     if (implementationType.AssemblyQualifiedName != null) | ||||
| @ -85,6 +86,17 @@ namespace Oqtane.Client | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 // dynamically register database providers | ||||
|                 var databaseTypes = assembly.GetInterfaces<IOqtaneDatabase>(); | ||||
|                 foreach (var databaseType in databaseTypes) | ||||
|                 { | ||||
|                     if (databaseType.AssemblyQualifiedName != null) | ||||
|                     { | ||||
|                         var serviceType = Type.GetType("Oqtane.Interfaces.IDatabase, Oqtane.Shared"); | ||||
|                         builder.Services.AddScoped(serviceType ?? databaseType, databaseType); | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 // register client startup services | ||||
|                 var startUps = assembly.GetInstances<IClientStartup>(); | ||||
|                 foreach (var startup in startUps) | ||||
| @ -115,7 +127,7 @@ namespace Oqtane.Client | ||||
|  | ||||
|         private static async Task LoadClientAssemblies(HttpClient http) | ||||
|         { | ||||
|             // get list of loaded assemblies on the client  | ||||
|             // get list of loaded assemblies on the client | ||||
|             var assemblies = AppDomain.CurrentDomain.GetAssemblies().Select(a => a.GetName().Name).ToList(); | ||||
|  | ||||
|             // get assemblies from server and load into client app domain | ||||
|  | ||||
| @ -1,3 +1,5 @@ | ||||
| @using Oqtane.Interfaces | ||||
| @using System.Reflection | ||||
| @namespace Oqtane.UI | ||||
| @inject NavigationManager NavigationManager | ||||
| @inject IInstallationService InstallationService | ||||
| @ -5,6 +7,7 @@ | ||||
| @inject IUserService UserService | ||||
| @inject IJSRuntime JSRuntime | ||||
| @inject IStringLocalizer<Installer> Localizer | ||||
| @inject IEnumerable<IOqtaneDatabase> Databases | ||||
|  | ||||
| <div class="container"> | ||||
|     <div class="row"> | ||||
| @ -25,54 +28,59 @@ | ||||
|                         </td> | ||||
|                         <td> | ||||
|                             <select class="custom-select" @bind="@_databaseType"> | ||||
|                                 <option value="LocalDB">@Localizer["Local Database"]</option> | ||||
|                                 <option value="SQLServer">@Localizer["SQL Server"]</option> | ||||
|                                 @{ | ||||
|                                     foreach (var database in Databases) | ||||
|                                     { | ||||
|                                         <option value="@database.Name">@Localizer[@database.FriendlyName]</option> | ||||
|                                     } | ||||
|                                 } | ||||
|                             </select> | ||||
|                         </td> | ||||
|                     </tr> | ||||
|                     <tr> | ||||
|                         <td> | ||||
|                             <label class="control-label" style="font-weight: bold">@Localizer["Server:"] </label> | ||||
|                         </td> | ||||
|                         <td> | ||||
|                             <input type="text" class="form-control" @bind="@_serverName" /> | ||||
|                         </td> | ||||
|                     </tr> | ||||
|                     <tr> | ||||
|                         <td> | ||||
|                             <label class="control-label" style="font-weight: bold">@Localizer["Database:"] </label> | ||||
|                         </td> | ||||
|                         <td> | ||||
|                             <input type="text" class="form-control" @bind="@_databaseName" /> | ||||
|                         </td> | ||||
|                     </tr> | ||||
|                     <tr> | ||||
|                         <td> | ||||
|                             <label class="control-label" style="font-weight: bold">@Localizer["Integrated Security:"] </label> | ||||
|                         </td> | ||||
|                         <td> | ||||
|                             <select class="custom-select" @onchange="SetIntegratedSecurity"> | ||||
|                                 <option value="true" selected>@Localizer["True"]</option> | ||||
|                                 <option value="false">@Localizer["False"]</option> | ||||
|                             </select> | ||||
|                         </td> | ||||
|                     </tr> | ||||
|                     <tr style="@_integratedSecurityDisplay"> | ||||
|                         <td> | ||||
|                             <label class="control-label" style="font-weight: bold">@Localizer["Username:"] </label> | ||||
|                         </td> | ||||
|                         <td> | ||||
|                             <input type="text" class="form-control" @bind="@_username" /> | ||||
|                         </td> | ||||
|                     </tr> | ||||
|                     <tr style="@_integratedSecurityDisplay"> | ||||
|                         <td> | ||||
|                             <label class="control-label" style="font-weight: bold">@Localizer["Password:"] </label> | ||||
|                         </td> | ||||
|                         <td> | ||||
|                             <input type="password" class="form-control" @bind="@_password" /> | ||||
|                         </td> | ||||
|                     </tr> | ||||
|                 @{ | ||||
|                     _selectedDatabase = Databases.Single(d => d.Name == _databaseType); | ||||
|                     foreach (var field in _selectedDatabase.ConnectionStringFields) | ||||
|                     { | ||||
|                         if (field.Name != "IntegratedSecurity") | ||||
|                         { | ||||
|                             var isVisible = ""; | ||||
|                             var fieldType = (field.Name == "Pwd") ? "password" : "text"; | ||||
|                             if ((field.Name == "Uid" || field.Name == "Pwd") && _selectedDatabase.Name != "MySQL" ) | ||||
|                             { | ||||
|                                 var intSecurityField = _selectedDatabase.ConnectionStringFields.Single(f => f.Name == "IntegratedSecurity"); | ||||
|                                 if (intSecurityField != null) | ||||
|                                 { | ||||
|                                     isVisible = (Convert.ToBoolean(intSecurityField.Value)) ? "display: none;" : ""; | ||||
|                                 } | ||||
|                             } | ||||
|  | ||||
|                             field.Value = field.Value.Replace("{{Date}}", DateTime.UtcNow.ToString("yyyyMMddHHmm")); | ||||
|                              | ||||
|                             <tr style="@isVisible"> | ||||
|                                 <td> | ||||
|                                     <label class="control-label" style="font-weight: bold">@Localizer[$"{field.FriendlyName}:"]</label> | ||||
|                                 </td> | ||||
|                                 <td> | ||||
|                                     <input type="@fieldType" class="form-control" @bind="@field.Value" /> | ||||
|                                 </td> | ||||
|                             </tr> | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             <tr> | ||||
|                                 <td> | ||||
|                                     <label class="control-label" style="font-weight: bold">@Localizer[$"{field.FriendlyName}:"]</label> | ||||
|                                 </td> | ||||
|                                 <td> | ||||
|                                     <select class="custom-select" @bind="@field.Value"> | ||||
|                                         <option value="true" selected>@Localizer["True"]</option> | ||||
|                                         <option value="false">@Localizer["False"]</option> | ||||
|                                     </select> | ||||
|                                 </td> | ||||
|                             </tr> | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 </tbody> | ||||
|             </table> | ||||
|         </div> | ||||
| @ -127,17 +135,13 @@ | ||||
| </div> | ||||
|  | ||||
| @code { | ||||
|     private IOqtaneDatabase _selectedDatabase; | ||||
|     private string _databaseType = "LocalDB"; | ||||
|     private string _serverName = "(LocalDb)\\MSSQLLocalDB"; | ||||
|     private string _databaseName = "Oqtane-" + DateTime.UtcNow.ToString("yyyyMMddHHmm"); | ||||
|     private string _username = string.Empty; | ||||
|     private string _password = string.Empty; | ||||
|     private string _hostUsername = UserNames.Host; | ||||
|     private string _hostPassword = string.Empty; | ||||
|     private string _confirmPassword = string.Empty; | ||||
|     private string _hostEmail = string.Empty; | ||||
|     private string _message = string.Empty; | ||||
|     private string _integratedSecurityDisplay = "display: none;"; | ||||
|     private string _loadingDisplay = "display: none;"; | ||||
|  | ||||
|     protected override async Task OnAfterRenderAsync(bool firstRender) | ||||
| @ -149,43 +153,21 @@ | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private void SetIntegratedSecurity(ChangeEventArgs e) | ||||
|     { | ||||
|         _integratedSecurityDisplay = Convert.ToBoolean((string)e.Value) | ||||
|             ? "display: none;" | ||||
|             : string.Empty; | ||||
|     } | ||||
|  | ||||
|     private async Task Install() | ||||
|     { | ||||
|         if (_serverName != "" && _databaseName != "" && _hostUsername != "" && _hostPassword.Length >= 6 && _hostPassword == _confirmPassword && _hostEmail != "") | ||||
|         var connectionString = _selectedDatabase.BuildConnectionString(); | ||||
|  | ||||
|         if (connectionString != "" && _hostUsername != "" && _hostPassword.Length >= 6 && _hostPassword == _confirmPassword && _hostEmail != "") | ||||
|         { | ||||
|             _loadingDisplay = ""; | ||||
|             StateHasChanged(); | ||||
|  | ||||
|             var connectionstring = ""; | ||||
|             if (_databaseType == "LocalDB") | ||||
|             { | ||||
|                 connectionstring = "Data Source=" + _serverName + ";AttachDbFilename=|DataDirectory|\\" + _databaseName + ".mdf;Initial Catalog=" + _databaseName + ";Integrated Security=SSPI;"; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 connectionstring = "Data Source=" + _serverName + ";Initial Catalog=" + _databaseName + ";"; | ||||
|                 if (_integratedSecurityDisplay == "display: none;") | ||||
|                 { | ||||
|                     connectionstring += "Integrated Security=SSPI;"; | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     connectionstring += "User ID=" + _username + ";Password=" + _password; | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             Uri uri = new Uri(NavigationManager.Uri); | ||||
|  | ||||
|             var config = new InstallConfig | ||||
|             { | ||||
|                 ConnectionString = connectionstring, | ||||
|                 DatabaseType = _databaseType, | ||||
|                 ConnectionString = connectionString, | ||||
|                 Aliases = uri.Authority, | ||||
|                 HostEmail = _hostEmail, | ||||
|                 HostPassword = _hostPassword, | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Shaun Walker
					Shaun Walker