From c22bfed99d9e51f5bd220f3124957f022035095a Mon Sep 17 00:00:00 2001 From: RaidMax Date: Mon, 28 Feb 2022 15:20:46 -0600 Subject: [PATCH] simplify level update so we don't have to worry about linked account levels --- SharedLibraryCore/Services/ClientService.cs | 47 +++---------------- .../Controllers/Client/ClientController.cs | 8 ++++ 2 files changed, 14 insertions(+), 41 deletions(-) diff --git a/SharedLibraryCore/Services/ClientService.cs b/SharedLibraryCore/Services/ClientService.cs index d65380518..f8019b721 100644 --- a/SharedLibraryCore/Services/ClientService.cs +++ b/SharedLibraryCore/Services/ClientService.cs @@ -597,51 +597,16 @@ private async Task UpdateAliasNew(string originalName, int? ip, Data.Models.Clie /// public virtual async Task UpdateLevel(Permission newPermission, EFClient temporalClient, EFClient origin) { - await using var ctx = _contextFactory.CreateContext(); - var entity = await ctx.Clients - .Where(_client => _client.ClientId == temporalClient.ClientId) + await using var context = _contextFactory.CreateContext(); + var entity = await context.Clients + .Where(client => client.ClientId == temporalClient.ClientId) .FirstAsync(); - var oldPermission = entity.Level; + _logger.LogInformation("Updating {ClientId} from {OldPermission} to {NewPermission} ", + temporalClient.ClientId, entity.Level, newPermission); entity.Level = newPermission; - await ctx.SaveChangesAsync(); - - using (LogContext.PushProperty("Server", temporalClient?.CurrentServer?.ToString())) - { - _logger.LogInformation("Updated {clientId} to {newPermission}", temporalClient.ClientId, newPermission); - - var linkedPermissionSet = new[] { Permission.Banned, Permission.Flagged }; - // if their permission level has been changed to level that needs to be updated on all accounts - if (linkedPermissionSet.Contains(newPermission) || linkedPermissionSet.Contains(oldPermission)) - { - //get all clients that have the same linkId - var iqMatchingClients = ctx.Clients - .Where(_client => _client.AliasLinkId == entity.AliasLinkId); - - var iqLinkClients = new List().AsQueryable(); - if (!_appConfig.EnableImplicitAccountLinking) - { - var linkIds = await ctx.Aliases.Where(alias => - alias.IPAddress != null && alias.IPAddress == temporalClient.IPAddress) - .Select(alias => alias.LinkId) - .ToListAsync(); - iqLinkClients = ctx.Clients.Where(client => linkIds.Contains(client.AliasLinkId)); - } - - // this updates the level for all the clients with the same LinkId - // only if their new level is flagged or banned - await iqMatchingClients.Union(iqLinkClients).ForEachAsync(_client => - { - _client.Level = newPermission; - _logger.LogInformation("Updated linked {clientId} to {newPermission}", _client.ClientId, - newPermission); - }); - - await ctx.SaveChangesAsync(); - } - } - + await context.SaveChangesAsync(); temporalClient.Level = newPermission; } diff --git a/WebfrontCore/Controllers/Client/ClientController.cs b/WebfrontCore/Controllers/Client/ClientController.cs index e22070a86..bcae0de52 100644 --- a/WebfrontCore/Controllers/Client/ClientController.cs +++ b/WebfrontCore/Controllers/Client/ClientController.cs @@ -53,6 +53,14 @@ public async Task ProfileAsync(int id, MetaType? metaFilterType) client.SetAdditionalProperty(EFMeta.ClientTag, tag.LinkedMeta.Value); } + // even though we haven't set their level to "banned" yet + // (ie they haven't reconnected with the infringing player identifier) + // we want to show them as banned as to not confuse people. + if (activePenalties.Any(penalty => penalty.Type == EFPenalty.PenaltyType.Ban)) + { + client.Level = Data.Models.Client.EFClient.Permission.Banned; + } + var displayLevelInt = (int)client.Level; var displayLevel = client.Level.ToLocalizedLevelName();