@namespace Oqtane.Modules.Admin.Sites @inherits ModuleBase @inject NavigationManager NavigationManager @inject ITenantService TenantService @inject IAliasService AliasService @inject ISiteService SiteService @inject IThemeService ThemeService @inject ISiteTemplateService SiteTemplateService @inject IUserService UserService @inject IInstallationService InstallationService @if (_tenants == null) {

Loading...

} else { @if (_panelayouts.Count > 0) { } @if (_tenantid == "+") { @if (!_integratedsecurity) { } }

Cancel } @code { private Dictionary _themes = new Dictionary(); private Dictionary _panelayouts = new Dictionary(); private Dictionary _containers = new Dictionary(); private List _siteTemplates; private List _themeList; private List _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 = Constants.HostUser; private string _hostpassword = string.Empty; private string _name = string.Empty; private string _urls = string.Empty; private string _themetype = "-"; private string _layouttype = "-"; private string _containertype = "-"; private string _sitetemplatetype = "-"; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; protected override async Task OnInitializedAsync() { _themeList = await ThemeService.GetThemesAsync(); _tenants = await TenantService.GetTenantsAsync(); _urls = PageState.Alias.Name; _themes = ThemeService.GetThemeTypes(_themeList); _siteTemplates = await SiteTemplateService.GetSiteTemplatesAsync(); } private void TenantChanged(ChangeEventArgs e) { _tenantid = (string)e.Value; if (string.IsNullOrEmpty(_tenantname)) { _tenantname = _name; } StateHasChanged(); } private void SetIntegratedSecurity(ChangeEventArgs e) { if (Convert.ToBoolean((string)e.Value)) { _integratedsecurity = true; } else { _integratedsecurity = false; } StateHasChanged(); } private async void ThemeChanged(ChangeEventArgs e) { try { _themetype = (string)e.Value; if (_themetype != string.Empty) { _panelayouts = ThemeService.GetPaneLayoutTypes(_themeList, _themetype); _containers = ThemeService.GetContainerTypes(_themeList, _themetype); } else { _panelayouts = new Dictionary(); _containers = new Dictionary(); } _layouttype = "-"; _containertype = "-"; StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Pane Layouts For Theme {ThemeType} {Error}", _themetype, ex.Message); AddModuleMessage("Error Loading Pane Layouts For Theme", MessageType.Error); } } private async Task SaveSite() { if (_tenantid != "-" && _name != string.Empty && _urls != string.Empty && _themetype != "-" && (_panelayouts.Count == 0 || _layouttype != "-") && _containertype != "-" && _sitetemplatetype != "-") { var duplicates = new List(); var aliases = await AliasService.GetAliasesAsync(); foreach (string name in _urls.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { if (aliases.Exists(item => item.Name == name)) { duplicates.Add(name); } } if (duplicates.Count == 0) { InstallConfig config = new InstallConfig(); if (_tenantid == "+") { if (!string.IsNullOrEmpty(_tenantname) && _tenants.FirstOrDefault(item => item.Name == _tenantname) == null) { // validate host credentials var user = new User(); user.SiteId = PageState.Site.SiteId; user.Username = Constants.HostUser; user.Password = _hostpassword; user = await UserService.LoginUserAsync(user, false, false); if (user.IsAuthenticated) { if (!string.IsNullOrEmpty(_server) && !string.IsNullOrEmpty(_database)) { 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.ConnectionString = connectionString; config.HostPassword = _hostpassword; config.HostEmail = user.Email; config.HostName = user.DisplayName; config.TenantName = _tenantname; config.IsNewTenant = true; } else { AddModuleMessage("You Must Specify A Server And Database", MessageType.Error); } } else { AddModuleMessage("Invalid Host Password", MessageType.Error); } } else { AddModuleMessage("Tenant Name Is Missing Or Already Exists", MessageType.Error); } } else { var tenant = _tenants.FirstOrDefault(item => item.TenantId == int.Parse(_tenantid)); if (tenant != null) { config.TenantName = tenant.Name; config.ConnectionString= tenant.DBConnectionString; config.IsNewTenant = false; } } if (!string.IsNullOrEmpty(config.TenantName)) { config.SiteName = _name; config.Aliases = _urls.Replace("\n", ","); config.DefaultTheme = _themetype; config.DefaultLayout = _layouttype; config.DefaultContainer = _containertype; config.SiteTemplate = _sitetemplatetype; ShowProgressIndicator(); var installation = await InstallationService.Install(config); if (installation.Success) { var aliasname = config.Aliases.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)[0]; var uri = new Uri(NavigationManager.Uri); NavigationManager.NavigateTo(uri.Scheme + "://" + aliasname, true); } else { await logger.LogError("Error Creating Site {Error}", installation.Message); AddModuleMessage(installation.Message, MessageType.Error); } } } else { AddModuleMessage(string.Join(", ", duplicates.ToArray()) + " Already Used For Another Site", MessageType.Warning); } } else { AddModuleMessage("You Must Provide A Tenant, Site Name, Alias, Default Theme/Container, And Site Template", MessageType.Warning); } } }