Beispiel #1
0
        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;

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

                    break;
                }
            }

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

            return(meta);
        }
Beispiel #2
0
        public async Task <IActionResult> ProfileAsync(int id, MetaType?metaFilterType)
        {
            var client = await Manager.GetClientService().Get(id);

            if (client == null)
            {
                return(NotFound());
            }

            var activePenalties = (await Manager.GetPenaltyService().GetActivePenaltiesAsync(client.AliasLinkId, client.IPAddress));


            int    displayLevelInt = (int)client.Level;
            string displayLevel    = client.Level.ToLocalizedLevelName();

            if (!Authorized && client.Level.ShouldHideLevel())
            {
                displayLevelInt = (int)Permission.User;
                displayLevel    = Permission.User.ToLocalizedLevelName();
            }

            var clientDto = new PlayerInfo()
            {
                Name      = client.Name,
                Level     = displayLevel,
                LevelInt  = displayLevelInt,
                ClientId  = client.ClientId,
                IPAddress = client.IPAddressString,
                NetworkId = client.NetworkId,
                Meta      = new List <InformationResponse>(),
                Aliases   = client.AliasLink.Children
                            .Select(_alias => _alias.Name)
                            .GroupBy(_alias => _alias.StripColors())
                            // we want the longest "duplicate" name
                            .Select(_grp => _grp.OrderByDescending(_name => _name.Length).First())
                            .Distinct()
                            .OrderBy(a => a)
                            .ToList(),
                IPs = client.AliasLink.Children
                      .Where(i => i.IPAddress != null)
                      .OrderByDescending(i => i.DateAdded)
                      .Select(i => i.IPAddress.ConvertIPtoString())
                      .Prepend(client.CurrentAlias.IPAddress.ConvertIPtoString())
                      .Distinct()
                      .ToList(),
                HasActivePenalty = activePenalties.Any(_penalty => _penalty.Type != PenaltyType.Flag),
                Online           = Manager.GetActiveClients().FirstOrDefault(c => c.ClientId == client.ClientId) != null,
                TimeOnline       = (DateTime.UtcNow - client.LastConnection).HumanizeForCurrentCulture(),
                LinkedAccounts   = client.LinkedAccounts,
                MetaFilterType   = metaFilterType
            };

            var meta = await _metaService.GetRuntimeMeta <InformationResponse>(new ClientPaginationRequest
            {
                ClientId = client.ClientId,
                Before   = DateTime.UtcNow
            }, MetaType.Information);

            var gravatar = await _metaService.GetPersistentMeta("GravatarEmail", client);

            if (gravatar != null)
            {
                clientDto.Meta.Add(new InformationResponse()
                {
                    Key   = "GravatarEmail",
                    Type  = MetaType.Other,
                    Value = gravatar.Value
                });
            }

            clientDto.ActivePenalty = activePenalties.OrderByDescending(_penalty => _penalty.Type).FirstOrDefault();
            clientDto.Meta.AddRange(Authorized ? meta : meta.Where(m => !m.IsSensitive));

            string strippedName = clientDto.Name.StripColors();

            ViewBag.Title = strippedName.Substring(strippedName.Length - 1).ToLower()[0] == 's' ?
                            strippedName + "'" :
                            strippedName + "'s";
            ViewBag.Title      += " " + Localization["WEBFRONT_CLIENT_PROFILE_TITLE"];
            ViewBag.Description = $"Client information for {strippedName}";
            ViewBag.Keywords    = $"IW4MAdmin, client, profile, {strippedName}";

            return(View("Profile/Index", clientDto));
        }