//----------------------------------------------------------------------- // // Copyright (c) aliasvault. All rights reserved. // Licensed under the AGPLv3 license. See LICENSE.md file in the project root for full license information. // //----------------------------------------------------------------------- namespace AliasVault.TaskRunner.Tasks; using AliasServerDb; using Microsoft.EntityFrameworkCore; /// /// A maintenance task that deletes expired refresh tokens. /// public class RefreshTokenCleanupTask : IMaintenanceTask { private readonly ILogger _logger; private readonly IAliasServerDbContextFactory _dbContextFactory; /// /// Initializes a new instance of the class. /// /// The logger. /// The database context factory. public RefreshTokenCleanupTask( ILogger logger, IAliasServerDbContextFactory dbContextFactory) { _logger = logger; _dbContextFactory = dbContextFactory; } /// public string Name => "Refresh Token Cleanup"; /// public async Task ExecuteAsync(CancellationToken cancellationToken) { await using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken); var cutoffDate = DateTime.UtcNow; var deletedCount = await dbContext.AliasVaultUserRefreshTokens .Where(x => x.ExpireDate < cutoffDate) .ExecuteDeleteAsync(cancellationToken); if (deletedCount > 0) { _logger.LogInformation("Deleted {Count} expired refresh tokens", deletedCount); } } }