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));
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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));
        }