示例#1
0
        public async Task <List <DemoDto> > GetDemos(DemosFilterModel filterModel)
        {
            var demos = await _legacyContext.Demoes.ApplyFilter(filterModel).ToListAsync();

            var models = demos.Select(d => d.ToDto()).ToList();

            return(models);
        }
示例#2
0
        public async Task <IActionResult> ClientDemoList()
        {
            if (!Request.Headers.ContainsKey("demo-manager-auth-key"))
            {
                return(Content("AuthError: No auth key provided in the request. This should be set in the client."));
            }

            var authKey = Request.Headers["demo-manager-auth-key"].FirstOrDefault();

            if (string.IsNullOrWhiteSpace(authKey))
            {
                _logger.LogDebug(EventIds.DemoManager, "ClientDemoList - Auth key header supplied but was empty");
                return(Content("AuthError: The auth key supplied was empty. This should be set in the client."));
            }

            var userId = await _demoAuthRepository.GetUserId(authKey);

            if (userId == null)
            {
                return(Content("AuthError: Your auth key is incorrect, check the portal for the correct one and re-enter it on your client."));
            }

            var user = await _userManager.FindByIdAsync(userId);

            if (user == null)
            {
                return(Content($"AuthError: An internal auth error occured processing your request for userId: {userId}"));
            }

            var claimsPrincipal = await _signInManager.ClaimsFactory.CreateAsync(user);

            var filterModel = new DemosFilterModel
            {
                Order = DemosFilterModel.OrderBy.DateDesc
            }.ApplyAuth(claimsPrincipal, null);
            var demoDtos = await _demosRepository.GetDemos(filterModel);

            var demos = demoDtos.Select(demo => new
            {
                demo.DemoId,
                Version = demo.Game.ToString(),
                demo.Name,
                demo.Date,
                demo.Map,
                demo.Mod,
                demo.GameType,
                demo.Server,
                demo.Size,
                Identifier = demo.FileName,
                demo.FileName
            }).ToList();

            return(Json(demos));
        }
示例#3
0
        public static DemosFilterModel ApplyAuth(this DemosFilterModel filterModel, ClaimsPrincipal claimsPrincipal, GameType?gameType)
        {
            var requiredClaims = new[] { XtremeIdiotsClaimTypes.SeniorAdmin, XtremeIdiotsClaimTypes.HeadAdmin, XtremeIdiotsClaimTypes.GameAdmin, XtremeIdiotsClaimTypes.Moderator };
            var gameTypes      = claimsPrincipal.ClaimedGameTypes(requiredClaims);

            if (gameType != null)
            {
                // If the user has the required claims do not filter by user id
                filterModel.UserId = gameTypes.Contains((GameType)gameType) ? null : claimsPrincipal.XtremeIdiotsId();
            }
            else
            {
                filterModel.GameTypes = gameTypes;

                // If the user has any required claims for games do not filter by user id
                if (!gameTypes.Any())
                {
                    filterModel.UserId = claimsPrincipal.XtremeIdiotsId();
                }
            }

            return(filterModel);
        }
