示例#1
0
        public async Task Test_AdministeredPenaltyResourceQueryHelper_QueryResource_TakesAppropriateCount()
        {
            var queryHelper = serviceProvider.GetRequiredService <AdministeredPenaltyResourceQueryHelper>();

            var request = new ClientPaginationRequest
            {
                Count    = 1,
                Before   = DateTime.UtcNow,
                ClientId = 1
            };

            var result = await queryHelper.QueryResource(request);

            Assert.AreEqual(request.Count, result.RetrievedResultCount);
        }
示例#2
0
        public async Task Test_ReceivedPenaltyResourceQueryHelper_QueryResource_IncludesLinkedPenalty()
        {
            var queryHelper = serviceProvider.GetRequiredService <ReceivedPenaltyResourceQueryHelper>();

            var request = new ClientPaginationRequest
            {
                Count    = 3,
                Before   = DateTime.UtcNow,
                ClientId = 3,
            };

            var result = await queryHelper.QueryResource(request);

            Assert.AreEqual(request.Count, result.RetrievedResultCount);
        }
示例#3
0
        public async Task Test_AdministeredPenaltyResourceQueryHelper_QueryResource_OrdersDescending()
        {
            var queryHelper = serviceProvider.GetRequiredService <AdministeredPenaltyResourceQueryHelper>();

            var request = new ClientPaginationRequest
            {
                Count     = 2,
                Before    = DateTime.UtcNow,
                ClientId  = 1,
                Direction = SortDirection.Descending
            };

            var result = await queryHelper.QueryResource(request);

            Assert.Less(result.Results.Last().When.ToFileTimeUtc(), result.Results.First().When.ToFileTimeUtc());
        }
        public async Task <IViewComponentResult> InvokeAsync(int clientId, int count, int offset, DateTime?startAt, MetaType?metaType)
        {
            var level = (EFClient.Permission)Enum.Parse(typeof(EFClient.Permission), UserClaimsPrincipal.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Role)?.Value ?? "User");

            var request = new ClientPaginationRequest
            {
                ClientId = clientId,
                Count    = count,
                Offset   = offset,
                Before   = startAt,
            };

            var meta = await GetClientMeta(_metaService, metaType, level, request);

            ViewBag.Localization = SharedLibraryCore.Utilities.CurrentLocalization.LocalizationIndex;

            return(View("_List", meta));
        }
示例#5
0
        public async Task <IEnumerable <IClientMeta> > GetRuntimeMeta(ClientPaginationRequest request)
        {
            var meta = new List <IClientMeta>();

            foreach (var(type, actions) in _metaActions)
            {
                // information is not listed chronologically
                if (type != MetaType.Information)
                {
                    var metaItems = await actions[0](request);
                    meta.AddRange(metaItems);
                }
            }

            return(meta.OrderByDescending(_meta => _meta.When)
                   .Take(request.Count)
                   .ToList());
        }
示例#6
0
        public async Task <IActionResult> Meta(int id, int count, int offset, long?startAt, MetaType?metaFilterType)
        {
            var request = new ClientPaginationRequest
            {
                ClientId = id,
                Count    = count,
                Offset   = offset,
                Before   = DateTime.FromFileTimeUtc(startAt ?? DateTime.UtcNow.ToFileTimeUtc())
            };

            var meta = await ProfileMetaListViewComponent.GetClientMeta(_metaService, metaFilterType, Client.Level, request);

            if (meta.Count() == 0)
            {
                return(Ok());
            }

            return(View("Components/ProfileMetaList/_List", meta));
        }
示例#7
0
        public async Task <IEnumerable <T> > GetRuntimeMeta <T>(ClientPaginationRequest request, MetaType metaType) where T : IClientMeta
        {
            IEnumerable <T> meta;

            if (metaType == MetaType.Information)
            {
                var allMeta = new List <T>();

                foreach (var individualMetaRegistration in _metaActions[metaType])
                {
                    allMeta.AddRange(await individualMetaRegistration(request));
                }

                return(ProcessInformationMeta(allMeta));
            }

            else
            {
                meta = await _metaActions[metaType][0](request) as IEnumerable <T>;
            }

            return(meta);
        }
