private async ValueTask HandleAddOfflineIp(string target, string name, WebApiUser user, string reason) { if (IsIpAInvalid(target)) { await user.WriteConsole($"Unable to comply: Invalid target address.", "ban system"); return; } var ban = new PlayerBan(target, new string[] { $"Dashboard: {user.Password.User} [ban offline]" }, DateTime.Now, new string[] { name }, reason); if (!await _database.Add(ban.IpAddress, ban)) { await user.WriteConsole($"Unable to comply: Ban already exists.", "ban handler"); } else { await user.WriteConsole($"Ban added.", "ban handler"); } }
private async ValueTask HandleExistsAddress(string target, WebApiUser user) { if (!_database.ContainsFast(target)) { await user.WriteConsole($"No such record found.", "ban handler"); } else { await user.WriteConsole($"Record identified.", "ban handler"); } }
private async ValueTask HandleExistsName(string target, WebApiUser user) { var record = _database.Get(target); if (record.Equals(default(PlayerBan))) { await user.WriteConsole($"No such record found.", "ban handler"); } else { await user.WriteConsole($"Record identified: {record.IpAddress}", "ban handler"); } }
private async ValueTask HandleRemoveIp(string target, WebApiUser user) { if (!await _database.RemoveFast(target)) { await user.WriteConsole($"Unable to comply: no such record.", "ban system"); return; } await user.WriteConsole($"Ban removed.", "ban system"); await _logManager.LogInformation($"Ban Manager: removed ban {target} for {user.Password.User}"); }
private async ValueTask HandleInfoAddress(string target, WebApiUser user) { var record = _database.Get(target); if (record.Equals(default(PlayerBan))) { await user.WriteConsole($"No such record found.", "ban handler"); } else { await user.WriteConsole( $"\nNames: {string.Join(", ", record.PlayerNames.Select(name=>$"\"{name}\""))},\n" + $"Date: {record.Time},\n" + $"Witnesses: {string.Join(", ", record.Witnesses.Select(witness => $"\"{witness}\""))}\n", "ban handler"); } }
private async ValueTask HandleAddName(string target, WebApiUser user, string reason) { var targetPlayer = _gameManager.Games .SelectMany(game => game.Players) .FirstOrDefault(player => player.Character !.PlayerInfo.PlayerName.Equals(target)); if (targetPlayer == null) { await user.WriteConsole($"Player not found.", "ban system"); return; } var address = targetPlayer.Client.Connection !.EndPoint.Address.ToString(); await user.WriteConsole($"Found address of player \"{target}\": {address}. Banning...", "ban system"); await HandleAddIp(address, user, reason); }
private async ValueTask HandlePurge(WebApiUser source) { var count = _database.Elements.Count(); await _database.Clear(); await source.WriteConsole($"Purged {count} records.", "ban system"); await _logManager.LogInformation( $"Ban Manager: PURGED bans for {source.Password.User}"); }
private async ValueTask HandleAddIp(string target, WebApiUser user, string reason) { var players = _gameManager.Games .SelectMany(game => game.Players) .Where(player => player.Client.Connection !.EndPoint.Address.ToString().Equals(target)); var count = 0; var uniqueNames = 0; var name = string.Empty; var names = new List <string>(); foreach (var clientPlayer in players) { if (!name.Equals(clientPlayer.Character !.PlayerInfo.PlayerName)) { uniqueNames++; names.Add(clientPlayer.Character !.PlayerInfo.PlayerName); } name = clientPlayer.Character !.PlayerInfo.PlayerName; _ = clientPlayer.BanAsync(); count++; } if (count == 0) { await user.WriteConsole($"Unable to comply: player not found.", "ban system"); return; } await _database.Add(target, new PlayerBan(target, new string[] { $"Dashboard: {user.Password.User}" }, DateTime.Now, names.ToArray(), reason)); await user.WriteConsole($"IP Banned {count} instances, with {uniqueNames} unique names.", "ban system"); await _logManager.LogInformation($"Ban Manager: IP banned {count} instances of {target} with {uniqueNames} unique instance names for {user.Password.User}"); }
private async ValueTask HandleList(WebApiUser source) { var sb = _sbPool.Get(); sb.Append("\nLegend: IP IpAddress, Time, Witness Count, Names, Reason for ban\r\n"); foreach (var databaseBan in _database.Elements) { sb.Append(databaseBan.IpAddress) .Append("; ") .Append(databaseBan.Time).Append("; ") .Append(databaseBan.Witnesses.Length).Append("; ") .Append(string.Join(", ", databaseBan.PlayerNames.Select(name => $"\"{name}\""))).Append("; ") .Append(databaseBan.Reason) .Append("\r\n"); } await source.WriteConsole(sb.ToString(), "ban system"); _sbPool.Return(sb); await _logManager.LogInformation( $"Ban Manager: listed bans for {source.Password.User}"); }
private async ValueTask HandleDownload(WebApiUser source) { await source.WriteConsole($"Please browse to the document located at \"/bans.csv?{source.Password}\".", "ban system"); }