public async Task <IActionResult> Index() { var shells = await GetShellsAsync(); var dataProtector = _dataProtectorProvider.CreateProtector("Tokens").ToTimeLimitedDataProtector(); var model = new AdminIndexViewModel { ShellSettingsEntries = shells.Select(x => { var entry = new ShellSettingsEntry { Name = x.Settings.Name, ShellSettings = x.Settings, IsDefaultTenant = string.Equals(x.Settings.Name, ShellHelper.DefaultShellName, StringComparison.OrdinalIgnoreCase) }; if (x.Settings.State == TenantState.Uninitialized && !string.IsNullOrEmpty(x.Settings.Secret)) { entry.Token = dataProtector.Protect(x.Settings.Secret, _clock.UtcNow.Add(new TimeSpan(24, 0, 0))); } return(entry); }).ToList() }; return(View(model)); }
public async Task <IActionResult> Index(TenantIndexOptions options, PagerParameters pagerParameters) { var allSettings = _shellHost.GetAllSettings().OrderBy(s => s.Name); var dataProtector = _dataProtectorProvider.CreateProtector("Tokens").ToTimeLimitedDataProtector(); var siteSettings = await _siteService.GetSiteSettingsAsync(); var pager = new Pager(pagerParameters, siteSettings.PageSize); // default options if (options == null) { options = new TenantIndexOptions(); } var entries = allSettings.Select(x => { var entry = new ShellSettingsEntry { Name = x.Name, ShellSettings = x, IsDefaultTenant = string.Equals(x.Name, ShellHelper.DefaultShellName, StringComparison.OrdinalIgnoreCase) }; if (x.State == TenantState.Uninitialized && !string.IsNullOrEmpty(x["Secret"])) { entry.Token = dataProtector.Protect(x["Secret"], _clock.UtcNow.Add(new TimeSpan(24, 0, 0))); } return(entry); }).ToList(); if (!string.IsNullOrWhiteSpace(options.Search)) { entries = entries.Where(t => t.Name.IndexOf(options.Search, StringComparison.OrdinalIgnoreCase) > -1 || (t.ShellSettings != null && t.ShellSettings != null && ((t.ShellSettings.RequestUrlHost != null && t.ShellSettings.RequestUrlHost.IndexOf(options.Search, StringComparison.OrdinalIgnoreCase) > -1) || (t.ShellSettings.RequestUrlPrefix != null && t.ShellSettings.RequestUrlPrefix.IndexOf(options.Search, StringComparison.OrdinalIgnoreCase) > -1)))).ToList(); } switch (options.Filter) { case TenantsFilter.Disabled: entries = entries.Where(t => t.ShellSettings.State == TenantState.Disabled).ToList(); break; case TenantsFilter.Running: entries = entries.Where(t => t.ShellSettings.State == TenantState.Running).ToList(); break; case TenantsFilter.Uninitialized: entries = entries.Where(t => t.ShellSettings.State == TenantState.Uninitialized).ToList(); break; } switch (options.OrderBy) { case TenantsOrder.Name: entries = entries.OrderBy(t => t.Name).ToList(); break; case TenantsOrder.State: entries = entries.OrderBy(t => t.ShellSettings?.State).ToList(); break; default: entries = entries.OrderByDescending(t => t.Name).ToList(); break; } var count = entries.Count(); var results = entries .Skip(pager.GetStartIndex()) .Take(pager.PageSize).ToList(); // Maintain previous route data when generating page links var routeData = new RouteData(); routeData.Values.Add("Options.Filter", options.Filter); routeData.Values.Add("Options.Search", options.Search); routeData.Values.Add("Options.OrderBy", options.OrderBy); var pagerShape = (await New.Pager(pager)).TotalItemCount(count).RouteData(routeData); var model = new AdminIndexViewModel { ShellSettingsEntries = results, Options = options, Pager = pagerShape }; return(View(model)); }
public async Task <IActionResult> Index(TenantIndexOptions options, PagerParameters pagerParameters) { if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageTenants)) { return(Forbid()); } if (!_currentShellSettings.IsDefaultShell()) { return(Forbid()); } var allSettings = _shellHost.GetAllSettings().OrderBy(s => s.Name); var dataProtector = _dataProtectorProvider.CreateProtector("Tokens").ToTimeLimitedDataProtector(); var siteSettings = await _siteService.GetSiteSettingsAsync(); var pager = new Pager(pagerParameters, siteSettings.PageSize); var entries = allSettings.Select(x => { var entry = new ShellSettingsEntry { Category = x["Category"], Description = x["Description"], Name = x.Name, ShellSettings = x, IsDefaultTenant = String.Equals(x.Name, ShellHelper.DefaultShellName, StringComparison.OrdinalIgnoreCase) }; if (x.State == TenantState.Uninitialized && !String.IsNullOrEmpty(x["Secret"])) { entry.Token = dataProtector.Protect(x["Secret"], _clock.UtcNow.Add(new TimeSpan(24, 0, 0))); } return(entry); }).ToList(); if (!String.IsNullOrWhiteSpace(options.Search)) { entries = entries.Where(t => t.Name.IndexOf(options.Search, StringComparison.OrdinalIgnoreCase) > -1 || (t.ShellSettings != null && ((t.ShellSettings.RequestUrlHost != null && t.ShellSettings.RequestUrlHost.IndexOf(options.Search, StringComparison.OrdinalIgnoreCase) > -1) || (t.ShellSettings.RequestUrlPrefix != null && t.ShellSettings.RequestUrlPrefix.IndexOf(options.Search, StringComparison.OrdinalIgnoreCase) > -1)))).ToList(); } if (!String.IsNullOrWhiteSpace(options.Category)) { entries = entries.Where(t => t.Category?.Equals(options.Category, StringComparison.OrdinalIgnoreCase) == true).ToList(); } switch (options.Status) { case TenantsState.Disabled: entries = entries.Where(t => t.ShellSettings.State == TenantState.Disabled).ToList(); break; case TenantsState.Running: entries = entries.Where(t => t.ShellSettings.State == TenantState.Running).ToList(); break; case TenantsState.Uninitialized: entries = entries.Where(t => t.ShellSettings.State == TenantState.Uninitialized).ToList(); break; } switch (options.OrderBy) { case TenantsOrder.Name: entries = entries.OrderBy(t => t.Name).ToList(); break; case TenantsOrder.State: entries = entries.OrderBy(t => t.ShellSettings?.State).ToList(); break; default: entries = entries.OrderByDescending(t => t.Name).ToList(); break; } var count = entries.Count(); var results = entries .Skip(pager.GetStartIndex()) .Take(pager.PageSize).ToList(); // Maintain previous route data when generating page links var routeData = new RouteData(); routeData.Values.Add("Options.Category", options.Category); routeData.Values.Add("Options.Status", options.Status); routeData.Values.Add("Options.Search", options.Search); routeData.Values.Add("Options.OrderBy", options.OrderBy); var pagerShape = (await New.Pager(pager)).TotalItemCount(count).RouteData(routeData); var model = new AdminIndexViewModel { ShellSettingsEntries = results, Options = options, Pager = pagerShape }; // We populate the SelectLists model.Options.TenantsCategories = allSettings .GroupBy(t => t["Category"]) .Where(t => !String.IsNullOrEmpty(t.Key)) .Select(t => new SelectListItem(t.Key, t.Key, String.Equals(options.Category, t.Key, StringComparison.OrdinalIgnoreCase))) .ToList(); model.Options.TenantsCategories.Insert(0, new SelectListItem( S["All"], String.Empty, selected: String.IsNullOrEmpty(options.Category))); model.Options.TenantsStates = new List <SelectListItem>() { new SelectListItem() { Text = S["All states"], Value = nameof(TenantsState.All) }, new SelectListItem() { Text = S["Running"], Value = nameof(TenantsState.Running) }, new SelectListItem() { Text = S["Disabled"], Value = nameof(TenantsState.Disabled) }, new SelectListItem() { Text = S["Uninitialized"], Value = nameof(TenantsState.Uninitialized) } }; model.Options.TenantsSorts = new List <SelectListItem>() { new SelectListItem() { Text = S["Name"], Value = nameof(TenantsOrder.Name) }, new SelectListItem() { Text = S["State"], Value = nameof(TenantsOrder.State) } }; model.Options.TenantsBulkAction = new List <SelectListItem>() { new SelectListItem() { Text = S["Disable"], Value = nameof(TenantsBulkAction.Disable) }, new SelectListItem() { Text = S["Enable"], Value = nameof(TenantsBulkAction.Enable) } }; return(View(model)); }