diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/SingleMigrationsEntityFrameworkCoreMySqlModule.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/SingleMigrationsEntityFrameworkCoreMySqlModule.cs index d9187af38..d09ca5c43 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/SingleMigrationsEntityFrameworkCoreMySqlModule.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/SingleMigrationsEntityFrameworkCoreMySqlModule.cs @@ -8,6 +8,8 @@ using System; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.Guids; using Volo.Abp.Modularity; +using Volo.Abp.OpenIddict.EntityFrameworkCore; +using Volo.Abp.OpenIddict.Tokens; namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql; @@ -64,6 +66,11 @@ public class SingleMigrationsEntityFrameworkCoreMySqlModule : AbpModule options.DefaultSequentialGuidType = SequentialGuidType.SequentialAsString; } }); + + context.Services.AddAbpDbContext(options => + { + options.AddRepository(); + }); } } } diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Volo/Abp/OpenIddict/Tokens/EfCoreMySqlOpenIddictTokenRepository.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Volo/Abp/OpenIddict/Tokens/EfCoreMySqlOpenIddictTokenRepository.cs new file mode 100644 index 000000000..c5385f120 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Volo/Abp/OpenIddict/Tokens/EfCoreMySqlOpenIddictTokenRepository.cs @@ -0,0 +1,39 @@ +using Microsoft.EntityFrameworkCore; +using OpenIddict.Abstractions; +using System; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.OpenIddict.Authorizations; +using Volo.Abp.OpenIddict.EntityFrameworkCore; + +namespace Volo.Abp.OpenIddict.Tokens; + +public class EfCoreMySqlOpenIddictTokenRepository : EfCoreOpenIddictTokenRepository +{ + public EfCoreMySqlOpenIddictTokenRepository( + IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + public async override Task PruneAsync(DateTime date, CancellationToken cancellationToken = default) + { + var dbContext = await GetDbContextAsync(); + var tokens = await (from token in dbContext.Set() + join authorization in dbContext.Set() + on token.AuthorizationId equals authorization.Id into tokenAuthorizations + from tokenAuthorization in tokenAuthorizations.DefaultIfEmpty() + where token.CreationDate < date + where (token.Status != OpenIddictConstants.Statuses.Inactive && token.Status != OpenIddictConstants.Statuses.Valid) || + (tokenAuthorization != null && tokenAuthorization.Status != OpenIddictConstants.Statuses.Valid) || + token.ExpirationDate < DateTime.UtcNow + select token) + .ToListAsync(GetCancellationToken(cancellationToken)); + + await DeleteManyAsync(tokens, cancellationToken: GetCancellationToken(cancellationToken)); + + return tokens.Count; + } +}