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); }
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)); }
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); }
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); }
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 })); }