@namespace Oqtane.Installer @using Oqtane.Interfaces @inject NavigationManager NavigationManager @inject IInstallationService InstallationService @inject ISiteService SiteService @inject IUserService UserService @inject IDatabaseService DatabaseService @inject ISiteTemplateService SiteTemplateService @inject IJSRuntime JSRuntime @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer @inject SiteState SiteState
@SharedLocalizer["Version"] @Constants.Version (.NET 8)

@Localizer["DatabaseConfig"]


@if (_databases != null) {
@if (!_showConnectionString) { } else { }
}
@if (!_showConnectionString) { if (_databaseConfigType != null) { @DatabaseConfigComponent } } else {
}

@Localizer["ApplicationAdmin"]


@if (_templates != null) { }



@if (!string.IsNullOrEmpty(_message)) { }
@Localizer["Register"]
@code { private List _databases; private string _databaseName; private Type _databaseConfigType; private object _databaseConfig; private RenderFragment DatabaseConfigComponent { get; set; } private bool _showConnectionString = false; private string _connectionString = string.Empty; private string _hostUsername = string.Empty; private string _hostPassword = string.Empty; private string _passwordType = "password"; private string _confirmPasswordType = "password"; private string _togglePassword = string.Empty; private string _toggleConfirmPassword = string.Empty; private string _confirmPassword = string.Empty; private string _hostEmail = string.Empty; private List _templates; private string _template = Constants.DefaultSiteTemplate; private bool _register = true; private string _message = string.Empty; private string _loadingDisplay = "display: none;"; protected override async Task OnInitializedAsync() { // include CSS var content = $""; SiteState.AppendHeadContent(content); _togglePassword = SharedLocalizer["ShowPassword"]; _toggleConfirmPassword = SharedLocalizer["ShowPassword"]; _databases = await DatabaseService.GetDatabasesAsync(); if (_databases.Exists(item => item.IsDefault)) { _databaseName = _databases.Find(item => item.IsDefault).Name; } else { _databaseName = "LocalDB"; } LoadDatabaseConfigComponent(); _templates = await SiteTemplateService.GetSiteTemplatesAsync(); } private void DatabaseChanged(ChangeEventArgs eventArgs) { try { _databaseName = (string)eventArgs.Value; _showConnectionString = false; LoadDatabaseConfigComponent(); } catch { _message = Localizer["Error.DbConfig.Load"]; } } private void LoadDatabaseConfigComponent() { var database = _databases.SingleOrDefault(d => d.Name == _databaseName); if (database != null) { _databaseConfigType = Type.GetType(database.ControlType); DatabaseConfigComponent = builder => { builder.OpenComponent(0, _databaseConfigType); builder.AddComponentReferenceCapture(1, inst => { _databaseConfig = Convert.ChangeType(inst, _databaseConfigType); }); builder.CloseComponent(); }; } } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { // include JavaScript var interop = new Interop(JSRuntime); await interop.IncludeScript("", Constants.BootstrapScriptUrl, Constants.BootstrapScriptIntegrity, "anonymous", "", "head"); } } private async Task Install() { var connectionString = String.Empty; if (_showConnectionString) { connectionString = _connectionString; } else { if (_databaseConfig is IDatabaseConfigControl databaseConfigControl) { connectionString = databaseConfigControl.GetConnectionString(); } } if (connectionString != "" && !string.IsNullOrEmpty(_hostUsername) && !string.IsNullOrEmpty(_hostPassword) && _hostPassword == _confirmPassword && !string.IsNullOrEmpty(_hostEmail) && _hostEmail.Contains("@")) { if (await UserService.ValidatePasswordAsync(_hostPassword)) { _loadingDisplay = ""; StateHasChanged(); Uri uri = new Uri(NavigationManager.Uri); var database = _databases.SingleOrDefault(d => d.Name == _databaseName); var config = new InstallConfig { DatabaseType = database.DBType, ConnectionString = connectionString, Aliases = uri.Authority, HostUsername = _hostUsername, HostPassword = _hostPassword, HostEmail = _hostEmail, HostName = _hostUsername, TenantName = TenantNames.Master, IsNewTenant = true, SiteName = Constants.DefaultSite, Register = _register, SiteTemplate = _template, RenderMode = RenderModes.Static, Runtime = Runtimes.Server }; var installation = await InstallationService.Install(config); if (installation.Success) { NavigationManager.NavigateTo(uri.Scheme + "://" + uri.Authority, true); } else { _message = installation.Message; _loadingDisplay = "display: none;"; } } else { _message = Localizer["Message.Password.Invalid"]; } } else { _message = Localizer["Message.Require.DbInfo"]; } } private void TogglePassword() { if (_passwordType == "password") { _passwordType = "text"; _togglePassword = SharedLocalizer["HidePassword"]; } else { _passwordType = "password"; _togglePassword = SharedLocalizer["ShowPassword"]; } } private void ToggleConfirmPassword() { if (_confirmPasswordType == "password") { _confirmPasswordType = "text"; _toggleConfirmPassword = SharedLocalizer["HidePassword"]; } else { _confirmPasswordType = "password"; _toggleConfirmPassword = SharedLocalizer["ShowPassword"]; } } private void ToggleConnectionString() { if (_databaseConfig is IDatabaseConfigControl databaseConfigControl) { _connectionString = databaseConfigControl.GetConnectionString(); } _showConnectionString = !_showConnectionString; } private void DismissModal() { _message = ""; StateHasChanged(); } }