Log ban hits in DB. (#6337)

This commit is contained in:
Pieter-Jan Briers
2022-01-28 19:10:44 +01:00
committed by GitHub
parent a3aabf59ad
commit b75f005bb4
13 changed files with 2150 additions and 39 deletions

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Content.Server.Database;
@@ -63,6 +64,35 @@ The ban reason is: ""{ban.Reason}""
*/
private async Task NetMgrOnConnecting(NetConnectingArgs e)
{
var deny = await ShouldDeny(e);
var addr = e.IP.Address;
var userId = e.UserId;
if (deny != null)
{
var (reason, msg, banHits) = deny.Value;
var id = await _db.AddConnectionLogAsync(userId, e.UserName, addr, e.UserData.HWId, reason);
if (banHits is { Count: > 0 })
await _db.AddServerBanHitsAsync(id, banHits);
e.Deny(msg);
}
else
{
await _db.AddConnectionLogAsync(userId, e.UserName, addr, e.UserData.HWId, null);
if (!ServerPreferencesManager.ShouldStorePrefs(e.AuthType))
return;
await _db.UpdatePlayerRecordAsync(userId, e.UserName, addr, e.UserData.HWId);
}
}
private async Task<(ConnectionDenyReason, string, List<ServerBanDef>? bansHit)?> ShouldDeny(
NetConnectingArgs e)
{
// Check if banned.
var addr = e.IP.Address;
@@ -77,34 +107,26 @@ The ban reason is: ""{ban.Reason}""
var adminData = await _dbManager.GetAdminDataForAsync(e.UserId);
var wasInGame = EntitySystem.TryGet<GameTicker>(out var ticker) && ticker.PlayersInGame.Contains(userId);
if ((_plyMgr.PlayerCount >= _cfg.GetCVar(CCVars.SoftMaxPlayers) && adminData is null) && !wasInGame )
if ((_plyMgr.PlayerCount >= _cfg.GetCVar(CCVars.SoftMaxPlayers) && adminData is null) && !wasInGame)
{
e.Deny(Loc.GetString("soft-player-cap-full"));
return;
return (ConnectionDenyReason.Full, Loc.GetString("soft-player-cap-full"), null);
}
var ban = await _db.GetServerBanAsync(addr, userId, hwId);
if (ban != null)
var bans = await _db.GetServerBansAsync(addr, userId, hwId);
if (bans.Count > 0)
{
e.Deny(ban.DisconnectMessage);
return;
var firstBan = bans[0];
return (ConnectionDenyReason.Ban, firstBan.DisconnectMessage, bans);
}
if (_cfg.GetCVar(CCVars.WhitelistEnabled)
&& await _db.GetWhitelistStatusAsync(userId) == false
&& adminData is null)
{
e.Deny(Loc.GetString("whitelist-not-whitelisted"));
return;
return (ConnectionDenyReason.Whitelist, Loc.GetString("whitelist-not-whitelisted"), null);
}
if (!ServerPreferencesManager.ShouldStorePrefs(e.AuthType))
{
return;
}
await _db.UpdatePlayerRecordAsync(userId, e.UserName, addr, e.UserData.HWId);
await _db.AddConnectionLogAsync(userId, e.UserName, addr, e.UserData.HWId);
return null;
}
private async Task<NetUserId?> AssignUserIdCallback(string name)