Exemplo n.º 1
0
        public async Task <IActionResult> ViewRcon(Guid id)
        {
            var gameServerDto = await _gameServersRepository.GetGameServer(id);

            var canViewLiveRcon = await _authorizationService.AuthorizeAsync(User, gameServerDto, AuthPolicies.ViewLiveRcon);

            if (!canViewLiveRcon.Succeeded)
            {
                return(Unauthorized());
            }

            return(View(gameServerDto));
        }
        public async Task <IActionResult> Create(BanFileMonitorDto model)
        {
            var gameServerDto = await _gameServersRepository.GetGameServer(model.ServerId);

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

            if (!ModelState.IsValid)
            {
                await AddGameServersViewData(model.ServerId);

                return(View(model));
            }

            var banFileMonitorDto       = new BanFileMonitorDto().WithServerDto(gameServerDto);
            var canCreateBanFileMonitor = await _authorizationService.AuthorizeAsync(User, banFileMonitorDto, AuthPolicies.CreateBanFileMonitor);

            if (!canCreateBanFileMonitor.Succeeded)
            {
                return(Unauthorized());
            }

            banFileMonitorDto.FilePath = model.FilePath;

            await _banFileMonitorsRepository.CreateBanFileMonitor(banFileMonitorDto);

            _logger.LogInformation(EventIds.Management, "User {User} has created a new ban file monitor with Id {Id}", User.Username(), banFileMonitorDto.BanFileMonitorId);
            this.AddAlertSuccess($"The ban file monitor has been created for {gameServerDto.Title}");

            return(RedirectToAction(nameof(Index)));
        }
        public async Task <IActionResult> Details(Guid id)
        {
            var gameServerDto = await _gameServersRepository.GetGameServer(id);

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

            var canEditGameServer = await _authorizationService.AuthorizeAsync(User, gameServerDto, AuthPolicies.ViewGameServer);

            if (!canEditGameServer.Succeeded)
            {
                return(Unauthorized());
            }

            var banFileMonitorFilterModel = new BanFileMonitorFilterModel
            {
                Order    = BanFileMonitorFilterModel.OrderBy.BannerServerListPosition,
                ServerId = id
            }.ApplyAuth(User);
            var banFileMonitorDtos = await _banFileMonitorsRepository.GetBanFileMonitors(banFileMonitorFilterModel);

            var fileMonitorFilterModel = new FileMonitorFilterModel
            {
                Order    = FileMonitorFilterModel.OrderBy.BannerServerListPosition,
                ServerId = id
            }.ApplyAuth(User);
            var fileMonitorsDtos = await _fileMonitorsRepository.GetFileMonitors(fileMonitorFilterModel);

            var model = new GameServerDetailsViewModel
            {
                GameServerDto      = gameServerDto,
                BanFileMonitorDtos = banFileMonitorDtos,
                FileMonitorDtos    = fileMonitorsDtos
            };

            return(View(model));
        }