示例#4
0
 public async Task <int> GetDemosCount(DemosFilterModel filterModel)
 {
     return(await _legacyContext.Demoes.ApplyFilter(filterModel).CountAsync());
 }
        public static IQueryable <Demoes> ApplyFilter(this IQueryable <Demoes> demos, DemosFilterModel filterModel)
        {
            demos = demos.Include(d => d.User).AsQueryable();

            if (filterModel.UserId != null && filterModel.GameTypes.Count != 0)
            {
                demos = demos.Where(d => filterModel.GameTypes.Contains(d.Game) && d.UserId == filterModel.UserId).AsQueryable();
            }
            else if (filterModel.GameTypes.Count != 0)
            {
                demos = demos.Where(d => filterModel.GameTypes.Contains(d.Game)).AsQueryable();
            }
            else if (filterModel.UserId != null)
            {
                demos = demos.Where(d => d.UserId == filterModel.UserId).AsQueryable();
            }

            if (!string.IsNullOrWhiteSpace(filterModel.FilterString))
            {
                demos = demos.Where(d => d.Name.Contains(filterModel.FilterString) || d.User.UserName.Contains(filterModel.FilterString)).AsQueryable();
            }

            switch (filterModel.Order)
            {
            case DemosFilterModel.OrderBy.GameTypeAsc:
                demos = demos.OrderBy(d => d.Game).AsQueryable();
                break;

            case DemosFilterModel.OrderBy.GameTypeDesc:
                demos = demos.OrderByDescending(d => d.Game).AsQueryable();
                break;

            case DemosFilterModel.OrderBy.NameAsc:
                demos = demos.OrderBy(d => d.Name).AsQueryable();
                break;

            case DemosFilterModel.OrderBy.NameDesc:
                demos = demos.OrderByDescending(d => d.Name).AsQueryable();
                break;

            case DemosFilterModel.OrderBy.DateAsc:
                demos = demos.OrderBy(d => d.Date).AsQueryable();
                break;

            case DemosFilterModel.OrderBy.DateDesc:
                demos = demos.OrderByDescending(d => d.Date).AsQueryable();
                break;

            case DemosFilterModel.OrderBy.UploadedByAsc:
                demos = demos.OrderBy(d => d.User.UserName).AsQueryable();
                break;

            case DemosFilterModel.OrderBy.UploadedByDesc:
                demos = demos.OrderByDescending(d => d.User.UserName).AsQueryable();
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            demos = demos.Skip(filterModel.SkipEntries).AsQueryable();

            if (filterModel.TakeEntries != 0)
            {
                demos = demos.Take(filterModel.TakeEntries).AsQueryable();
            }

            return(demos);
        }
示例#6
0
        public async Task <IActionResult> GetDemoListAjax(GameType?id)
        {
            var reader      = new StreamReader(Request.Body);
            var requestBody = await reader.ReadToEndAsync();

            var model = JsonConvert.DeserializeObject <DataTableAjaxPostModel>(requestBody);

            if (model == null)
            {
                return(BadRequest());
            }

            var filterModel = new DemosFilterModel().ApplyAuth(User, id);

            if (id != null)
            {
                filterModel.GameTypes.Add((GameType)id);
            }

            var recordsTotal = await _demosRepository.GetDemosCount(filterModel);

            filterModel.FilterString = model.Search?.Value;
            var recordsFiltered = await _demosRepository.GetDemosCount(filterModel);

            filterModel.TakeEntries = model.Length;
            filterModel.SkipEntries = model.Start;

            if (model.Order == null)
            {
                filterModel.Order = DemosFilterModel.OrderBy.DateDesc;
            }
            else
            {
                var orderColumn = model.Columns[model.Order.First().Column].Name;
                var searchOrder = model.Order.First().Dir;

                switch (orderColumn)
                {
                case "game":
                    filterModel.Order = searchOrder == "asc" ? DemosFilterModel.OrderBy.GameTypeAsc : DemosFilterModel.OrderBy.GameTypeDesc;
                    break;

                case "name":
                    filterModel.Order = searchOrder == "asc" ? DemosFilterModel.OrderBy.NameAsc : DemosFilterModel.OrderBy.NameDesc;
                    break;

                case "date":
                    filterModel.Order = searchOrder == "asc" ? DemosFilterModel.OrderBy.DateAsc : DemosFilterModel.OrderBy.DateDesc;
                    break;

                case "uploadedBy":
                    filterModel.Order = searchOrder == "asc" ? DemosFilterModel.OrderBy.UploadedByAsc : DemosFilterModel.OrderBy.UploadedByDesc;
                    break;
                }
            }

            var demoDtos = await _demosRepository.GetDemos(filterModel);

            var portalDemoEntries = new List <PortalDemoDto>();

            foreach (var demoDto in demoDtos)
            {
                var canDeletePortalDemo = await _authorizationService.AuthorizeAsync(User, demoDto, AuthPolicies.DeleteDemo);

                var portalDemoDto = new PortalDemoDto(demoDto);

                if (canDeletePortalDemo.Succeeded)
                {
                    portalDemoDto.ShowDeleteLink = true;
                }

                portalDemoEntries.Add(portalDemoDto);
            }

            return(Json(new
            {
                model.Draw,
                recordsTotal,
                recordsFiltered,
                data = portalDemoEntries
            }));
        }