diff --git a/MareSynchronosServer/MareSynchronosServer/Discord/DiscordBot.cs b/MareSynchronosServer/MareSynchronosServer/Discord/DiscordBot.cs index af4313d..0cff15d 100644 --- a/MareSynchronosServer/MareSynchronosServer/Discord/DiscordBot.cs +++ b/MareSynchronosServer/MareSynchronosServer/Discord/DiscordBot.cs @@ -78,9 +78,10 @@ namespace MareSynchronosServer.Discord var discordAuthedUser = await db.LodeStoneAuth.Include(u => u.User).FirstOrDefaultAsync(u => u.DiscordId == id); if (discordAuthedUser != null && discordAuthedUser.User != null) { - logger.LogInformation("User will be purged on next round of deletions: " + discordAuthedUser.User); - discordAuthedUser.User.LastLoggedIn = new DateTime(1900, 1, 1).ToUniversalTime(); - db.Remove(discordAuthedUser); + logger.LogInformation("Purging user: " + discordAuthedUser.User.UID); + + FileCleanupService.PurgeUser(discordAuthedUser.User, db, configuration); + await db.SaveChangesAsync(); } } @@ -180,8 +181,6 @@ namespace MareSynchronosServer.Discord { embedBuilder.WithTitle("Failed to verify your character"); embedBuilder.WithDescription("Did not find requested authentication key on your profile. Make sure you have saved *twice*, then do **/verify** again."); - DiscordLodestoneMapping.TryRemove(id, out _); - db.Remove(lodestoneAuth); } } else diff --git a/MareSynchronosServer/MareSynchronosServer/FileCleanupService.cs b/MareSynchronosServer/MareSynchronosServer/FileCleanupService.cs index 877394a..5cc8824 100644 --- a/MareSynchronosServer/MareSynchronosServer/FileCleanupService.cs +++ b/MareSynchronosServer/MareSynchronosServer/FileCleanupService.cs @@ -114,44 +114,7 @@ namespace MareSynchronosServer foreach (var user in usersToRemove) { - var lodestone = dbContext.LodeStoneAuth.SingleOrDefault(a => a.User.UID == user.UID); - - if (lodestone != null) - { - dbContext.Remove(lodestone); - } - - var auth = dbContext.Auth.Single(a => a.UserUID == user.UID); - - var userFiles = dbContext.Files.Where(f => f.Uploaded && f.Uploader.UID == user.UID).ToList(); - foreach (var file in userFiles) - { - var fi = new FileInfo(Path.Combine(_configuration["CacheDirectory"], file.Hash)); - if (fi.Exists) - { - MareMetrics.FilesTotalSize.Dec(fi.Length); - MareMetrics.FilesTotal.Dec(); - fi.Delete(); - } - } - - dbContext.Files.RemoveRange(userFiles); - - var ownPairData = dbContext.ClientPairs.Where(u => u.User.UID == user.UID).ToList(); - - dbContext.RemoveRange(ownPairData); - var otherPairData = dbContext.ClientPairs.Include(u => u.User) - .Where(u => u.OtherUser.UID == user.UID).ToList(); - - MareMetrics.Pairs.Dec(ownPairData.Count); - MareMetrics.PairsPaused.Dec(ownPairData.Count(c => c.IsPaused)); - MareMetrics.Pairs.Dec(otherPairData.Count); - MareMetrics.PairsPaused.Dec(otherPairData.Count(c => c.IsPaused)); - MareMetrics.UsersRegistered.Dec(); - - dbContext.RemoveRange(otherPairData); - dbContext.Remove(auth); - dbContext.Remove(user); + PurgeUser(user); } } @@ -164,6 +127,48 @@ namespace MareSynchronosServer } } + public static void PurgeUser(User user, MareDbContext dbContext, IConfiguration _configuration) + { + var lodestone = dbContext.LodeStoneAuth.SingleOrDefault(a => a.User.UID == user.UID); + + if (lodestone != null) + { + dbContext.Remove(lodestone); + } + + var auth = dbContext.Auth.Single(a => a.UserUID == user.UID); + + var userFiles = dbContext.Files.Where(f => f.Uploaded && f.Uploader.UID == user.UID).ToList(); + foreach (var file in userFiles) + { + var fi = new FileInfo(Path.Combine(_configuration["CacheDirectory"], file.Hash)); + if (fi.Exists) + { + MareMetrics.FilesTotalSize.Dec(fi.Length); + MareMetrics.FilesTotal.Dec(); + fi.Delete(); + } + } + + dbContext.Files.RemoveRange(userFiles); + + var ownPairData = dbContext.ClientPairs.Where(u => u.User.UID == user.UID).ToList(); + + dbContext.RemoveRange(ownPairData); + var otherPairData = dbContext.ClientPairs.Include(u => u.User) + .Where(u => u.OtherUser.UID == user.UID).ToList(); + + MareMetrics.Pairs.Dec(ownPairData.Count); + MareMetrics.PairsPaused.Dec(ownPairData.Count(c => c.IsPaused)); + MareMetrics.Pairs.Dec(otherPairData.Count); + MareMetrics.PairsPaused.Dec(otherPairData.Count(c => c.IsPaused)); + MareMetrics.UsersRegistered.Dec(); + + dbContext.RemoveRange(otherPairData); + dbContext.Remove(auth); + dbContext.Remove(user); + } + public Task StopAsync(CancellationToken cancellationToken) { _timer?.Change(Timeout.Infinite, 0);