示例#8
0
        private async Task <IEnumerable <InformationResponse> > GetProfileMeta(ClientPaginationRequest request)
        {
            var metaList    = new List <InformationResponse>();
            var lastMapMeta = await _metaService.GetPersistentMeta("LastMapPlayed", new EFClient()
            {
                ClientId = request.ClientId
            });

            if (lastMapMeta != null)
            {
                metaList.Add(new InformationResponse()
                {
                    ClientId      = request.ClientId,
                    MetaId        = lastMapMeta.MetaId,
                    Key           = Utilities.CurrentLocalization.LocalizationIndex["WEBFRONT_CLIENT_META_LAST_MAP"],
                    Value         = lastMapMeta.Value,
                    ShouldDisplay = true,
                    Type          = MetaType.Information,
                    Column        = 1,
                    Order         = 6
                });
            }

            var lastServerMeta = await _metaService.GetPersistentMeta("LastServerPlayed", new EFClient()
            {
                ClientId = request.ClientId
            });

            if (lastServerMeta != null)
            {
                metaList.Add(new InformationResponse()
                {
                    ClientId      = request.ClientId,
                    MetaId        = lastServerMeta.MetaId,
                    Key           = Utilities.CurrentLocalization.LocalizationIndex["WEBFRONT_CLIENT_META_LAST_SERVER"],
                    Value         = lastServerMeta.Value,
                    ShouldDisplay = true,
                    Type          = MetaType.Information,
                    Column        = 0,
                    Order         = 6
                });
            }

            var client = await _clientEntityService.Get(request.ClientId);

            if (client == null)
            {
                _logger.LogWarning("No client found with id {clientId} when generating profile meta", request.ClientId);
                return(metaList);
            }

            metaList.Add(new InformationResponse()
            {
                ClientId      = client.ClientId,
                Key           = _transLookup["WEBFRONT_PROFILE_META_PLAY_TIME"],
                Value         = TimeSpan.FromHours(client.TotalConnectionTime / 3600.0).HumanizeForCurrentCulture(),
                ShouldDisplay = true,
                Column        = 1,
                Order         = 0,
                Type          = MetaType.Information
            });

            metaList.Add(new InformationResponse()
            {
                ClientId      = client.ClientId,
                Key           = _transLookup["WEBFRONT_PROFILE_META_FIRST_SEEN"],
                Value         = (DateTime.UtcNow - client.FirstConnection).HumanizeForCurrentCulture(),
                ShouldDisplay = true,
                Column        = 1,
                Order         = 1,
                Type          = MetaType.Information
            });

            metaList.Add(new InformationResponse()
            {
                ClientId      = client.ClientId,
                Key           = _transLookup["WEBFRONT_PROFILE_META_LAST_SEEN"],
                Value         = (DateTime.UtcNow - client.LastConnection).HumanizeForCurrentCulture(),
                ShouldDisplay = true,
                Column        = 1,
                Order         = 2,
                Type          = MetaType.Information
            });

            metaList.Add(new InformationResponse()
            {
                ClientId      = client.ClientId,
                Key           = Utilities.CurrentLocalization.LocalizationIndex["WEBFRONT_CLIENT_META_CONNECTIONS"],
                Value         = client.Connections.ToString("#,##0", new System.Globalization.CultureInfo(Utilities.CurrentLocalization.LocalizationName)),
                ShouldDisplay = true,
                Column        = 1,
                Order         = 3,
                Type          = MetaType.Information
            });

            metaList.Add(new InformationResponse()
            {
                ClientId    = client.ClientId,
                Key         = Utilities.CurrentLocalization.LocalizationIndex["WEBFRONT_CLIENT_META_MASKED"],
                Value       = client.Masked ? Utilities.CurrentLocalization.LocalizationIndex["WEBFRONT_CLIENT_META_TRUE"] : Utilities.CurrentLocalization.LocalizationIndex["WEBFRONT_CLIENT_META_FALSE"],
                IsSensitive = true,
                Column      = 1,
                Order       = 4,
                Type        = MetaType.Information
            });

            return(metaList);
        }
示例#9
0
        private async Task <IEnumerable <ConnectionHistoryResponse> > GetConnectionHistoryMeta(ClientPaginationRequest request)
        {
            var connections = await _connectionHistoryHelper.QueryResource(request);

            return(connections.Results);
        }
示例#10
0
        private async Task <IEnumerable <UpdatedAliasResponse> > GetUpdatedAliasMeta(ClientPaginationRequest request)
        {
            var aliases = await _updatedAliasHelper.QueryResource(request);

            return(aliases.Results);
        }
示例#11
0
        private async Task <IEnumerable <AdministeredPenaltyResponse> > GetAdministeredPenaltiesMeta(ClientPaginationRequest request)
        {
            var penalties = await _administeredPenaltyHelper.QueryResource(request);

            return(penalties.Results);
        }
        public static async Task <IEnumerable <IClientMeta> > GetClientMeta(IMetaService metaService, MetaType?metaType, EFClient.Permission level, ClientPaginationRequest request)
        {
            IEnumerable <IClientMeta> meta = null;

            if (metaType == null) // all types
            {
                meta = await metaService.GetRuntimeMeta(request);
            }

            else
            {
                switch (metaType)
                {
                case MetaType.Information:
                    meta = await metaService.GetRuntimeMeta <InformationResponse>(request, metaType.Value);

                    break;

                case MetaType.AliasUpdate:
                    meta = await metaService.GetRuntimeMeta <UpdatedAliasResponse>(request, metaType.Value);

                    break;

                case MetaType.ChatMessage:
                    meta = await metaService.GetRuntimeMeta <MessageResponse>(request, metaType.Value);

                    break;

                case MetaType.Penalized:
                    meta = await metaService.GetRuntimeMeta <AdministeredPenaltyResponse>(request, metaType.Value);

                    break;

                case MetaType.ReceivedPenalty:
                    meta = await metaService.GetRuntimeMeta <ReceivedPenaltyResponse>(request, metaType.Value);

                    break;

                default:
                    break;
                }
            }

            if (level < EFClient.Permission.Trusted)
            {
                meta = meta.Where(_meta => !_meta.IsSensitive);
            }

            return(meta);
        }