From 5d05430b8936f1edd12a08a4dcb299b5092a0c11 Mon Sep 17 00:00:00 2001 From: Sarah Faey Date: Sun, 4 Dec 2022 12:34:21 +0100 Subject: [PATCH] banning a user now removes their roles banned users can't be deleted completely signing up for banned users is no longer possible --- Lieb/Data/RaidService.cs | 6 ++++++ Lieb/Data/UserService.cs | 26 ++++++++++++++++++++++++-- Lieb/Pages/User/UserEdit.razor | 1 + 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/Lieb/Data/RaidService.cs b/Lieb/Data/RaidService.cs index 35a9022..8ebc0d6 100644 --- a/Lieb/Data/RaidService.cs +++ b/Lieb/Data/RaidService.cs @@ -416,6 +416,12 @@ namespace Lieb.Data return false; } + if(user.BannedUntil > DateTimeOffset.UtcNow) + { + errorMessage = $"You are banned until {user.BannedUntil}."; + return false; + } + return true; } diff --git a/Lieb/Data/UserService.cs b/Lieb/Data/UserService.cs index d7935c3..7748542 100644 --- a/Lieb/Data/UserService.cs +++ b/Lieb/Data/UserService.cs @@ -135,19 +135,41 @@ namespace Lieb.Data await _guildWars2AccountService.DeleteAccount(account.GuildWars2AccountId); } user.GuildWars2Accounts.Clear(); - context.Remove(user); + + if(user.BannedUntil > DateTime.Now) + { + LiebUser contextUser = context.LiebUsers.First(u => u.Id == userId); + contextUser.Name = "Deleted and Banned"; + contextUser.MainGW2Account = 0; + contextUser.Pronouns = string.Empty; + contextUser.Birthday = null; + contextUser.AlwaysSignUpWithMainAccount = false; + LiebRole standardRole = await context.LiebRoles.FirstOrDefaultAsync(m => m.RoleName == Constants.Roles.User.Name); + context.RemoveRange(user.RoleAssignments.Where(a => a.LiebRoleId != standardRole.LiebRoleId)); + } + else + { + context.Remove(user); + } await context.SaveChangesAsync(); } public async Task UpdateBannedUntil(ulong userId, DateTime? date) { using var context = _contextFactory.CreateDbContext(); - LiebUser? user = await context.LiebUsers.FirstOrDefaultAsync(u => u.Id == userId); + LiebUser? user = await context.LiebUsers + .Include(u => u.RoleAssignments) + .FirstOrDefaultAsync(u => u.Id == userId); if (user == null) return; user.BannedUntil = date; + if(user.BannedUntil > DateTime.UtcNow) + { + LiebRole standardRole = await context.LiebRoles.FirstOrDefaultAsync(m => m.RoleName == Constants.Roles.User.Name); + context.RemoveRange(user.RoleAssignments.Where(a => a.LiebRoleId != standardRole.LiebRoleId)); + } await context.SaveChangesAsync(); } diff --git a/Lieb/Pages/User/UserEdit.razor b/Lieb/Pages/User/UserEdit.razor index 9e36585..f0eea2b 100644 --- a/Lieb/Pages/User/UserEdit.razor +++ b/Lieb/Pages/User/UserEdit.razor @@ -128,5 +128,6 @@ { _submitMessage = "user unbanned successfully"; } + _user = UserService.GetLiebUser(_user.Id); } } \ No newline at end of file