From 5c578506a7fe7746354ae05f4c954682e78ed1c9 Mon Sep 17 00:00:00 2001 From: maliming Date: Sat, 2 Apr 2022 16:14:12 +0800 Subject: [PATCH] Add `includeDetails`. --- .../ServerDataSeedContributor.cs | 211 +++++++++--------- .../Localization/OpenIddict/zh-Hans.json | 4 +- .../AbpOpenIddictApplicationStore.cs | 22 +- .../IOpenIddictApplicationRepository.cs | 14 +- .../AbpOpenIddictAuthorizationStore.cs | 34 +-- .../IOpenIddictAuthorizationRepository.cs | 22 +- .../Scopes/AbpOpenIddictScopeStore.cs | 22 +- .../Scopes/IOpenIddictScopeRepository.cs | 17 +- .../Tokens/AbpOpenIddictTokenStore.cs | 32 +-- .../Tokens/IOpenIddictTokenRepository.cs | 26 +-- .../OpenIddictApplicationRepository.cs | 39 ++-- .../OpenIddictAuthorizationRepository.cs | 65 ++++-- .../OpenIddictDbContext.cs | 2 + .../Scopes/OpenIddictScopeRepository.cs | 24 +- .../Tokens/OpenIddictTokenRepository.cs | 26 +-- .../MongoOpenIddictApplicationRepository.cs | 18 +- .../MongoOpenIddictAuthorizationRepository.cs | 24 +- .../MongoDB/IOpenIddictMongoDbContext.cs | 2 + .../MongoDB/OpenIddictMongoDbContext.cs | 2 + .../Scopes/MongoOpenIddictScopeRepository.cs | 22 +- .../Tokens/MongoOpenIddictTokenRepository.cs | 28 +-- .../Samples/SampleManager_Tests.cs | 21 -- .../Volo.Abp.OpenIddict.Domain.Tests.csproj | 9 +- .../OpenIddict}/OpenIddictDomainTestBase.cs | 3 - .../OpenIddict}/OpenIddictDomainTestModule.cs | 0 .../OpenIddictEntityFrameworkCoreTestBase.cs | 3 - .../Samples/SampleRepository_Tests.cs | 11 - ...penIddict.EntityFrameworkCore.Tests.csproj | 2 +- .../MongoDB/OpenIddictMongoDbTestBase.cs | 3 - .../MongoDB/Samples/SampleRepository_Tests.cs | 13 -- .../Volo.Abp.OpenIddict.MongoDB.Tests.csproj | 2 +- .../AbpOpenIddictTestData.cs | 16 ++ .../OpenIddictDataSeedContributor.cs | 159 ++++++++++++- .../Samples/SampleRepository_Tests.cs | 26 --- .../Volo.Abp.OpenIddict.TestBase.csproj | 2 +- 35 files changed, 523 insertions(+), 403 deletions(-) delete mode 100644 modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Samples/SampleManager_Tests.cs rename modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/{ => Volo/Abp/OpenIddict}/OpenIddictDomainTestBase.cs (57%) rename modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/{ => Volo/Abp/OpenIddict}/OpenIddictDomainTestModule.cs (100%) delete mode 100644 modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepository_Tests.cs delete mode 100644 modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/MongoDB/Samples/SampleRepository_Tests.cs create mode 100644 modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/AbpOpenIddictTestData.cs delete mode 100644 modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Samples/SampleRepository_Tests.cs diff --git a/modules/openiddict/app/OpenIddict.Demo.Server/EntityFrameworkCore/ServerDataSeedContributor.cs b/modules/openiddict/app/OpenIddict.Demo.Server/EntityFrameworkCore/ServerDataSeedContributor.cs index 2fdf65883a..db24014766 100644 --- a/modules/openiddict/app/OpenIddict.Demo.Server/EntityFrameworkCore/ServerDataSeedContributor.cs +++ b/modules/openiddict/app/OpenIddict.Demo.Server/EntityFrameworkCore/ServerDataSeedContributor.cs @@ -25,130 +25,127 @@ public class ServerDataSeedContributor : IDataSeedContributor, ITransientDepende public async Task SeedAsync(DataSeedContext context) { - using (_currentTenant.Change(null)) + if (await _scopeManager.FindByNameAsync("AbpAPI") == null) { - if (await _scopeManager.FindByNameAsync("AbpAPI") == null) + await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor() { - await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor() + Name = "AbpAPI", + DisplayName = "Abp API access", + DisplayNames = { - Name = "AbpAPI", - DisplayName = "Abp API access", - DisplayNames = - { - [CultureInfo.GetCultureInfo("zh-Hans")] = "演示 API 访问", - [CultureInfo.GetCultureInfo("tr")] = "API erişimi" - }, - Resources = - { - "AbpAPIResource" - } - }); - } + [CultureInfo.GetCultureInfo("zh-Hans")] = "演示 API 访问", + [CultureInfo.GetCultureInfo("tr")] = "API erişimi" + }, + Resources = + { + "AbpAPIResource" + } + }); + } - if (await _applicationManager.FindByClientIdAsync("AbpApp") == null) + if (await _applicationManager.FindByClientIdAsync("AbpApp") == null) + { + await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor { - await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor + ClientId = "AbpApp", + ClientSecret = "1q2w3e*", + ConsentType = OpenIddictConstants.ConsentTypes.Explicit, + DisplayName = "Abp Application", + PostLogoutRedirectUris = + { + new Uri("https://localhost:44302/signout-callback-oidc"), + new Uri("http://localhost:4200") + }, + RedirectUris = + { + new Uri("https://localhost:44302/signin-oidc"), + new Uri("http://localhost:4200") + }, + Permissions = { - ClientId = "AbpApp", - ClientSecret = "1q2w3e*", - ConsentType = OpenIddictConstants.ConsentTypes.Explicit, - DisplayName = "Abp Application", - PostLogoutRedirectUris = - { - new Uri("https://localhost:44302/signout-callback-oidc"), - new Uri("http://localhost:4200") - }, - RedirectUris = - { - new Uri("https://localhost:44302/signin-oidc"), - new Uri("http://localhost:4200") - }, - Permissions = - { - OpenIddictConstants.Permissions.Endpoints.Authorization, - OpenIddictConstants.Permissions.Endpoints.Token, - OpenIddictConstants.Permissions.Endpoints.Device, - OpenIddictConstants.Permissions.Endpoints.Introspection, - OpenIddictConstants.Permissions.Endpoints.Revocation, - OpenIddictConstants.Permissions.Endpoints.Logout, + OpenIddictConstants.Permissions.Endpoints.Authorization, + OpenIddictConstants.Permissions.Endpoints.Token, + OpenIddictConstants.Permissions.Endpoints.Device, + OpenIddictConstants.Permissions.Endpoints.Introspection, + OpenIddictConstants.Permissions.Endpoints.Revocation, + OpenIddictConstants.Permissions.Endpoints.Logout, - OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode, - OpenIddictConstants.Permissions.GrantTypes.Implicit, - OpenIddictConstants.Permissions.GrantTypes.Password, - OpenIddictConstants.Permissions.GrantTypes.RefreshToken, - OpenIddictConstants.Permissions.GrantTypes.DeviceCode, - OpenIddictConstants.Permissions.GrantTypes.ClientCredentials, + OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode, + OpenIddictConstants.Permissions.GrantTypes.Implicit, + OpenIddictConstants.Permissions.GrantTypes.Password, + OpenIddictConstants.Permissions.GrantTypes.RefreshToken, + OpenIddictConstants.Permissions.GrantTypes.DeviceCode, + OpenIddictConstants.Permissions.GrantTypes.ClientCredentials, - OpenIddictConstants.Permissions.ResponseTypes.Code, - OpenIddictConstants.Permissions.ResponseTypes.CodeIdToken, - OpenIddictConstants.Permissions.ResponseTypes.CodeIdTokenToken, - OpenIddictConstants.Permissions.ResponseTypes.CodeToken, - OpenIddictConstants.Permissions.ResponseTypes.IdToken, - OpenIddictConstants.Permissions.ResponseTypes.IdTokenToken, - OpenIddictConstants.Permissions.ResponseTypes.None, - OpenIddictConstants.Permissions.ResponseTypes.Token, + OpenIddictConstants.Permissions.ResponseTypes.Code, + OpenIddictConstants.Permissions.ResponseTypes.CodeIdToken, + OpenIddictConstants.Permissions.ResponseTypes.CodeIdTokenToken, + OpenIddictConstants.Permissions.ResponseTypes.CodeToken, + OpenIddictConstants.Permissions.ResponseTypes.IdToken, + OpenIddictConstants.Permissions.ResponseTypes.IdTokenToken, + OpenIddictConstants.Permissions.ResponseTypes.None, + OpenIddictConstants.Permissions.ResponseTypes.Token, - OpenIddictConstants.Permissions.Scopes.Roles, - OpenIddictConstants.Permissions.Scopes.Profile, - OpenIddictConstants.Permissions.Scopes.Email, - OpenIddictConstants.Permissions.Scopes.Address, - OpenIddictConstants.Permissions.Scopes.Phone, + OpenIddictConstants.Permissions.Scopes.Roles, + OpenIddictConstants.Permissions.Scopes.Profile, + OpenIddictConstants.Permissions.Scopes.Email, + OpenIddictConstants.Permissions.Scopes.Address, + OpenIddictConstants.Permissions.Scopes.Phone, - OpenIddictConstants.Permissions.Prefixes.Scope + "AbpAPI" - } - }); - } + OpenIddictConstants.Permissions.Prefixes.Scope + "AbpAPI" + } + }); + } - if (await _applicationManager.FindByClientIdAsync("AbpBlazorWASMApp") == null) + if (await _applicationManager.FindByClientIdAsync("AbpBlazorWASMApp") == null) + { + await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor { - await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor + ClientId = "AbpBlazorWASMApp", + ConsentType = OpenIddictConstants.ConsentTypes.Explicit, + DisplayName = "Abp Blazor WASM Application", + PostLogoutRedirectUris = + { + new Uri("https://localhost:44304/authentication/logout-callback") + }, + RedirectUris = + { + new Uri("https://localhost:44304/authentication/login-callback") + }, + Permissions = { - ClientId = "AbpBlazorWASMApp", - ConsentType = OpenIddictConstants.ConsentTypes.Explicit, - DisplayName = "Abp Blazor WASM Application", - PostLogoutRedirectUris = - { - new Uri("https://localhost:44304/authentication/logout-callback") - }, - RedirectUris = - { - new Uri("https://localhost:44304/authentication/login-callback") - }, - Permissions = - { - OpenIddictConstants.Permissions.Endpoints.Authorization, - OpenIddictConstants.Permissions.Endpoints.Token, - OpenIddictConstants.Permissions.Endpoints.Device, - OpenIddictConstants.Permissions.Endpoints.Introspection, - OpenIddictConstants.Permissions.Endpoints.Revocation, - OpenIddictConstants.Permissions.Endpoints.Logout, + OpenIddictConstants.Permissions.Endpoints.Authorization, + OpenIddictConstants.Permissions.Endpoints.Token, + OpenIddictConstants.Permissions.Endpoints.Device, + OpenIddictConstants.Permissions.Endpoints.Introspection, + OpenIddictConstants.Permissions.Endpoints.Revocation, + OpenIddictConstants.Permissions.Endpoints.Logout, - OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode, - OpenIddictConstants.Permissions.GrantTypes.Implicit, - OpenIddictConstants.Permissions.GrantTypes.Password, - OpenIddictConstants.Permissions.GrantTypes.RefreshToken, - OpenIddictConstants.Permissions.GrantTypes.DeviceCode, - OpenIddictConstants.Permissions.GrantTypes.ClientCredentials, + OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode, + OpenIddictConstants.Permissions.GrantTypes.Implicit, + OpenIddictConstants.Permissions.GrantTypes.Password, + OpenIddictConstants.Permissions.GrantTypes.RefreshToken, + OpenIddictConstants.Permissions.GrantTypes.DeviceCode, + OpenIddictConstants.Permissions.GrantTypes.ClientCredentials, - OpenIddictConstants.Permissions.ResponseTypes.Code, - OpenIddictConstants.Permissions.ResponseTypes.CodeIdToken, - OpenIddictConstants.Permissions.ResponseTypes.CodeIdTokenToken, - OpenIddictConstants.Permissions.ResponseTypes.CodeToken, - OpenIddictConstants.Permissions.ResponseTypes.IdToken, - OpenIddictConstants.Permissions.ResponseTypes.IdTokenToken, - OpenIddictConstants.Permissions.ResponseTypes.None, - OpenIddictConstants.Permissions.ResponseTypes.Token, + OpenIddictConstants.Permissions.ResponseTypes.Code, + OpenIddictConstants.Permissions.ResponseTypes.CodeIdToken, + OpenIddictConstants.Permissions.ResponseTypes.CodeIdTokenToken, + OpenIddictConstants.Permissions.ResponseTypes.CodeToken, + OpenIddictConstants.Permissions.ResponseTypes.IdToken, + OpenIddictConstants.Permissions.ResponseTypes.IdTokenToken, + OpenIddictConstants.Permissions.ResponseTypes.None, + OpenIddictConstants.Permissions.ResponseTypes.Token, - OpenIddictConstants.Permissions.Scopes.Roles, - OpenIddictConstants.Permissions.Scopes.Profile, - OpenIddictConstants.Permissions.Scopes.Email, - OpenIddictConstants.Permissions.Scopes.Address, - OpenIddictConstants.Permissions.Scopes.Phone, + OpenIddictConstants.Permissions.Scopes.Roles, + OpenIddictConstants.Permissions.Scopes.Profile, + OpenIddictConstants.Permissions.Scopes.Email, + OpenIddictConstants.Permissions.Scopes.Address, + OpenIddictConstants.Permissions.Scopes.Phone, - OpenIddictConstants.Permissions.Prefixes.Scope + "AbpAPI" - } - }); - } + OpenIddictConstants.Permissions.Prefixes.Scope + "AbpAPI" + } + }); } } } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Localization/OpenIddict/zh-Hans.json b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Localization/OpenIddict/zh-Hans.json index 1bd13659fb..f5e064555d 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Localization/OpenIddict/zh-Hans.json +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Localization/OpenIddict/zh-Hans.json @@ -3,10 +3,10 @@ "texts": { "UserLockedOut": "登录失败,用户账户已被锁定.请稍后再试.", "InvalidUserNameOrPassword": "用户名或密码错误!", - "LoginIsNotAllowed": "无法登录!妳的账号未激活或者需要验证邮箱地址/手机号.", + "LoginIsNotAllowed": "无法登录!你的账号未激活或者需要验证邮箱地址/手机号.", "InvalidUsername": "用户名或密码错误!", "InvalidAuthenticatorCode": "验证码无效!", - "TheTargetUserIsNotLinkedToYou": "目标用户未和妳有关联!", + "TheTargetUserIsNotLinkedToYou": "目标用户未和你有关联!", "TheOpenIDConnectRequestCannotBeRetrieved": "无法检索 OpenID Connect 请求.", "TheUserDetailsCannotBbeRetrieved" : "无法检索用户详细信息.", "TheApplicationDetailsCannotBeFound": "找不到应用详情.", diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs index 86acf80a14..c9430d9fad 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs @@ -24,11 +24,11 @@ namespace Volo.Abp.OpenIddict.Applications; public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase, IOpenIddictApplicationStore, IScopedDependency { protected IOpenIddictTokenRepository TokenRepository { get; } - + public AbpOpenIddictApplicationStore( IOpenIddictApplicationRepository repository, IUnitOfWorkManager unitOfWorkManager, - IMemoryCache cache, + IMemoryCache cache, IOpenIddictTokenRepository tokenRepository) : base(repository, unitOfWorkManager, cache) { @@ -51,7 +51,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase FindByClientIdAsync(string identifier, CancellationToken cancellationToken) { Check.NotNullOrEmpty(identifier, nameof(identifier)); - return await Repository.FindByClientIdAsync(identifier, cancellationToken: cancellationToken); + return await Repository.FindByClientIdAsync(identifier, includeDetails: true, cancellationToken: cancellationToken); } public async IAsyncEnumerable FindByPostLogoutRedirectUriAsync(string address, [EnumeratorCancellation] CancellationToken cancellationToken) { Check.NotNullOrEmpty(address, nameof(address)); - var applications = await Repository.FindByPostLogoutRedirectUriAsync(address, cancellationToken); + var applications = await Repository.FindByPostLogoutRedirectUriAsync(address, includeDetails: true, cancellationToken); foreach (var application in applications) { @@ -111,7 +111,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase GetClientIdAsync(OpenIddictApplication application, CancellationToken cancellationToken) @@ -400,7 +400,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase ListAsync(int? count, int? offset, [EnumeratorCancellation] CancellationToken cancellationToken) { - var applications = await Repository.ListAsync(count, offset, cancellationToken); + var applications = await Repository.ListAsync(count, offset, includeDetails: true, cancellationToken); foreach (var application in applications) { yield return application; @@ -411,7 +411,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase { - Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken); + Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default); - Task FindByClientIdAsync(string clientId, CancellationToken cancellationToken); + Task FindByClientIdAsync(string clientId, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindByPostLogoutRedirectUriAsync(string address, CancellationToken cancellationToken); + Task> FindByPostLogoutRedirectUriAsync(string address, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindByRedirectUriAsync(string address, CancellationToken cancellationToken); + Task> FindByRedirectUriAsync(string address, bool includeDetails = true, CancellationToken cancellationToken = default); - Task GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken); + Task GetAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken); + Task> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken); + Task> ListAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default); } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs index f1344db413..d80b84ea68 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs @@ -30,7 +30,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase FindAsync(string subject, string client, string status, string type, CancellationToken cancellationToken) + public virtual async IAsyncEnumerable FindAsync(string subject, string client, string status, string type, [EnumeratorCancellation] CancellationToken cancellationToken) { Check.NotNullOrEmpty(subject, nameof(subject)); Check.NotNullOrEmpty(client, nameof(client)); Check.NotNullOrEmpty(status, nameof(status)); Check.NotNullOrEmpty(type, nameof(type)); - var authorizations = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), status, type, cancellationToken); + var authorizations = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), status, type, includeDetails: true, cancellationToken); foreach (var authorization in authorizations) { yield return authorization; } } - public virtual async IAsyncEnumerable FindAsync(string subject, string client, string status, string type, ImmutableArray scopes, CancellationToken cancellationToken) + public virtual async IAsyncEnumerable FindAsync(string subject, string client, string status, string type, ImmutableArray scopes, [EnumeratorCancellation] CancellationToken cancellationToken) { Check.NotNullOrEmpty(subject, nameof(subject)); Check.NotNullOrEmpty(client, nameof(client)); Check.NotNullOrEmpty(status, nameof(status)); Check.NotNullOrEmpty(type, nameof(type)); - var authorizations = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), status, type, cancellationToken); + var authorizations = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), status, type, includeDetails: true, cancellationToken); foreach (var authorization in authorizations) { @@ -135,7 +135,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase FindBySubjectAsync(string subject, [EnumeratorCancellation] CancellationToken cancellationToken) { Check.NotNullOrEmpty(subject, nameof(subject)); - var authorizations = await Repository.FindBySubjectAsync(subject, cancellationToken); + var authorizations = await Repository.FindBySubjectAsync(subject, includeDetails: true, cancellationToken); foreach (var authorization in authorizations) { yield return authorization; @@ -173,7 +173,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase GetCreationDateAsync(OpenIddictAuthorization authorization, CancellationToken cancellationToken) @@ -295,7 +295,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase ListAsync(int? count, int? offset, [EnumeratorCancellation] CancellationToken cancellationToken) { - var authorizations = await Repository.ListAsync(count, offset, cancellationToken); + var authorizations = await Repository.ListAsync(count, offset, includeDetails: true, cancellationToken); foreach (var authorization in authorizations) { yield return authorization; @@ -304,7 +304,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase ListAsync(Func, TState, IQueryable> query, TState state, [EnumeratorCancellation] CancellationToken cancellationToken) { - var authorizations = await Repository.ListAsync(query, state, cancellationToken); + var authorizations = await Repository.ListAsync(query, state, includeDetails: true, cancellationToken); foreach (var authorization in authorizations) { yield return authorization; @@ -321,7 +321,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase { - Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken); + Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default); - Task> FindAsync(string subject, Guid client, CancellationToken cancellationToken); + Task> FindAsync(string subject, Guid client, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken); + Task> FindAsync(string subject, Guid client, string status, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindAsync(string subject, Guid client, string status, string type, CancellationToken cancellationToken); + Task> FindAsync(string subject, Guid client, string status, string type, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindByApplicationIdAsync(Guid applicationId, CancellationToken cancellationToken); + Task> FindByApplicationIdAsync(Guid applicationId, bool includeDetails = true, CancellationToken cancellationToken = default); - Task FindByIdAsync(Guid id, CancellationToken cancellationToken); + Task FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindBySubjectAsync(string subject, CancellationToken cancellationToken); + Task> FindBySubjectAsync(string subject, bool includeDetails = true, CancellationToken cancellationToken = default); - Task GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken); + Task GetAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken); + Task> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken); + Task> ListAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken); + Task> GetPruneListAsync(DateTime date, int count, bool includeDetails = true, CancellationToken cancellationToken = default); } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeStore.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeStore.cs index 35c2636ab4..6787226195 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeStore.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeStore.cs @@ -60,17 +60,17 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase FindByNameAsync(string name, CancellationToken cancellationToken) { Check.NotNullOrEmpty(name, nameof(name)); - return await Repository.FindByNameAsync(name, cancellationToken); + return await Repository.FindByNameAsync(name, includeDetails: true, cancellationToken); } - public virtual async IAsyncEnumerable FindByNamesAsync(ImmutableArray names, CancellationToken cancellationToken) + public virtual async IAsyncEnumerable FindByNamesAsync(ImmutableArray names, [EnumeratorCancellation] CancellationToken cancellationToken) { Check.NotNullOrEmpty(names, nameof(names)); foreach (var name in names) @@ -78,18 +78,18 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase FindByResourceAsync(string resource, CancellationToken cancellationToken) + public virtual async IAsyncEnumerable FindByResourceAsync(string resource, [EnumeratorCancellation] CancellationToken cancellationToken) { Check.NotNullOrEmpty(resource, nameof(resource)); - var scopes = await Repository.FindByResourceAsync(resource, cancellationToken); + var scopes = await Repository.FindByResourceAsync(resource, includeDetails: true, cancellationToken); foreach (var scope in scopes) { var resources = await GetResourcesAsync(scope, cancellationToken); @@ -102,7 +102,7 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) { - return await Repository.GetAsync(query, state, cancellationToken); + return await Repository.GetAsync(query, state, includeDetails: true, cancellationToken); } public virtual ValueTask GetDescriptionAsync(OpenIddictScope scope, CancellationToken cancellationToken) @@ -289,7 +289,7 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase ListAsync(int? count, int? offset, [EnumeratorCancellation] CancellationToken cancellationToken) { - var scopes = await Repository.ListAsync(count, offset, cancellationToken); + var scopes = await Repository.ListAsync(count, offset, includeDetails: true, cancellationToken); foreach (var scope in scopes) { yield return scope; @@ -300,7 +300,7 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase { - Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken); + Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default); - Task FindByIdAsync(Guid id, CancellationToken cancellationToken); + Task FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default); - Task FindByNameAsync(string name, CancellationToken cancellationToken); + Task FindByNameAsync(string name, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindByNamesAsync(string[] names, CancellationToken cancellationToken); + Task> FindByNamesAsync(string[] names, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindByResourceAsync(string resource, CancellationToken cancellationToken); + Task> FindByResourceAsync(string resource, bool includeDetails = true, CancellationToken cancellationToken = default); - Task GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken); + Task GetAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken); - - Task> ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken); + Task> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default); + Task> ListAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default); } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Tokens/AbpOpenIddictTokenStore.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Tokens/AbpOpenIddictTokenStore.cs index 3ee5ff46f9..b17c1a79ad 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Tokens/AbpOpenIddictTokenStore.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Tokens/AbpOpenIddictTokenStore.cs @@ -67,20 +67,20 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase FindAsync(string subject, string client, string status, CancellationToken cancellationToken) + public virtual async IAsyncEnumerable FindAsync(string subject, string client, string status, [EnumeratorCancellation] CancellationToken cancellationToken) { Check.NotNullOrEmpty(subject, nameof(subject)); Check.NotNullOrEmpty(client, nameof(client)); Check.NotNullOrEmpty(status, nameof(status)); - var tokens = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), status, cancellationToken); + var tokens = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), status, includeDetails: true, cancellationToken); foreach (var token in tokens) { yield return token; @@ -94,7 +94,7 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase FindByAuthorizationIdAsync(string identifier, CancellationToken cancellationToken) + public virtual async IAsyncEnumerable FindByAuthorizationIdAsync(string identifier, [EnumeratorCancellation] CancellationToken cancellationToken) { Check.NotNullOrEmpty(identifier, nameof(identifier)); - var tokens = await Repository.FindByAuthorizationIdAsync(ConvertIdentifierFromString(identifier), cancellationToken); + var tokens = await Repository.FindByAuthorizationIdAsync(ConvertIdentifierFromString(identifier), includeDetails: true, cancellationToken); foreach (var token in tokens) { yield return token; @@ -127,21 +127,21 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase FindByReferenceIdAsync(string identifier, CancellationToken cancellationToken) { Check.NotNullOrEmpty(identifier, nameof(identifier)); - return await Repository.FindByReferenceIdAsync(identifier, cancellationToken); + return await Repository.FindByReferenceIdAsync(identifier, includeDetails: true, cancellationToken); } - public virtual async IAsyncEnumerable FindBySubjectAsync(string subject, CancellationToken cancellationToken) + public virtual async IAsyncEnumerable FindBySubjectAsync(string subject, [EnumeratorCancellation] CancellationToken cancellationToken) { Check.NotNullOrEmpty(subject, nameof(subject)); - var tokens = await Repository.FindBySubjectAsync(subject, cancellationToken); + var tokens = await Repository.FindBySubjectAsync(subject, includeDetails: true, cancellationToken); foreach (var token in tokens) { yield return token; @@ -161,7 +161,7 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase GetAuthorizationIdAsync(OpenIddictToken token, CancellationToken cancellationToken) @@ -296,18 +296,18 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase ListAsync(int? count, int? offset, [EnumeratorCancellation] CancellationToken cancellationToken) { - var tokens = await Repository.ListAsync(count, offset, cancellationToken); + var tokens = await Repository.ListAsync(count, offset, includeDetails: true, cancellationToken); foreach (var token in tokens) { yield return token; } } - public virtual async IAsyncEnumerable ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async IAsyncEnumerable ListAsync(Func, TState, IQueryable> query, TState state, [EnumeratorCancellation] CancellationToken cancellationToken) { Check.NotNull(query, nameof(query)); - var tokens = await Repository.ListAsync(query, state, cancellationToken); + var tokens = await Repository.ListAsync(query, state, includeDetails: true, cancellationToken); foreach (var token in tokens) { yield return token; @@ -324,7 +324,7 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase { - Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken); + Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default); - Task> FindAsync(string subject, Guid client, CancellationToken cancellationToken); + Task> FindAsync(string subject, Guid client, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken); + Task> FindAsync(string subject, Guid client, string status, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindAsync(string subject, Guid client, string status, string type, CancellationToken cancellationToken); + Task> FindAsync(string subject, Guid client, string status, string type, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindByApplicationIdAsync(Guid applicationId, CancellationToken cancellationToken); + Task> FindByApplicationIdAsync(Guid applicationId, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindByAuthorizationIdAsync(Guid authorizationId, CancellationToken cancellationToken); + Task> FindByAuthorizationIdAsync(Guid authorizationId, bool includeDetails = true, CancellationToken cancellationToken = default); - Task FindByIdAsync(Guid id, CancellationToken cancellationToken); + Task FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default); - Task FindByReferenceIdAsync(string referenceId, CancellationToken cancellationToken); + Task FindByReferenceIdAsync(string referenceId, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> FindBySubjectAsync(string subject, CancellationToken cancellationToken); + Task> FindBySubjectAsync(string subject, bool includeDetails = true, CancellationToken cancellationToken = default); - Task GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken); + Task GetAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken); + Task> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken); + Task> ListAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default); - Task> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken); + Task> GetPruneListAsync(DateTime date, int count, bool includeDetails = true, CancellationToken cancellationToken = default); } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationRepository.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationRepository.cs index c72af72709..451cb1692d 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationRepository.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationRepository.cs @@ -18,43 +18,54 @@ public class OpenIddictApplicationRepository : EfCoreRepository CountAsync(Func, IQueryable> query, CancellationToken cancellationToken) + public virtual async Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default) { - return await query(await GetQueryableAsync()).LongCountAsync(cancellationToken); + return await query(await GetDbSetAsync()).LongCountAsync(cancellationToken); } - public virtual async Task FindByClientIdAsync(string clientId, CancellationToken cancellationToken) + public virtual async Task FindByClientIdAsync(string clientId, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).FirstOrDefaultAsync(x => x.ClientId == clientId, cancellationToken); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .FirstOrDefaultAsync(x => x.ClientId == clientId, cancellationToken); } - public virtual async Task> FindByPostLogoutRedirectUriAsync(string address, CancellationToken cancellationToken) + public virtual async Task> FindByPostLogoutRedirectUriAsync(string address, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).Where(x => x.PostLogoutRedirectUris.Contains(address)).ToListAsync(cancellationToken); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .Where(x => x.PostLogoutRedirectUris.Contains(address)).ToListAsync(cancellationToken); } - public virtual async Task> FindByRedirectUriAsync(string address, CancellationToken cancellationToken) + public virtual async Task> FindByRedirectUriAsync(string address, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).Where(x => x.RedirectUris.Contains(address)).ToListAsync(cancellationToken); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .Where(x => x.RedirectUris.Contains(address)).ToListAsync(cancellationToken); } - public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await query(await GetQueryableAsync(), state).FirstOrDefaultAsync(cancellationToken); + return await query((await GetDbSetAsync()) + .IncludeDetails(includeDetails), state) + .FirstOrDefaultAsync(cancellationToken); } - public virtual async Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken) + public virtual async Task> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()) + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) .OrderBy(x => x.Id) .SkipIf>(offset.HasValue, offset.Value) .TakeIf>(count.HasValue, count.Value) .ToListAsync(cancellationToken); } - public virtual async Task> ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task> ListAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await query(await GetQueryableAsync(), state).ToListAsync(cancellationToken); + return await query((await GetDbSetAsync()) + .IncludeDetails(includeDetails), state) + .ToListAsync(cancellationToken); } [Obsolete("Use WithDetailsAsync method.")] diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Authorizations/OpenIddictAuthorizationRepository.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Authorizations/OpenIddictAuthorizationRepository.cs index 0cad1326d5..09bfec1385 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Authorizations/OpenIddictAuthorizationRepository.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Authorizations/OpenIddictAuthorizationRepository.cs @@ -19,49 +19,69 @@ public class OpenIddictAuthorizationRepository : EfCoreRepository CountAsync(Func, IQueryable> query, CancellationToken cancellationToken) + public virtual async Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default) { return await query(await GetQueryableAsync()).LongCountAsync(cancellationToken); } - public virtual async Task> FindAsync(string subject, Guid client, CancellationToken cancellationToken) + public virtual async Task> FindAsync(string subject, Guid client, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).Where(x => x.Subject == subject && x.ApplicationId == client).ToListAsync(cancellationToken); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .Where(x => x.Subject == subject && x.ApplicationId == client) + .ToListAsync(cancellationToken); } - public virtual async Task> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken) + public virtual async Task> FindAsync(string subject, Guid client, string status, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).Where(x => x.Subject == subject && x.Status == status && x.ApplicationId == client).ToListAsync(cancellationToken); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .Where(x => x.Subject == subject && x.Status == status && x.ApplicationId == client) + .ToListAsync(cancellationToken); } - public virtual async Task> FindAsync(string subject, Guid client, string status, string type, CancellationToken cancellationToken) + public virtual async Task> FindAsync(string subject, Guid client, string status, string type, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).Where(x => x.Subject == subject && x.Status == status && x.Type == type && x.ApplicationId == client).ToListAsync(cancellationToken); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .Where(x => x.Subject == subject && x.Status == status && x.Type == type && x.ApplicationId == client) + .ToListAsync(cancellationToken); } - public virtual async Task> FindByApplicationIdAsync(Guid applicationId, CancellationToken cancellationToken) + public virtual async Task> FindByApplicationIdAsync(Guid applicationId, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).Where(x => x.ApplicationId == applicationId).ToListAsync(cancellationToken); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .Where(x => x.ApplicationId == applicationId) + .ToListAsync(cancellationToken); } - public virtual async Task FindByIdAsync(Guid id, CancellationToken cancellationToken) + public virtual async Task FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).FirstOrDefaultAsync(x => x.Id == id, cancellationToken); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .FirstOrDefaultAsync(x => x.Id == id, cancellationToken); } - public virtual async Task> FindBySubjectAsync(string subject, CancellationToken cancellationToken) + public virtual async Task> FindBySubjectAsync(string subject, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).Where(x => x.Subject == subject).ToListAsync(cancellationToken); + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) + .Where(x => x.Subject == subject) + .ToListAsync(cancellationToken); } - public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await query(await GetQueryableAsync(), state).FirstOrDefaultAsync(cancellationToken); + return await query((await GetDbSetAsync()) + .IncludeDetails(includeDetails), state) + .FirstOrDefaultAsync(cancellationToken); } - public virtual async Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken) + public virtual async Task> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default) { - var query = (await GetQueryableAsync()) + var query = (await GetDbSetAsync()) + .IncludeDetails(includeDetails) .OrderBy(authorization => authorization.Id!) .AsTracking(); @@ -78,14 +98,17 @@ public class OpenIddictAuthorizationRepository : EfCoreRepository> ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task> ListAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await query(await GetQueryableAsync(), state).ToListAsync(cancellationToken); + return await query((await GetDbSetAsync()) + .IncludeDetails(includeDetails), state) + .ToListAsync(cancellationToken); } - public virtual async Task> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken) + public virtual async Task> GetPruneListAsync(DateTime date, int count, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()) + return await (await GetDbSetAsync()) + .IncludeDetails(includeDetails) .Where(x => x.CreationDate < date) .Where(x => x.Status != OpenIddictConstants.Statuses.Valid || (x.Type == OpenIddictConstants.AuthorizationTypes.AdHoc && !x.Tokens.Any())) .OrderBy(x => x.Id) diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/EntityFrameworkCore/OpenIddictDbContext.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/EntityFrameworkCore/OpenIddictDbContext.cs index db78c2109a..bade789c75 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/EntityFrameworkCore/OpenIddictDbContext.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/EntityFrameworkCore/OpenIddictDbContext.cs @@ -1,6 +1,7 @@ using Microsoft.EntityFrameworkCore; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.MultiTenancy; using Volo.Abp.OpenIddict.Applications; using Volo.Abp.OpenIddict.Authorizations; using Volo.Abp.OpenIddict.Scopes; @@ -8,6 +9,7 @@ using Volo.Abp.OpenIddict.Tokens; namespace Volo.Abp.OpenIddict.EntityFrameworkCore; +[IgnoreMultiTenancy] [ConnectionStringName(AbpOpenIddictDbProperties.ConnectionStringName)] public class OpenIddictDbContext : AbpDbContext, IOpenIddictDbContext { diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Scopes/OpenIddictScopeRepository.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Scopes/OpenIddictScopeRepository.cs index da2bf44bdb..b7bae9af4e 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Scopes/OpenIddictScopeRepository.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Scopes/OpenIddictScopeRepository.cs @@ -18,37 +18,37 @@ public class OpenIddictScopeRepository : EfCoreRepository CountAsync(Func, IQueryable> query, CancellationToken cancellationToken) + public virtual async Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default) { return await query(await GetQueryableAsync()).LongCountAsync(cancellationToken); } - public virtual async Task FindByIdAsync(Guid id, CancellationToken cancellationToken) + public virtual async Task FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).FirstOrDefaultAsync(x => x.Id == id, cancellationToken: cancellationToken); + return await (await GetQueryableAsync()).FirstOrDefaultAsync(x => x.Id == id, cancellationToken); } - public virtual async Task FindByNameAsync(string name, CancellationToken cancellationToken) + public virtual async Task FindByNameAsync(string name, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).FirstOrDefaultAsync(x => x.Name == name, cancellationToken: cancellationToken); + return await (await GetQueryableAsync()).FirstOrDefaultAsync(x => x.Name == name, cancellationToken); } - public virtual async Task> FindByNamesAsync(string[] names, CancellationToken cancellationToken) + public virtual async Task> FindByNamesAsync(string[] names, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).Where(x => names.Contains(x.Name)).ToListAsync(cancellationToken: cancellationToken); + return await (await GetQueryableAsync()).Where(x => names.Contains(x.Name)).ToListAsync(cancellationToken); } - public virtual async Task> FindByResourceAsync(string resource, CancellationToken cancellationToken) + public virtual async Task> FindByResourceAsync(string resource, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetQueryableAsync()).Where(x => x.Resources.Contains(resource)).ToListAsync(cancellationToken: cancellationToken); + return await (await GetQueryableAsync()).Where(x => x.Resources.Contains(resource)).ToListAsync(cancellationToken); } - public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { return await query(await GetQueryableAsync(), state).FirstOrDefaultAsync(cancellationToken); } - public virtual async Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken) + public virtual async Task> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()) .OrderBy(x => x.Id) @@ -57,7 +57,7 @@ public class OpenIddictScopeRepository : EfCoreRepository> ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task> ListAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { return await query(await GetQueryableAsync(), state).ToListAsync(cancellationToken); } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Tokens/OpenIddictTokenRepository.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Tokens/OpenIddictTokenRepository.cs index 40cd0cd3b9..ae595f1ec2 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Tokens/OpenIddictTokenRepository.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Tokens/OpenIddictTokenRepository.cs @@ -20,57 +20,57 @@ public class OpenIddictTokenRepository : EfCoreRepository CountAsync(Func, IQueryable> query, CancellationToken cancellationToken) + public virtual async Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()).LongCountAsync(cancellationToken); } - public virtual async Task> FindAsync(string subject, Guid client, CancellationToken cancellationToken) + public virtual async Task> FindAsync(string subject, Guid client, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()).Where(x => x.Subject == subject && x.ApplicationId == client).ToListAsync(cancellationToken); } - public virtual async Task> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken) + public virtual async Task> FindAsync(string subject, Guid client, string status, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()).Where(x => x.Subject == subject && x.ApplicationId == client && x.Status == status).ToListAsync(cancellationToken); } - public virtual async Task> FindAsync(string subject, Guid client, string status, string type, CancellationToken cancellationToken) + public virtual async Task> FindAsync(string subject, Guid client, string status, string type, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()).Where(x => x.Subject == subject && x.ApplicationId == client && x.Status == status && x.Type == type).ToListAsync(cancellationToken); } - public virtual async Task> FindByApplicationIdAsync(Guid applicationId, CancellationToken cancellationToken) + public virtual async Task> FindByApplicationIdAsync(Guid applicationId, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()).Where(x => x.ApplicationId == applicationId).ToListAsync(cancellationToken); } - public virtual async Task> FindByAuthorizationIdAsync(Guid authorizationId, CancellationToken cancellationToken) + public virtual async Task> FindByAuthorizationIdAsync(Guid authorizationId, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()).Where(x => x.AuthorizationId == authorizationId).ToListAsync(cancellationToken); } - public virtual async Task FindByIdAsync(Guid id, CancellationToken cancellationToken) + public virtual async Task FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()).FirstOrDefaultAsync(x => x.Id == id, cancellationToken); } - public virtual async Task FindByReferenceIdAsync(string referenceId, CancellationToken cancellationToken) + public virtual async Task FindByReferenceIdAsync(string referenceId, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()).FirstOrDefaultAsync(x => x.ReferenceId == referenceId, cancellationToken); } - public virtual async Task> FindBySubjectAsync(string subject, CancellationToken cancellationToken) + public virtual async Task> FindBySubjectAsync(string subject, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()).Where(x => x.Subject == subject).ToListAsync(cancellationToken); } - public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { return await query(await GetQueryableAsync(), state).FirstOrDefaultAsync(cancellationToken); } - public virtual async Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken) + public virtual async Task> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetQueryableAsync()) .OrderBy(x => x.Id) @@ -79,12 +79,12 @@ public class OpenIddictTokenRepository : EfCoreRepository> ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task> ListAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { return await query(await GetQueryableAsync(), state).ToListAsync(cancellationToken); } - public async Task> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken) + public async Task> GetPruneListAsync(DateTime date, int count, bool includeDetails = true, CancellationToken cancellationToken = default) { //TODO: Test & Improve? return await (from token in await GetQueryableAsync() diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Applications/MongoOpenIddictApplicationRepository.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Applications/MongoOpenIddictApplicationRepository.cs index c36a3b50df..4f7f11f6e4 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Applications/MongoOpenIddictApplicationRepository.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Applications/MongoOpenIddictApplicationRepository.cs @@ -17,35 +17,35 @@ public class MongoOpenIddictApplicationRepository : MongoDbRepository CountAsync(Func, IQueryable> query, CancellationToken cancellationToken) + public async Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default) { return await query(await GetMongoQueryableAsync(cancellationToken)) .As>() .LongCountAsync(GetCancellationToken(cancellationToken)); } - public async Task FindByClientIdAsync(string clientId, CancellationToken cancellationToken) + public async Task FindByClientIdAsync(string clientId, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)) - .FirstOrDefaultAsync(x => x.ClientId == clientId, cancellationToken: GetCancellationToken(cancellationToken)); + .FirstOrDefaultAsync(x => x.ClientId == clientId, cancellationToken); } - public async Task> FindByPostLogoutRedirectUriAsync(string address, CancellationToken cancellationToken) + public async Task> FindByPostLogoutRedirectUriAsync(string address, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.PostLogoutRedirectUris.Contains(address)).ToListAsync(GetCancellationToken(cancellationToken)); } - public async Task> FindByRedirectUriAsync(string address, CancellationToken cancellationToken) + public async Task> FindByRedirectUriAsync(string address, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.RedirectUris.Contains(address)).ToListAsync(GetCancellationToken(cancellationToken)); } - public async Task GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public async Task GetAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { return await query(await GetMongoQueryableAsync(cancellationToken), state).As>().FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } - public async Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken) + public async Task> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)) .OrderBy(x => x.Id) @@ -55,8 +55,8 @@ public class MongoOpenIddictApplicationRepository : MongoDbRepository> ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public async Task> ListAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { return await query(await GetMongoQueryableAsync(cancellationToken), state).As>().ToListAsync(GetCancellationToken(cancellationToken)); } -} \ No newline at end of file +} diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Authorizations/MongoOpenIddictAuthorizationRepository.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Authorizations/MongoOpenIddictAuthorizationRepository.cs index de174f345f..e8ed66e782 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Authorizations/MongoOpenIddictAuthorizationRepository.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Authorizations/MongoOpenIddictAuthorizationRepository.cs @@ -18,53 +18,53 @@ public class MongoOpenIddictAuthorizationRepository : MongoDbRepository CountAsync(Func, IQueryable> query, CancellationToken cancellationToken) + public virtual async Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default) { return await query(await GetMongoQueryableAsync(cancellationToken)).As>().LongCountAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> FindAsync(string subject, Guid client, CancellationToken cancellationToken) + public virtual async Task> FindAsync(string subject, Guid client, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.Subject == subject && x.ApplicationId == client) .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken) + public virtual async Task> FindAsync(string subject, Guid client, string status, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.Subject == subject && x.Status == status && x.ApplicationId == client) .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> FindAsync(string subject, Guid client, string status, string type, CancellationToken cancellationToken) + public virtual async Task> FindAsync(string subject, Guid client, string status, string type, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.Subject == subject && x.Status == status && x.Type == type && x.ApplicationId == client) .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> FindByApplicationIdAsync(Guid applicationId, CancellationToken cancellationToken) + public virtual async Task> FindByApplicationIdAsync(Guid applicationId, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.ApplicationId == applicationId).ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task FindByIdAsync(Guid id, CancellationToken cancellationToken) + public virtual async Task FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)).FirstOrDefaultAsync(x => x.Id == id, GetCancellationToken(cancellationToken)); } - public virtual async Task> FindBySubjectAsync(string subject, CancellationToken cancellationToken) + public virtual async Task> FindBySubjectAsync(string subject, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Subject == subject).ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { return await query(await GetMongoQueryableAsync(cancellationToken), state).As>().FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken) + public virtual async Task> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)) .OrderBy(authorization => authorization.Id!) @@ -73,12 +73,12 @@ public class MongoOpenIddictAuthorizationRepository : MongoDbRepository>().ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task> ListAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { return await query(await GetMongoQueryableAsync(cancellationToken), state).As>().ToListAsync(cancellationToken); } - public virtual async Task> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken) + public virtual async Task> GetPruneListAsync(DateTime date, int count, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)) .Where(x => x.CreationDate < date) @@ -87,4 +87,4 @@ public class MongoOpenIddictAuthorizationRepository : MongoDbRepository CountAsync(Func, IQueryable> query, CancellationToken cancellationToken) + public virtual async Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default) { return await query(await GetMongoQueryableAsync(cancellationToken)).As>().LongCountAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task FindByIdAsync(Guid id, CancellationToken cancellationToken) + public virtual async Task FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetMongoQueryableAsync(cancellationToken)).FirstOrDefaultAsync(x => x.Id == id, cancellationToken: GetCancellationToken(cancellationToken)); + return await (await GetMongoQueryableAsync(cancellationToken)).FirstOrDefaultAsync(x => x.Id == id, GetCancellationToken(cancellationToken)); } - public virtual async Task FindByNameAsync(string name, CancellationToken cancellationToken) + public virtual async Task FindByNameAsync(string name, bool includeDetails = true, CancellationToken cancellationToken = default) { - return await (await GetMongoQueryableAsync(cancellationToken)).FirstOrDefaultAsync(x => x.Name == name, cancellationToken: GetCancellationToken(cancellationToken)); + return await (await GetMongoQueryableAsync(cancellationToken)).FirstOrDefaultAsync(x => x.Name == name, GetCancellationToken(cancellationToken)); } - public virtual async Task> FindByNamesAsync(string[] names, CancellationToken cancellationToken) + public virtual async Task> FindByNamesAsync(string[] names, bool includeDetails = true, CancellationToken cancellationToken = default) { return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => names.Contains(x.Name)) .As>() .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); } - public virtual async Task> FindByResourceAsync(string resource, CancellationToken cancellationToken) + public virtual async Task> FindByResourceAsync(string resource, bool includeDetails = true, CancellationToken cancellationToken = default) { return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => x.Resources.Contains(resource)) .As>() .ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); } - public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { return await query(await GetMongoQueryableAsync(cancellationToken), state).As>().FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken) + public virtual async Task> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default) { return await Queryable.OrderBy((await GetMongoQueryableAsync(cancellationToken)), x => x.Id) .SkipIf>(offset.HasValue, offset.Value) @@ -60,8 +60,8 @@ public class MongoOpenIddictScopeRepository : MongoDbRepository> ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task> ListAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { return await query(await GetMongoQueryableAsync(cancellationToken), state).As>().ToListAsync(GetCancellationToken(cancellationToken)); } -} \ No newline at end of file +} diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs index f5d81f92dd..bf6f76aef3 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs @@ -19,69 +19,69 @@ public class MongoOpenIddictTokenRepository : MongoDbRepository CountAsync(Func, IQueryable> query, CancellationToken cancellationToken) + public virtual async Task CountAsync(Func, IQueryable> query, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)).LongCountAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> FindAsync(string subject, Guid client, CancellationToken cancellationToken) + public virtual async Task> FindAsync(string subject, Guid client, bool includeDetails = true, CancellationToken cancellationToken = default) { return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => x.Subject == subject && x.ApplicationId == client) .As>() .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken) + public virtual async Task> FindAsync(string subject, Guid client, string status, bool includeDetails = true, CancellationToken cancellationToken = default) { return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => x.Subject == subject && x.ApplicationId == client && x.Status == status) .As>() .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> FindAsync(string subject, Guid client, string status, string type, CancellationToken cancellationToken) + public virtual async Task> FindAsync(string subject, Guid client, string status, string type, bool includeDetails = true, CancellationToken cancellationToken = default) { return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => x.Subject == subject && x.ApplicationId == client && x.Status == status && x.Type == type) .As>() .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> FindByApplicationIdAsync(Guid applicationId, CancellationToken cancellationToken) + public virtual async Task> FindByApplicationIdAsync(Guid applicationId, bool includeDetails = true, CancellationToken cancellationToken = default) { return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => x.ApplicationId == applicationId) .As>() .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> FindByAuthorizationIdAsync(Guid authorizationId, CancellationToken cancellationToken) + public virtual async Task> FindByAuthorizationIdAsync(Guid authorizationId, bool includeDetails = true, CancellationToken cancellationToken = default) { return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => x.AuthorizationId == authorizationId) .As>() .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task FindByIdAsync(Guid id, CancellationToken cancellationToken) + public virtual async Task FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)).FirstOrDefaultAsync(x => x.Id == id, GetCancellationToken(cancellationToken)); } - public virtual async Task FindByReferenceIdAsync(string referenceId, CancellationToken cancellationToken) + public virtual async Task FindByReferenceIdAsync(string referenceId, bool includeDetails = true, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)).FirstOrDefaultAsync(x => x.ReferenceId == referenceId, GetCancellationToken(cancellationToken)); } - public virtual async Task> FindBySubjectAsync(string subject, CancellationToken cancellationToken) + public virtual async Task> FindBySubjectAsync(string subject, bool includeDetails = true, CancellationToken cancellationToken = default) { return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => x.Subject == subject) .As>() .ToListAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task GetAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { return await query(await GetMongoQueryableAsync(cancellationToken), state).As>().FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); } - public virtual async Task> ListAsync(int? count, int? offset, CancellationToken cancellationToken) + public virtual async Task> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default) { return await Queryable.OrderBy((await GetMongoQueryableAsync(cancellationToken)), x => x.Id) .SkipIf>(offset.HasValue, offset.Value) @@ -90,12 +90,12 @@ public class MongoOpenIddictTokenRepository : MongoDbRepository> ListAsync(Func, TState, IQueryable> query, TState state, CancellationToken cancellationToken) + public virtual async Task> ListAsync(Func, TState, IQueryable> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default) { return await query(await GetMongoQueryableAsync(cancellationToken), state).As>().ToListAsync(GetCancellationToken(cancellationToken)); } - public async Task> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken) + public async Task> GetPruneListAsync(DateTime date, int count, bool includeDetails = true, CancellationToken cancellationToken = default) { //TODO: Test & Improve? return await (from token in await GetMongoQueryableAsync(cancellationToken) @@ -110,4 +110,4 @@ public class MongoOpenIddictTokenRepository : MongoDbRepository(); - } - - [Fact] - public async Task Method1Async() - { - var q = new CultureInfo("zh").Parent.Name; - } -} diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo.Abp.OpenIddict.Domain.Tests.csproj b/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo.Abp.OpenIddict.Domain.Tests.csproj index 6ac5a30cfb..5c6158e4d7 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo.Abp.OpenIddict.Domain.Tests.csproj +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo.Abp.OpenIddict.Domain.Tests.csproj @@ -5,7 +5,7 @@ net6.0 - Volo.Abp.OpenIddict + @@ -13,4 +13,11 @@ + + + + + + + diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/OpenIddictDomainTestBase.cs b/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo/Abp/OpenIddict/OpenIddictDomainTestBase.cs similarity index 57% rename from modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/OpenIddictDomainTestBase.cs rename to modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo/Abp/OpenIddict/OpenIddictDomainTestBase.cs index ffc0fffe67..26634a1cd7 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/OpenIddictDomainTestBase.cs +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo/Abp/OpenIddict/OpenIddictDomainTestBase.cs @@ -1,8 +1,5 @@ namespace Volo.Abp.OpenIddict; -/* Inherit from this class for your domain layer tests. - * See SampleManager_Tests for example. - */ public abstract class OpenIddictDomainTestBase : OpenIddictTestBase { diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/OpenIddictDomainTestModule.cs b/modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo/Abp/OpenIddict/OpenIddictDomainTestModule.cs similarity index 100% rename from modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/OpenIddictDomainTestModule.cs rename to modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo/Abp/OpenIddict/OpenIddictDomainTestModule.cs diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/EntityFrameworkCore/OpenIddictEntityFrameworkCoreTestBase.cs b/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/EntityFrameworkCore/OpenIddictEntityFrameworkCoreTestBase.cs index 59273c4508..1af9387ada 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/EntityFrameworkCore/OpenIddictEntityFrameworkCoreTestBase.cs +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/EntityFrameworkCore/OpenIddictEntityFrameworkCoreTestBase.cs @@ -1,8 +1,5 @@ namespace Volo.Abp.OpenIddict.EntityFrameworkCore; -/* This class can be used as a base class for EF Core integration tests, - * while SampleRepository_Tests uses a different approach. - */ public abstract class OpenIddictEntityFrameworkCoreTestBase : OpenIddictTestBase { diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepository_Tests.cs b/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepository_Tests.cs deleted file mode 100644 index 233dd430fe..0000000000 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepository_Tests.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Volo.Abp.OpenIddict.Samples; - -namespace Volo.Abp.OpenIddict.EntityFrameworkCore.Samples; - -public class SampleRepository_Tests : SampleRepository_Tests -{ - /* Don't write custom repository tests here, instead write to - * the base class. - * One exception can be some specific tests related to EF core. - */ -} diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests.csproj b/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests.csproj index 20ac42e254..4f67026aae 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests.csproj +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests.csproj @@ -5,7 +5,7 @@ net6.0 - Volo.Abp.OpenIddict + diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/MongoDB/OpenIddictMongoDbTestBase.cs b/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/MongoDB/OpenIddictMongoDbTestBase.cs index 7e8d205235..bab7e3b52f 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/MongoDB/OpenIddictMongoDbTestBase.cs +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/MongoDB/OpenIddictMongoDbTestBase.cs @@ -1,8 +1,5 @@ namespace Volo.Abp.OpenIddict.MongoDB; -/* This class can be used as a base class for MongoDB integration tests, - * while SampleRepository_Tests uses a different approach. - */ public abstract class OpenIddictMongoDbTestBase : OpenIddictTestBase { diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/MongoDB/Samples/SampleRepository_Tests.cs b/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/MongoDB/Samples/SampleRepository_Tests.cs deleted file mode 100644 index 7130177dc0..0000000000 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/MongoDB/Samples/SampleRepository_Tests.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Volo.Abp.OpenIddict.Samples; -using Xunit; - -namespace Volo.Abp.OpenIddict.MongoDB.Samples; - -[Collection(MongoTestCollection.Name)] -public class SampleRepository_Tests : SampleRepository_Tests -{ - /* Don't write custom repository tests here, instead write to - * the base class. - * One exception can be some specific tests related to MongoDB. - */ -} diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/Volo.Abp.OpenIddict.MongoDB.Tests.csproj b/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/Volo.Abp.OpenIddict.MongoDB.Tests.csproj index f5e7595974..cfb9d8ecab 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/Volo.Abp.OpenIddict.MongoDB.Tests.csproj +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/Volo.Abp.OpenIddict.MongoDB.Tests.csproj @@ -5,7 +5,7 @@ net6.0 - Volo.Abp.OpenIddict + diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/AbpOpenIddictTestData.cs b/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/AbpOpenIddictTestData.cs new file mode 100644 index 0000000000..fdaf2d03a3 --- /dev/null +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/AbpOpenIddictTestData.cs @@ -0,0 +1,16 @@ +using System; + +namespace Volo.Abp.OpenIddict; + +public static class AbpOpenIddictTestData +{ + public static Guid App1Id { get; set; } = Guid.NewGuid(); + public static string App1ClientId { get; set; } = "Client1"; + public static Guid App2Id { get; set; } = Guid.NewGuid(); + public static string App2ClientId { get; set; } = "Client2"; + + public static Guid Scope1Id { get; set; } = Guid.NewGuid(); + public static string Scope1Name { get; set; } = "Scope1"; + public static Guid Scope2Id { get; set; } = Guid.NewGuid(); + public static string Scope2Name { get; set; } = "Scope2"; +} diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/OpenIddictDataSeedContributor.cs b/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/OpenIddictDataSeedContributor.cs index 91696bcdcc..5aa283d896 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/OpenIddictDataSeedContributor.cs +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/OpenIddictDataSeedContributor.cs @@ -1,8 +1,13 @@ -using System.Threading.Tasks; +using System; +using System.Globalization; +using System.Threading.Tasks; +using OpenIddict.Abstractions; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Guids; using Volo.Abp.MultiTenancy; +using Volo.Abp.OpenIddict.Applications; +using Volo.Abp.OpenIddict.Scopes; namespace Volo.Abp.OpenIddict; @@ -10,23 +15,159 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep { private readonly IGuidGenerator _guidGenerator; private readonly ICurrentTenant _currentTenant; + private readonly IOpenIddictApplicationManager _applicationManager; + private readonly IOpenIddictScopeManager _scopeManager; public OpenIddictDataSeedContributor( - IGuidGenerator guidGenerator, ICurrentTenant currentTenant) + IGuidGenerator guidGenerator, ICurrentTenant currentTenant, IOpenIddictApplicationManager applicationManager, IOpenIddictScopeManager scopeManager) { _guidGenerator = guidGenerator; _currentTenant = currentTenant; + _applicationManager = applicationManager; + _scopeManager = scopeManager; } - public Task SeedAsync(DataSeedContext context) + public async Task SeedAsync(DataSeedContext context) { - /* Instead of returning the Task.CompletedTask, you can insert your test data - * at this point! - */ + await CreateScopesAsync(); + await CreateApplicationsAsync(); + } + + private async Task CreateScopesAsync() + { + var scope1 = (OpenIddictScope)await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor() + { + Name = AbpOpenIddictTestData.Scope1Name, + DisplayName = "Test Scope 1", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "测试范围1", + [CultureInfo.GetCultureInfo("tr")] = "Test Kapsamı 1" + }, + Resources = + { + "TestScope1Resource" + } + }); + AbpOpenIddictTestData.Scope1Id = scope1.Id; + + var scope2 = (OpenIddictScope)await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor() + { + Name = AbpOpenIddictTestData.Scope2Name, + DisplayName = "Test Scope 2", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "测试范围2", + [CultureInfo.GetCultureInfo("tr")] = "Test Kapsamı 2" + }, + Resources = + { + "TestScopeResource2" + } + }); + AbpOpenIddictTestData.Scope2Id = scope2.Id; + } + - using (_currentTenant.Change(context?.TenantId)) + private async Task CreateApplicationsAsync() + { + var app1 = (OpenIddictApplication)await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor { - return Task.CompletedTask; - } + ClientId = AbpOpenIddictTestData.App1ClientId, + ConsentType = OpenIddictConstants.ConsentTypes.Explicit, + DisplayName = "Test Application", + RedirectUris = + { + new Uri("https://abp.io") + }, + PostLogoutRedirectUris = + { + new Uri("https://abp.io") + }, + Permissions = + { + OpenIddictConstants.Permissions.Endpoints.Authorization, + OpenIddictConstants.Permissions.Endpoints.Token, + OpenIddictConstants.Permissions.Endpoints.Device, + OpenIddictConstants.Permissions.Endpoints.Introspection, + OpenIddictConstants.Permissions.Endpoints.Revocation, + OpenIddictConstants.Permissions.Endpoints.Logout, + + OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode, + OpenIddictConstants.Permissions.GrantTypes.Implicit, + OpenIddictConstants.Permissions.GrantTypes.Password, + OpenIddictConstants.Permissions.GrantTypes.RefreshToken, + OpenIddictConstants.Permissions.GrantTypes.DeviceCode, + OpenIddictConstants.Permissions.GrantTypes.ClientCredentials, + + OpenIddictConstants.Permissions.ResponseTypes.Code, + OpenIddictConstants.Permissions.ResponseTypes.CodeIdToken, + OpenIddictConstants.Permissions.ResponseTypes.CodeIdTokenToken, + OpenIddictConstants.Permissions.ResponseTypes.CodeToken, + OpenIddictConstants.Permissions.ResponseTypes.IdToken, + OpenIddictConstants.Permissions.ResponseTypes.IdTokenToken, + OpenIddictConstants.Permissions.ResponseTypes.None, + OpenIddictConstants.Permissions.ResponseTypes.Token, + + OpenIddictConstants.Permissions.Scopes.Roles, + OpenIddictConstants.Permissions.Scopes.Profile, + OpenIddictConstants.Permissions.Scopes.Email, + OpenIddictConstants.Permissions.Scopes.Address, + OpenIddictConstants.Permissions.Scopes.Phone, + + OpenIddictConstants.Permissions.Prefixes.Scope + AbpOpenIddictTestData.Scope1Name + } + }); + AbpOpenIddictTestData.App1Id = app1.Id; + + var app2 = (OpenIddictApplication)await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor + { + ClientId = AbpOpenIddictTestData.App2ClientId, + ConsentType = OpenIddictConstants.ConsentTypes.Explicit, + DisplayName = "Test Application", + RedirectUris = + { + new Uri("https://abp.io") + }, + PostLogoutRedirectUris = + { + new Uri("https://abp.io") + }, + Permissions = + { + OpenIddictConstants.Permissions.Endpoints.Authorization, + OpenIddictConstants.Permissions.Endpoints.Token, + OpenIddictConstants.Permissions.Endpoints.Device, + OpenIddictConstants.Permissions.Endpoints.Introspection, + OpenIddictConstants.Permissions.Endpoints.Revocation, + OpenIddictConstants.Permissions.Endpoints.Logout, + + OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode, + OpenIddictConstants.Permissions.GrantTypes.Implicit, + OpenIddictConstants.Permissions.GrantTypes.Password, + OpenIddictConstants.Permissions.GrantTypes.RefreshToken, + OpenIddictConstants.Permissions.GrantTypes.DeviceCode, + OpenIddictConstants.Permissions.GrantTypes.ClientCredentials, + + OpenIddictConstants.Permissions.ResponseTypes.Code, + OpenIddictConstants.Permissions.ResponseTypes.CodeIdToken, + OpenIddictConstants.Permissions.ResponseTypes.CodeIdTokenToken, + OpenIddictConstants.Permissions.ResponseTypes.CodeToken, + OpenIddictConstants.Permissions.ResponseTypes.IdToken, + OpenIddictConstants.Permissions.ResponseTypes.IdTokenToken, + OpenIddictConstants.Permissions.ResponseTypes.None, + OpenIddictConstants.Permissions.ResponseTypes.Token, + + OpenIddictConstants.Permissions.Scopes.Roles, + OpenIddictConstants.Permissions.Scopes.Profile, + OpenIddictConstants.Permissions.Scopes.Email, + OpenIddictConstants.Permissions.Scopes.Address, + OpenIddictConstants.Permissions.Scopes.Phone, + + OpenIddictConstants.Permissions.Prefixes.Scope + AbpOpenIddictTestData.Scope1Name, + OpenIddictConstants.Permissions.Prefixes.Scope + AbpOpenIddictTestData.Scope2Name, + } + }); + AbpOpenIddictTestData.App2Id = app2.Id; } } diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Samples/SampleRepository_Tests.cs b/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Samples/SampleRepository_Tests.cs deleted file mode 100644 index 364c4db559..0000000000 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Samples/SampleRepository_Tests.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Modularity; -using Xunit; - -namespace Volo.Abp.OpenIddict.Samples; - -/* Write your custom repository tests like that, in this project, as abstract classes. - * Then inherit these abstract classes from EF Core & MongoDB test projects. - * In this way, both database providers are tests with the same set tests. - */ -public abstract class SampleRepository_Tests : OpenIddictTestBase - where TStartupModule : IAbpModule -{ - //private readonly ISampleRepository _sampleRepository; - - protected SampleRepository_Tests() - { - //_sampleRepository = GetRequiredService(); - } - - [Fact] - public async Task Method1Async() - { - - } -} diff --git a/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo.Abp.OpenIddict.TestBase.csproj b/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo.Abp.OpenIddict.TestBase.csproj index aecec5fb07..d1adb00289 100644 --- a/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo.Abp.OpenIddict.TestBase.csproj +++ b/modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo.Abp.OpenIddict.TestBase.csproj @@ -5,7 +5,7 @@ net6.0 - Volo.Abp.OpenIddict +