Exemplo n.º 4
0
        public async Task <IActionResult> CreateUserClaim(string id, string claimType, string claimValue)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var user = await _userManager.FindByIdAsync(id);

            var portalClaims = await _usersRepository.GetUserClaims(id);

            var gameServerDto = await _gameServersRepository.GetGameServer(Guid.Parse(claimValue));

            var canCreateUserClaim = await _authorizationService.AuthorizeAsync(User, gameServerDto, AuthPolicies.CreateUserClaim);

            if (!canCreateUserClaim.Succeeded)
            {
                return(Unauthorized());
            }

            if (!portalClaims.Any(claim => claim.ClaimType == claimType && claim.ClaimValue == claimValue))
            {
                await _usersRepository.UpdatePortalClaim(id, new PortalClaimDto
                {
                    ClaimType  = claimType,
                    ClaimValue = claimValue
                });

                this.AddAlertSuccess($"The {claimType} claim has been added to {user.UserName}");
                _logger.LogInformation(EventIds.Management, "User {User} has added a {ClaimType} with {ClaimValue} to {TargetUser}", User.Username(), claimType, claimValue, user.UserName);
            }
            else
            {
                this.AddAlertSuccess($"Nothing to do - {user.UserName} already has the {claimType} claim");
            }

            return(RedirectToAction(nameof(ManageProfile), new { id }));
        }
        public override async Task HandleChatMessage(Guid serverId, string name, string guid, string message, ChatType chatType)
        {
            if (!IsMatchingCommand(message))
            {
                return;
            }

            if (name != "Sitting-Duc>XI<")
            {
                return;
            }

            var server = await _gameServersRepository.GetGameServer(serverId);

            var rconClient = _rconClientFactory.CreateInstance(server.GameType, server.ServerId, server.Hostname, server.QueryPort, server.RconPassword);
            await rconClient.Say("^5Sitting-Duc ^2is the greatest!");
        }
        public override async Task HandleChatMessage(Guid serverId, string name, string guid, string message, ChatType chatType)
        {
            if (!IsMatchingCommand(message))
            {
                return;
            }

            if (!name.Contains(">XI<"))
            {
                return;
            }

            var server = await _gameServersRepository.GetGameServer(serverId);

            var gameServerStatus = await _gameServerStatusRepository.GetStatus(serverId, TimeSpan.Zero);

            var targetName = name;

            if (gameServerStatus != null)
            {
                var splits = message.Replace("!fu", "").Trim().Split(' ');
                if (splits.Any())
                {
                    var potentialTarget = splits.First().ToLower();
                    var potentialMatch  = gameServerStatus.Players.Where(p => p.Name.ToLower().Contains(potentialTarget)).ToList();

                    if (potentialMatch.Count == 1)
                    {
                        targetName = potentialMatch.First().Name;
                    }
                }
            }

            _logger.LogInformation("FuckYou initiated for {name} on {server}", name, server.Title);

            var responseMessage = GenerateResponseMessage(targetName);

            _logger.LogInformation("Executing FuckYou response '{response}' for {name} on {server}", responseMessage, name, server.Title);

            var rconClient = _rconClientFactory.CreateInstance(server.GameType, server.ServerId, server.Hostname, server.QueryPort, server.RconPassword);
            await rconClient.Say(responseMessage);
        }
        private async Task <PortalGameServerStatusDto> RefreshGameServerStatus(Guid serverId)
        {
            try
            {
                var server = await _gameServersRepository.GetGameServer(serverId);

                var gameServerStatusHelper = _gameServerClientFactory.GetGameServerStatusHelper(server.GameType, server.ServerId, server.Hostname, server.QueryPort, server.RconPassword);

                var gameServerStatus = await gameServerStatusHelper.GetServerStatus();

                if (gameServerStatus == null)
                {
                    return(null);
                }

                var model = new PortalGameServerStatusDto
                {
                    ServerId    = serverId,
                    GameType    = server.GameType,
                    Hostname    = server.Hostname,
                    QueryPort   = server.QueryPort,
                    MaxPlayers  = gameServerStatus.MaxPlayers,
                    ServerName  = gameServerStatus.ServerName,
                    Map         = gameServerStatus.Map,
                    Mod         = gameServerStatus.Mod,
                    PlayerCount = gameServerStatus.PlayerCount
                };

                var players = new List <PortalGameServerPlayerDto>();

                foreach (var player in gameServerStatus.Players)
                {
                    var playerDto = new PortalGameServerPlayerDto
                    {
                        Num       = player.Num,
                        Guid      = player.Guid,
                        Name      = player.Name,
                        IpAddress = player.IpAddress,
                        Score     = player.Score,
                        Rate      = player.Rate
                    };

                    if (!string.IsNullOrWhiteSpace(player.IpAddress))
                    {
                        var geoLocationResponse = await _geoLocationClient.LookupAddress(playerDto.IpAddress);

                        if (geoLocationResponse.Success)
                        {
                            playerDto.GeoLocation = geoLocationResponse.GeoLocationDto;

                            await _playersLocationsRepository.UpdateEntry(new PlayerLocationDto
                            {
                                GameType    = server.GameType,
                                ServerId    = server.ServerId,
                                ServerName  = gameServerStatus.ServerName,
                                Guid        = player.Guid,
                                PlayerName  = player.Name,
                                GeoLocation = geoLocationResponse.GeoLocationDto
                            });
                        }
                    }

                    players.Add(playerDto);
                }

                model.Players = players;

                await UpdateStatus(serverId, model);

                return(model);
            }
            catch
            {
                return(null);
            }
        }
