From 0b6e261dbb6320742158b38c6b4b0b92c5be3dd2 Mon Sep 17 00:00:00 2001 From: RaidMax Date: Mon, 16 Aug 2021 13:20:54 -0500 Subject: [PATCH] fix more issues with implicit link toggle --- Application/IW4MServer.cs | 6 ++-- SharedLibraryCore/PartialEntities/EFClient.cs | 33 ++++++++++++------- SharedLibraryCore/Services/ClientService.cs | 6 +++- WebfrontCore/WebfrontCore.csproj | 2 +- 4 files changed, 30 insertions(+), 17 deletions(-) diff --git a/Application/IW4MServer.cs b/Application/IW4MServer.cs index 6a9f500ac..e2b76107e 100644 --- a/Application/IW4MServer.cs +++ b/Application/IW4MServer.cs @@ -362,7 +362,7 @@ namespace IW4MAdmin throw; } - await E.Origin.OnJoin(E.Origin.IPAddress); + await E.Origin.OnJoin(E.Origin.IPAddress, Manager.GetApplicationSettings().Configuration().EnableImplicitAccountLinking); } } @@ -738,7 +738,7 @@ namespace IW4MAdmin { try { - await client.OnJoin(origin.IPAddress); + await client.OnJoin(origin.IPAddress, Manager.GetApplicationSettings().Configuration().EnableImplicitAccountLinking); } catch (Exception e) @@ -754,7 +754,7 @@ namespace IW4MAdmin client.Level == Permission.Banned) { ServerLogger.LogWarning("{client} state is Unknown (probably kicked), but they are still connected. trying to kick again...", origin.ToString()); - await client.CanConnect(client.IPAddress); + await client.CanConnect(client.IPAddress, Manager.GetApplicationSettings().Configuration().EnableImplicitAccountLinking); } } diff --git a/SharedLibraryCore/PartialEntities/EFClient.cs b/SharedLibraryCore/PartialEntities/EFClient.cs index b7f27a8c7..901511028 100644 --- a/SharedLibraryCore/PartialEntities/EFClient.cs +++ b/SharedLibraryCore/PartialEntities/EFClient.cs @@ -524,7 +524,7 @@ namespace SharedLibraryCore.Database.Models } } - public async Task OnJoin(int? ipAddress) + public async Task OnJoin(int? ipAddress, bool enableImplicitLinking) { using (LogContext.PushProperty("Server", CurrentServer?.ToString())) { @@ -537,7 +537,7 @@ namespace SharedLibraryCore.Database.Models await CurrentServer.Manager.GetClientService().UpdateAlias(this); await CurrentServer.Manager.GetClientService().Update(this); - bool canConnect = await CanConnect(ipAddress); + var canConnect = await CanConnect(ipAddress, enableImplicitLinking); if (!canConnect) { @@ -569,7 +569,7 @@ namespace SharedLibraryCore.Database.Models } } - public async Task CanConnect(int? ipAddress) + public async Task CanConnect(int? ipAddress, bool enableImplicitLinking) { using (LogContext.PushProperty("Server", CurrentServer?.ToString())) { @@ -594,18 +594,27 @@ namespace SharedLibraryCore.Database.Models // we want to kick them if any account is banned if (banPenalty != null) { - if (Level != Permission.Banned) + if (enableImplicitLinking) { - Utilities.DefaultLogger.LogInformation( - "Client {client} is banned, but using a new GUID, we we're updating their level and kicking them", - ToString()); - await SetLevel(Permission.Banned, autoKickClient).WaitAsync(Utilities.DefaultCommandTimeout, - CurrentServer.Manager.CancellationToken); + if (Level != Permission.Banned) + { + Utilities.DefaultLogger.LogInformation( + "Client {client} is banned, but using a new GUID, we we're updating their level and kicking them", + ToString()); + await SetLevel(Permission.Banned, autoKickClient).WaitAsync(Utilities.DefaultCommandTimeout, + CurrentServer.Manager.CancellationToken); + } + + Utilities.DefaultLogger.LogInformation("Kicking {client} because they are banned", ToString()); + Kick(loc["WEBFRONT_PENALTY_LIST_BANNED_REASON"], autoKickClient, banPenalty); + return false; } - Utilities.DefaultLogger.LogInformation("Kicking {client} because they are banned", ToString()); - Kick(loc["WEBFRONT_PENALTY_LIST_BANNED_REASON"], autoKickClient, banPenalty); - return false; + if (Level != Permission.Banned) + { + Ban(banPenalty.Offense, autoKickClient, true); + return false; + } } // we want to kick them if any account is tempbanned diff --git a/SharedLibraryCore/Services/ClientService.cs b/SharedLibraryCore/Services/ClientService.cs index 8a1680a01..7cb374fe7 100644 --- a/SharedLibraryCore/Services/ClientService.cs +++ b/SharedLibraryCore/Services/ClientService.cs @@ -332,13 +332,16 @@ namespace SharedLibraryCore.Services { defaultAlias.IPAddress = ip; entity.CurrentAlias = defaultAlias; + entity.CurrentAliasId = defaultAlias.AliasId; await context.SaveChangesAsync(); return; } if (existingExactAlias != null) { - _logger.LogDebug("[{Method}] client {Client} already has an existing exact alias, so we are not updating", nameof(UpdateAliasNew), entity.ToString()); + entity.CurrentAlias = existingExactAlias; + entity.CurrentAliasId = existingExactAlias.AliasId; + _logger.LogDebug("[{Method}] client {Client} already has an existing exact alias, so we are not making changes", nameof(UpdateAliasNew), entity.ToString()); return; } @@ -356,6 +359,7 @@ namespace SharedLibraryCore.Services entity.CurrentAlias = newAlias; await context.SaveChangesAsync(); + entity.CurrentAliasId = newAlias.AliasId; } /// diff --git a/WebfrontCore/WebfrontCore.csproj b/WebfrontCore/WebfrontCore.csproj index a7b4a3e20..6cfec3434 100644 --- a/WebfrontCore/WebfrontCore.csproj +++ b/WebfrontCore/WebfrontCore.csproj @@ -97,6 +97,6 @@ - +