예제 #1
0
        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");
            }
        }
예제 #2
0
 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");
     }
 }
예제 #3
0
        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");
            }
        }
예제 #4
0
        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}");
        }
예제 #5
0
        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");
            }
        }
예제 #6
0
        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);
        }
예제 #7
0
        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}");
        }
예제 #8
0
        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}");
        }
예제 #9
0
        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}");
        }
예제 #10
0
 private async ValueTask HandleDownload(WebApiUser source)
 {
     await source.WriteConsole($"Please browse to the document located at \"/bans.csv?{source.Password}\".", "ban system");
 }