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