actually purge users on deletion
This commit is contained in:
@@ -78,9 +78,10 @@ namespace MareSynchronosServer.Discord
|
|||||||
var discordAuthedUser = await db.LodeStoneAuth.Include(u => u.User).FirstOrDefaultAsync(u => u.DiscordId == id);
|
var discordAuthedUser = await db.LodeStoneAuth.Include(u => u.User).FirstOrDefaultAsync(u => u.DiscordId == id);
|
||||||
if (discordAuthedUser != null && discordAuthedUser.User != null)
|
if (discordAuthedUser != null && discordAuthedUser.User != null)
|
||||||
{
|
{
|
||||||
logger.LogInformation("User will be purged on next round of deletions: " + discordAuthedUser.User);
|
logger.LogInformation("Purging user: " + discordAuthedUser.User.UID);
|
||||||
discordAuthedUser.User.LastLoggedIn = new DateTime(1900, 1, 1).ToUniversalTime();
|
|
||||||
db.Remove(discordAuthedUser);
|
FileCleanupService.PurgeUser(discordAuthedUser.User, db, configuration);
|
||||||
|
|
||||||
await db.SaveChangesAsync();
|
await db.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,8 +181,6 @@ namespace MareSynchronosServer.Discord
|
|||||||
{
|
{
|
||||||
embedBuilder.WithTitle("Failed to verify your character");
|
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.");
|
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
|
else
|
||||||
|
|||||||
@@ -114,44 +114,7 @@ namespace MareSynchronosServer
|
|||||||
|
|
||||||
foreach (var user in usersToRemove)
|
foreach (var user in usersToRemove)
|
||||||
{
|
{
|
||||||
var lodestone = dbContext.LodeStoneAuth.SingleOrDefault(a => a.User.UID == user.UID);
|
PurgeUser(user);
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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)
|
public Task StopAsync(CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
_timer?.Change(Timeout.Infinite, 0);
|
_timer?.Change(Timeout.Infinite, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user