void.cat/VoidCat/Services/Background/DeleteUnverifiedAccounts.cs

61 lines
2.4 KiB
C#
Raw Permalink Normal View History

using VoidCat.Database;
using VoidCat.Model;
using VoidCat.Services.Abstractions;
using VoidCat.Services.Files;
namespace VoidCat.Services.Background;
public class DeleteUnverifiedAccounts : BackgroundService
{
private readonly ILogger<DeleteUnverifiedAccounts> _logger;
2022-06-06 21:51:25 +00:00
private readonly IServiceScopeFactory _scopeFactory;
2022-06-06 21:51:25 +00:00
public DeleteUnverifiedAccounts(ILogger<DeleteUnverifiedAccounts> logger, IServiceScopeFactory scopeFactory)
{
_logger = logger;
2022-06-06 21:51:25 +00:00
_scopeFactory = scopeFactory;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
2022-06-06 21:51:25 +00:00
while (!stoppingToken.IsCancellationRequested)
{
2022-06-06 21:51:25 +00:00
try
{
2022-06-06 21:51:25 +00:00
using var scope = _scopeFactory.CreateScope();
var userStore = scope.ServiceProvider.GetRequiredService<IUserStore>();
var userUploads = scope.ServiceProvider.GetRequiredService<IUserUploadsStore>();
var fileStore = scope.ServiceProvider.GetRequiredService<FileStoreFactory>();
2022-09-06 21:32:22 +00:00
var fileInfoManager = scope.ServiceProvider.GetRequiredService<FileInfoManager>();
2022-06-06 21:51:25 +00:00
var accounts = await userStore.ListUsers(new(0, Int32.MaxValue));
2023-08-24 10:53:12 +00:00
await foreach (var account in accounts.Data.WithCancellation(stoppingToken))
{
2022-09-08 09:41:31 +00:00
if (!account.Flags.HasFlag(UserFlags.EmailVerified) &&
2022-06-06 21:51:25 +00:00
account.Created.AddDays(7) < DateTimeOffset.UtcNow)
{
_logger.LogInformation("Deleting un-verified account: {Id}", account.Id.ToBase58());
await userStore.Delete(account.Id);
var files = await userUploads.ListFiles(account.Id, new(0, Int32.MinValue));
// ReSharper disable once UseCancellationTokenForIAsyncEnumerable
2023-08-24 10:53:12 +00:00
await foreach (var file in files.Data)
2022-06-06 21:51:25 +00:00
{
2022-06-10 20:42:36 +00:00
await fileStore.DeleteFile(file);
await fileInfoManager.Delete(file);
2022-06-06 21:51:25 +00:00
}
}
}
}
2022-06-06 21:51:25 +00:00
catch (Exception ex)
{
_logger.LogError(ex, "Failed to delete unverified accounts");
}
finally
{
await Task.Delay(TimeSpan.FromHours(1), stoppingToken);
}
}
}
}