Log ban hits in DB. (#6337)
This commit is contained in:
committed by
GitHub
parent
a3aabf59ad
commit
b75f005bb4
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user