Exemplo n.º 8
0
        public override async Task HandleChatMessage(Guid serverId, string name, string guid, string message, ChatType chatType)
        {
            if (!IsMatchingCommand(message))
            {
                return;
            }

            var server = await _gameServersRepository.GetGameServer(serverId);

            var gameServerStatus = await _gameServerStatusRepository.GetStatus(serverId, TimeSpan.Zero);

            if (gameServerStatus == null)
            {
                _logger.LogWarning("Could not process !like for {name} as the game server status is null for {serverId}", name, serverId);
                return;
            }

            var statusPlayer = gameServerStatus.Players.SingleOrDefault(p => p.Guid == guid);

            if (statusPlayer == null)
            {
                _logger.LogWarning("Could not process !like for {name} as the status player is null for {guid}", name, guid);
                return;
            }

            var databasePlayer = await _playersRepository.GetPlayer(gameServerStatus.GameType, guid);

            if (databasePlayer == null)
            {
                _logger.LogWarning("Could not process !like for {name} as player is null for {guid}", name, guid);
                return;
            }

            var rconClient = _rconClientFactory.CreateInstance(server.GameType, server.ServerId, server.Hostname, server.QueryPort, server.RconPassword);
            var like       = !message.ToLower().Contains("!dislike");

            var mapPopularityDto = await _mapPopularityRepository.GetMapPopularity(gameServerStatus.GameType, gameServerStatus.Map);

            if (mapPopularityDto == null)
            {
                mapPopularityDto = new MapPopularityDto
                {
                    GameType = gameServerStatus.GameType,
                    MapName  = gameServerStatus.Map,
                    MapVotes = new List <MapPopularityVoteDto>
                    {
                        new MapPopularityVoteDto
                        {
                            ServerId    = gameServerStatus.ServerId,
                            ServerName  = gameServerStatus.ServerName,
                            PlayerId    = databasePlayer.PlayerId,
                            PlayerName  = name,
                            ModName     = gameServerStatus.Mod,
                            PlayerCount = gameServerStatus.PlayerCount,
                            Updated     = DateTime.UtcNow,
                            Like        = like
                        }
                    }
                };

                await _mapPopularityRepository.UpdateMapPopularity(mapPopularityDto);
            }
            else
            {
                var existing = mapPopularityDto.MapVotes.SingleOrDefault(mp => mp.PlayerId == databasePlayer.PlayerId && mp.ModName == gameServerStatus.Mod && mp.ServerId == gameServerStatus.ServerId);
                if (existing == null)
                {
                    mapPopularityDto.MapVotes.Add(new MapPopularityVoteDto
                    {
                        ServerId    = gameServerStatus.ServerId,
                        ServerName  = gameServerStatus.ServerName,
                        PlayerId    = databasePlayer.PlayerId,
                        PlayerName  = name,
                        ModName     = gameServerStatus.Mod,
                        PlayerCount = gameServerStatus.PlayerCount,
                        Updated     = DateTime.UtcNow,
                        Like        = like
                    });

                    await _mapPopularityRepository.UpdateMapPopularity(mapPopularityDto);
                }
                else
                {
                    existing.Updated = DateTime.UtcNow;
                    existing.Like    = like;

                    await _mapPopularityRepository.UpdateMapPopularity(mapPopularityDto);
                }
            }

            var globalMessage = $"^6{name} ^2likes ^6this map - thanks for the feedback!";

            if (!like)
            {
                globalMessage = $"^6{name} ^1dislikes ^6this map - thanks for the feedback!";
            }

            var totalLikes    = mapPopularityDto.MapVotes.Count(mv => mv.ServerId == gameServerStatus.ServerId && mv.ModName == gameServerStatus.Mod && mv.Like);
            var totalDislikes = mapPopularityDto.MapVotes.Count(mv => mv.ServerId == gameServerStatus.ServerId && mv.ModName == gameServerStatus.Mod && mv.Like == false);

            var overall = $"^6Overall there are ^2{totalLikes} likes ^6and ^1{totalDislikes} dislikes ^6for this map";

            await rconClient.Say(globalMessage);

            await rconClient.Say(overall);
        }