Browse Source

Add `includeDetails`.

pull/12084/head
maliming 5 years ago
parent
commit
5c578506a7
No known key found for this signature in database GPG Key ID: 96224957E51C89E
  1. 211
      modules/openiddict/app/OpenIddict.Demo.Server/EntityFrameworkCore/ServerDataSeedContributor.cs
  2. 4
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Localization/OpenIddict/zh-Hans.json
  3. 22
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs
  4. 14
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IOpenIddictApplicationRepository.cs
  5. 34
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs
  6. 22
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/IOpenIddictAuthorizationRepository.cs
  7. 22
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeStore.cs
  8. 17
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/IOpenIddictScopeRepository.cs
  9. 32
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Tokens/AbpOpenIddictTokenStore.cs
  10. 26
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Tokens/IOpenIddictTokenRepository.cs
  11. 39
      modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationRepository.cs
  12. 65
      modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Authorizations/OpenIddictAuthorizationRepository.cs
  13. 2
      modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/EntityFrameworkCore/OpenIddictDbContext.cs
  14. 24
      modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Scopes/OpenIddictScopeRepository.cs
  15. 26
      modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Tokens/OpenIddictTokenRepository.cs
  16. 18
      modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Applications/MongoOpenIddictApplicationRepository.cs
  17. 24
      modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Authorizations/MongoOpenIddictAuthorizationRepository.cs
  18. 2
      modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/MongoDB/IOpenIddictMongoDbContext.cs
  19. 2
      modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/MongoDB/OpenIddictMongoDbContext.cs
  20. 22
      modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Scopes/MongoOpenIddictScopeRepository.cs
  21. 28
      modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs
  22. 21
      modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Samples/SampleManager_Tests.cs
  23. 9
      modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo.Abp.OpenIddict.Domain.Tests.csproj
  24. 3
      modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo/Abp/OpenIddict/OpenIddictDomainTestBase.cs
  25. 0
      modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo/Abp/OpenIddict/OpenIddictDomainTestModule.cs
  26. 3
      modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/EntityFrameworkCore/OpenIddictEntityFrameworkCoreTestBase.cs
  27. 11
      modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepository_Tests.cs
  28. 2
      modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests.csproj
  29. 3
      modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/MongoDB/OpenIddictMongoDbTestBase.cs
  30. 13
      modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/MongoDB/Samples/SampleRepository_Tests.cs
  31. 2
      modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/Volo.Abp.OpenIddict.MongoDB.Tests.csproj
  32. 16
      modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/AbpOpenIddictTestData.cs
  33. 159
      modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/OpenIddictDataSeedContributor.cs
  34. 26
      modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Samples/SampleRepository_Tests.cs
  35. 2
      modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo.Abp.OpenIddict.TestBase.csproj

211
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"
}
});
}
}
}

4
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": "找不到应用详情.",

22
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<IOpenIddictApplicationRepository>, IOpenIddictApplicationStore<OpenIddictApplication>, 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<IOpenIddictA
{
Check.NotNull(application, nameof(application));
await Repository.InsertAsync(application, cancellationToken: cancellationToken);
await Repository.InsertAsync(application, autoSave: true, cancellationToken: cancellationToken);
}
public async ValueTask DeleteAsync(OpenIddictApplication application, CancellationToken cancellationToken)
@ -70,7 +70,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
{
await TokenRepository.DeleteManyAsync(tokens, cancellationToken: cancellationToken);
}
await Repository.DeleteAsync(application, cancellationToken: cancellationToken);
await uow.CompleteAsync(cancellationToken);
@ -81,21 +81,21 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
{
Check.NotNullOrEmpty(identifier, nameof(identifier));
return await Repository.FindAsync(ConvertIdentifierFromString(identifier), cancellationToken: cancellationToken);
return await Repository.FindAsync(ConvertIdentifierFromString(identifier), includeDetails: true, cancellationToken);
}
public async ValueTask<OpenIddictApplication> 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<OpenIddictApplication> 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<IOpenIddictA
{
Check.NotNullOrEmpty(address, nameof(address));
var applications = await Repository.FindByRedirectUriAsync(address, cancellationToken);
var applications = await Repository.FindByRedirectUriAsync(address, includeDetails: true, cancellationToken);
foreach (var application in applications)
{
var addresses = await GetRedirectUrisAsync(application, cancellationToken);
@ -126,7 +126,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
{
Check.NotNull(query, nameof(query));
return await Repository.GetAsync(query, state, cancellationToken);
return await Repository.GetAsync(query, state, includeDetails: true, cancellationToken);
}
public ValueTask<string> GetClientIdAsync(OpenIddictApplication application, CancellationToken cancellationToken)
@ -400,7 +400,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
public async IAsyncEnumerable<OpenIddictApplication> 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<IOpenIddictA
{
Check.NotNull(query, nameof(query));
var applications = await Repository.ListAsync(query, state, cancellationToken);
var applications = await Repository.ListAsync(query, state, includeDetails: true, cancellationToken);
foreach (var application in applications)
{
yield return application;

14
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/IOpenIddictApplicationRepository.cs

@ -9,17 +9,17 @@ namespace Volo.Abp.OpenIddict.Applications;
public interface IOpenIddictApplicationRepository : IBasicRepository<OpenIddictApplication, Guid>
{
Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictApplication>, IQueryable<TResult>> query, CancellationToken cancellationToken);
Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictApplication>, IQueryable<TResult>> query, CancellationToken cancellationToken = default);
Task<OpenIddictApplication> FindByClientIdAsync(string clientId, CancellationToken cancellationToken);
Task<OpenIddictApplication> FindByClientIdAsync(string clientId, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictApplication>> FindByPostLogoutRedirectUriAsync(string address, CancellationToken cancellationToken);
Task<List<OpenIddictApplication>> FindByPostLogoutRedirectUriAsync(string address, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictApplication>> FindByRedirectUriAsync(string address, CancellationToken cancellationToken);
Task<List<OpenIddictApplication>> FindByRedirectUriAsync(string address, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictApplication>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken);
Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictApplication>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictApplication>> ListAsync(int? count, int? offset, CancellationToken cancellationToken);
Task<List<OpenIddictApplication>> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictApplication>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken);
Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictApplication>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default);
}

34
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs

@ -30,7 +30,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
IOpenIddictAuthorizationRepository repository,
IUnitOfWorkManager unitOfWorkManager,
IMemoryCache cache,
IOpenIddictApplicationRepository applicationRepository,
IOpenIddictApplicationRepository applicationRepository,
IOpenIddictTokenRepository tokenRepository)
: base(repository, unitOfWorkManager, cache)
{
@ -54,7 +54,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
{
Check.NotNull(authorization, nameof(authorization));
await Repository.InsertAsync(authorization, cancellationToken: cancellationToken);
await Repository.InsertAsync(authorization, autoSave: true, cancellationToken: cancellationToken);
}
public virtual async ValueTask DeleteAsync(OpenIddictAuthorization authorization, CancellationToken cancellationToken)
@ -67,9 +67,9 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
{
await TokenRepository.DeleteManyAsync(authorization.Tokens, cancellationToken: cancellationToken);
}
await Repository.DeleteAsync(authorization, cancellationToken: cancellationToken);
await uow.CompleteAsync(cancellationToken);
}
}
@ -79,7 +79,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
Check.NotNullOrEmpty(subject, nameof(subject));
Check.NotNullOrEmpty(client, nameof(client));
var authorizations = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), cancellationToken);
var authorizations = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), includeDetails: true, cancellationToken);
foreach (var authorization in authorizations)
{
yield return authorization;
@ -92,35 +92,35 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
Check.NotNullOrEmpty(client, nameof(client));
Check.NotNullOrEmpty(status, nameof(status));
var authorizations = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), status, cancellationToken);
var authorizations = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), status, includeDetails: true, cancellationToken);
foreach (var authorization in authorizations)
{
yield return authorization;
}
}
public virtual async IAsyncEnumerable<OpenIddictAuthorization> FindAsync(string subject, string client, string status, string type, CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictAuthorization> 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<OpenIddictAuthorization> FindAsync(string subject, string client, string status, string type, ImmutableArray<string> scopes, CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictAuthorization> FindAsync(string subject, string client, string status, string type, ImmutableArray<string> 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<IOpenIddic
{
Check.NotNullOrEmpty(identifier, nameof(identifier));
var authorizations = await Repository.FindByApplicationIdAsync(ConvertIdentifierFromString(identifier), cancellationToken);
var authorizations = await Repository.FindByApplicationIdAsync(ConvertIdentifierFromString(identifier), includeDetails: true, cancellationToken);
foreach (var authorization in authorizations)
{
yield return authorization;
@ -146,14 +146,14 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
{
Check.NotNullOrEmpty(identifier, nameof(identifier));
return await Repository.FindByIdAsync(ConvertIdentifierFromString(identifier), cancellationToken);
return await Repository.FindByIdAsync(ConvertIdentifierFromString(identifier), includeDetails: true, cancellationToken);
}
public virtual async IAsyncEnumerable<OpenIddictAuthorization> 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<IOpenIddic
{
Check.NotNull(query, nameof(query));
return await Repository.GetAsync(query, state, cancellationToken);
return await Repository.GetAsync(query, state, includeDetails: true, cancellationToken);
}
public virtual ValueTask <DateTimeOffset?> GetCreationDateAsync(OpenIddictAuthorization authorization, CancellationToken cancellationToken)
@ -295,7 +295,7 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
public virtual async IAsyncEnumerable<OpenIddictAuthorization> 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<IOpenIddic
public virtual async IAsyncEnumerable<TResult> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> 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<IOpenIddic
{
var date = threshold.UtcDateTime;
var authorizations = await Repository.GetPruneListAsync(date, 1_000, cancellationToken);
var authorizations = await Repository.GetPruneListAsync(date, 1_000, includeDetails: false, cancellationToken);
if (!authorizations.Any())
{
break;

22
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/IOpenIddictAuthorizationRepository.cs

@ -9,25 +9,25 @@ namespace Volo.Abp.OpenIddict.Authorizations;
public interface IOpenIddictAuthorizationRepository : IBasicRepository<OpenIddictAuthorization, Guid>
{
Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictAuthorization>, IQueryable<TResult>> query, CancellationToken cancellationToken);
Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictAuthorization>, IQueryable<TResult>> query, CancellationToken cancellationToken = default);
Task<List<OpenIddictAuthorization>> FindAsync(string subject, Guid client, CancellationToken cancellationToken);
Task<List<OpenIddictAuthorization>> FindAsync(string subject, Guid client, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictAuthorization>> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken);
Task<List<OpenIddictAuthorization>> FindAsync(string subject, Guid client, string status, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictAuthorization>> FindAsync(string subject, Guid client, string status, string type, CancellationToken cancellationToken);
Task<List<OpenIddictAuthorization>> FindAsync(string subject, Guid client, string status, string type, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictAuthorization>> FindByApplicationIdAsync(Guid applicationId, CancellationToken cancellationToken);
Task<List<OpenIddictAuthorization>> FindByApplicationIdAsync(Guid applicationId, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<OpenIddictAuthorization> FindByIdAsync(Guid id, CancellationToken cancellationToken);
Task<OpenIddictAuthorization> FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictAuthorization>> FindBySubjectAsync(string subject, CancellationToken cancellationToken);
Task<List<OpenIddictAuthorization>> FindBySubjectAsync(string subject, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken);
Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictAuthorization>> ListAsync(int? count, int? offset, CancellationToken cancellationToken);
Task<List<OpenIddictAuthorization>> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken);
Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictAuthorization>> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken);
Task<List<OpenIddictAuthorization>> GetPruneListAsync(DateTime date, int count, bool includeDetails = true, CancellationToken cancellationToken = default);
}

22
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/AbpOpenIddictScopeStore.cs

@ -60,17 +60,17 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase<IOpenIddictScopeRe
{
Check.NotNullOrEmpty(identifier, nameof(identifier));
return await Repository.FindByIdAsync(ConvertIdentifierFromString(identifier), cancellationToken);
return await Repository.FindByIdAsync(ConvertIdentifierFromString(identifier), includeDetails: true, cancellationToken);
}
public virtual async ValueTask<OpenIddictScope> 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<OpenIddictScope> FindByNamesAsync(ImmutableArray<string> names, CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictScope> FindByNamesAsync(ImmutableArray<string> names, [EnumeratorCancellation] CancellationToken cancellationToken)
{
Check.NotNullOrEmpty(names, nameof(names));
foreach (var name in names)
@ -78,18 +78,18 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase<IOpenIddictScopeRe
Check.NotNullOrEmpty(name, nameof(name));
}
var scopes = await Repository.FindByNamesAsync(names.ToArray(), cancellationToken);
var scopes = await Repository.FindByNamesAsync(names.ToArray(), includeDetails: true, cancellationToken);
foreach (var scope in scopes)
{
yield return scope;
}
}
public virtual async IAsyncEnumerable<OpenIddictScope> FindByResourceAsync(string resource, CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictScope> 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<IOpenIddictScopeRe
public virtual async ValueTask<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
{
return await Repository.GetAsync(query, state, cancellationToken);
return await Repository.GetAsync(query, state, includeDetails: true, cancellationToken);
}
public virtual ValueTask<string> GetDescriptionAsync(OpenIddictScope scope, CancellationToken cancellationToken)
@ -289,7 +289,7 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase<IOpenIddictScopeRe
public virtual async IAsyncEnumerable<OpenIddictScope> 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<IOpenIddictScopeRe
{
Check.NotNull(query, nameof(query));
var scopes = await Repository.ListAsync(query, state, cancellationToken);
var scopes = await Repository.ListAsync(query, state, includeDetails: true, cancellationToken);
foreach (var scope in scopes)
{
yield return scope;
@ -340,7 +340,7 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase<IOpenIddictScopeRe
return default;
}
public virtual ValueTask SetDisplayNameAsync(OpenIddictScope scope, string? name, CancellationToken cancellationToken)
public virtual ValueTask SetDisplayNameAsync(OpenIddictScope scope, string name, CancellationToken cancellationToken)
{
Check.NotNull(scope, nameof(scope));
@ -373,7 +373,7 @@ public class AbpOpenIddictScopeStore : AbpOpenIddictStoreBase<IOpenIddictScopeRe
return default;
}
public virtual ValueTask SetNameAsync(OpenIddictScope scope, string? name, CancellationToken cancellationToken)
public virtual ValueTask SetNameAsync(OpenIddictScope scope, string name, CancellationToken cancellationToken)
{
Check.NotNull(scope, nameof(scope));

17
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Scopes/IOpenIddictScopeRepository.cs

@ -9,20 +9,19 @@ namespace Volo.Abp.OpenIddict.Scopes;
public interface IOpenIddictScopeRepository : IBasicRepository<OpenIddictScope, Guid>
{
Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictScope>, IQueryable<TResult>> query, CancellationToken cancellationToken);
Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictScope>, IQueryable<TResult>> query, CancellationToken cancellationToken = default);
Task<OpenIddictScope> FindByIdAsync(Guid id, CancellationToken cancellationToken);
Task<OpenIddictScope> FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<OpenIddictScope> FindByNameAsync(string name, CancellationToken cancellationToken);
Task<OpenIddictScope> FindByNameAsync(string name, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictScope>> FindByNamesAsync(string[] names, CancellationToken cancellationToken);
Task<List<OpenIddictScope>> FindByNamesAsync(string[] names, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictScope>> FindByResourceAsync(string resource, CancellationToken cancellationToken);
Task<List<OpenIddictScope>> FindByResourceAsync(string resource, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken);
Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictScope>> ListAsync(int? count, int? offset, CancellationToken cancellationToken);
Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken);
Task<List<OpenIddictScope>> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default);
}

32
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Tokens/AbpOpenIddictTokenStore.cs

@ -67,20 +67,20 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase<IOpenIddictTokenRe
Check.NotNullOrEmpty(subject, nameof(subject));
Check.NotNullOrEmpty(client, nameof(client));
var tokens = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), cancellationToken);
var tokens = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), includeDetails: true, cancellationToken);
foreach (var token in tokens)
{
yield return token;
}
}
public virtual async IAsyncEnumerable<OpenIddictToken> FindAsync(string subject, string client, string status, CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictToken> 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<IOpenIddictTokenRe
Check.NotNullOrEmpty(status, nameof(status));
Check.NotNullOrEmpty(type, nameof(type));
var tokens = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), status, type, cancellationToken);
var tokens = await Repository.FindAsync(subject, ConvertIdentifierFromString(client), status, type, includeDetails: true, cancellationToken);
foreach (var token in tokens)
{
yield return token;
@ -105,18 +105,18 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase<IOpenIddictTokenRe
{
Check.NotNullOrEmpty(identifier, nameof(identifier));
var tokens = await Repository.FindByApplicationIdAsync(ConvertIdentifierFromString(identifier), cancellationToken);
var tokens = await Repository.FindByApplicationIdAsync(ConvertIdentifierFromString(identifier), includeDetails: true, cancellationToken);
foreach (var token in tokens)
{
yield return token;
}
}
public virtual async IAsyncEnumerable<OpenIddictToken> FindByAuthorizationIdAsync(string identifier, CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictToken> 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<IOpenIddictTokenRe
{
Check.NotNullOrEmpty(identifier, nameof(identifier));
return await Repository.FindByIdAsync(ConvertIdentifierFromString(identifier), cancellationToken);
return await Repository.FindByIdAsync(ConvertIdentifierFromString(identifier), includeDetails: true, cancellationToken);
}
public virtual async ValueTask<OpenIddictToken> 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<OpenIddictToken> FindBySubjectAsync(string subject, CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictToken> 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<IOpenIddictTokenRe
{
Check.NotNull(query, nameof(query));
return await Repository.GetAsync(query, state, cancellationToken);
return await Repository.GetAsync(query, state, includeDetails: true, cancellationToken);
}
public virtual ValueTask<string> GetAuthorizationIdAsync(OpenIddictToken token, CancellationToken cancellationToken)
@ -296,18 +296,18 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase<IOpenIddictTokenRe
public virtual async IAsyncEnumerable<OpenIddictToken> 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<TResult> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<TResult> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> 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<IOpenIddictTokenRe
{
var date = threshold.UtcDateTime;
var tokens = await Repository.GetPruneListAsync(date, 1_000, cancellationToken);
var tokens = await Repository.GetPruneListAsync(date, 1_000, includeDetails: true, cancellationToken);
if (!tokens.Any())
{
break;

26
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Tokens/IOpenIddictTokenRepository.cs

@ -9,29 +9,29 @@ namespace Volo.Abp.OpenIddict.Tokens;
public interface IOpenIddictTokenRepository : IBasicRepository<OpenIddictToken, Guid>
{
Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictToken>, IQueryable<TResult>> query, CancellationToken cancellationToken);
Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictToken>, IQueryable<TResult>> query, CancellationToken cancellationToken = default);
Task<List<OpenIddictToken>> FindAsync(string subject, Guid client, CancellationToken cancellationToken);
Task<List<OpenIddictToken>> FindAsync(string subject, Guid client, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictToken>> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken);
Task<List<OpenIddictToken>> FindAsync(string subject, Guid client, string status, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictToken>> FindAsync(string subject, Guid client, string status, string type, CancellationToken cancellationToken);
Task<List<OpenIddictToken>> FindAsync(string subject, Guid client, string status, string type, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictToken>> FindByApplicationIdAsync(Guid applicationId, CancellationToken cancellationToken);
Task<List<OpenIddictToken>> FindByApplicationIdAsync(Guid applicationId, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictToken>> FindByAuthorizationIdAsync(Guid authorizationId, CancellationToken cancellationToken);
Task<List<OpenIddictToken>> FindByAuthorizationIdAsync(Guid authorizationId, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<OpenIddictToken> FindByIdAsync(Guid id, CancellationToken cancellationToken);
Task<OpenIddictToken> FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<OpenIddictToken> FindByReferenceIdAsync(string referenceId, CancellationToken cancellationToken);
Task<OpenIddictToken> FindByReferenceIdAsync(string referenceId, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictToken>> FindBySubjectAsync(string subject, CancellationToken cancellationToken);
Task<List<OpenIddictToken>> FindBySubjectAsync(string subject, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken);
Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictToken>> ListAsync(int? count, int? offset, CancellationToken cancellationToken);
Task<List<OpenIddictToken>> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken);
Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default);
Task<List<OpenIddictToken>> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken);
Task<List<OpenIddictToken>> GetPruneListAsync(DateTime date, int count, bool includeDetails = true, CancellationToken cancellationToken = default);
}

39
modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationRepository.cs

@ -18,43 +18,54 @@ public class OpenIddictApplicationRepository : EfCoreRepository<IOpenIddictDbCon
}
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictApplication>, IQueryable<TResult>> query, CancellationToken cancellationToken)
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictApplication>, IQueryable<TResult>> query, CancellationToken cancellationToken = default)
{
return await query(await GetQueryableAsync()).LongCountAsync(cancellationToken);
return await query(await GetDbSetAsync()).LongCountAsync(cancellationToken);
}
public virtual async Task<OpenIddictApplication> FindByClientIdAsync(string clientId, CancellationToken cancellationToken)
public virtual async Task<OpenIddictApplication> 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<List<OpenIddictApplication>> FindByPostLogoutRedirectUriAsync(string address, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictApplication>> 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<List<OpenIddictApplication>> FindByRedirectUriAsync(string address, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictApplication>> 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<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictApplication>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictApplication>, TState, IQueryable<TResult>> 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<List<OpenIddictApplication>> ListAsync(int? count, int? offset, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictApplication>> 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<OpenIddictApplication, IQueryable<OpenIddictApplication>>(offset.HasValue, offset.Value)
.TakeIf<OpenIddictApplication, IQueryable<OpenIddictApplication>>(count.HasValue, count.Value)
.ToListAsync(cancellationToken);
}
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictApplication>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictApplication>, TState, IQueryable<TResult>> 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.")]

65
modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Authorizations/OpenIddictAuthorizationRepository.cs

@ -19,49 +19,69 @@ public class OpenIddictAuthorizationRepository : EfCoreRepository<IOpenIddictDbC
}
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictAuthorization>, IQueryable<TResult>> query, CancellationToken cancellationToken)
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictAuthorization>, IQueryable<TResult>> query, CancellationToken cancellationToken = default)
{
return await query(await GetQueryableAsync()).LongCountAsync(cancellationToken);
}
public virtual async Task<List<OpenIddictAuthorization>> FindAsync(string subject, Guid client, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<List<OpenIddictAuthorization>> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<List<OpenIddictAuthorization>> FindAsync(string subject, Guid client, string status, string type, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<List<OpenIddictAuthorization>> FindByApplicationIdAsync(Guid applicationId, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<OpenIddictAuthorization> FindByIdAsync(Guid id, CancellationToken cancellationToken)
public virtual async Task<OpenIddictAuthorization> 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<List<OpenIddictAuthorization>> FindBySubjectAsync(string subject, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> 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<List<OpenIddictAuthorization>> ListAsync(int? count, int? offset, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<IOpenIddictDbC
return await query.ToListAsync(cancellationToken);
}
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> 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<List<OpenIddictAuthorization>> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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)

2
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<OpenIddictDbContext>, IOpenIddictDbContext
{

24
modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Scopes/OpenIddictScopeRepository.cs

@ -18,37 +18,37 @@ public class OpenIddictScopeRepository : EfCoreRepository<IOpenIddictDbContext,
}
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictScope>, IQueryable<TResult>> query, CancellationToken cancellationToken)
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictScope>, IQueryable<TResult>> query, CancellationToken cancellationToken = default)
{
return await query(await GetQueryableAsync()).LongCountAsync(cancellationToken);
}
public virtual async Task<OpenIddictScope> FindByIdAsync(Guid id, CancellationToken cancellationToken)
public virtual async Task<OpenIddictScope> 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<OpenIddictScope> FindByNameAsync(string name, CancellationToken cancellationToken)
public virtual async Task<OpenIddictScope> 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<List<OpenIddictScope>> FindByNamesAsync(string[] names, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictScope>> 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<List<OpenIddictScope>> FindByResourceAsync(string resource, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictScope>> 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<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await query(await GetQueryableAsync(), state).FirstOrDefaultAsync(cancellationToken);
}
public virtual async Task<List<OpenIddictScope>> ListAsync(int? count, int? offset, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictScope>> 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<IOpenIddictDbContext,
.ToListAsync(cancellationToken);
}
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await query(await GetQueryableAsync(), state).ToListAsync(cancellationToken);
}

26
modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Tokens/OpenIddictTokenRepository.cs

@ -20,57 +20,57 @@ public class OpenIddictTokenRepository : EfCoreRepository<IOpenIddictDbContext,
}
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictToken>, IQueryable<TResult>> query, CancellationToken cancellationToken)
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictToken>, IQueryable<TResult>> query, CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync()).LongCountAsync(cancellationToken);
}
public virtual async Task<List<OpenIddictToken>> FindAsync(string subject, Guid client, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> 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<List<OpenIddictToken>> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> 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<List<OpenIddictToken>> FindAsync(string subject, Guid client, string status, string type, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> 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<List<OpenIddictToken>> FindByApplicationIdAsync(Guid applicationId, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> FindByApplicationIdAsync(Guid applicationId, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync()).Where(x => x.ApplicationId == applicationId).ToListAsync(cancellationToken);
}
public virtual async Task<List<OpenIddictToken>> FindByAuthorizationIdAsync(Guid authorizationId, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> FindByAuthorizationIdAsync(Guid authorizationId, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync()).Where(x => x.AuthorizationId == authorizationId).ToListAsync(cancellationToken);
}
public virtual async Task<OpenIddictToken> FindByIdAsync(Guid id, CancellationToken cancellationToken)
public virtual async Task<OpenIddictToken> FindByIdAsync(Guid id, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync()).FirstOrDefaultAsync(x => x.Id == id, cancellationToken);
}
public virtual async Task<OpenIddictToken> FindByReferenceIdAsync(string referenceId, CancellationToken cancellationToken)
public virtual async Task<OpenIddictToken> FindByReferenceIdAsync(string referenceId, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync()).FirstOrDefaultAsync(x => x.ReferenceId == referenceId, cancellationToken);
}
public virtual async Task<List<OpenIddictToken>> FindBySubjectAsync(string subject, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> FindBySubjectAsync(string subject, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await (await GetQueryableAsync()).Where(x => x.Subject == subject).ToListAsync(cancellationToken);
}
public virtual async Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await query(await GetQueryableAsync(), state).FirstOrDefaultAsync(cancellationToken);
}
public virtual async Task<List<OpenIddictToken>> ListAsync(int? count, int? offset, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> 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<IOpenIddictDbContext,
.ToListAsync(cancellationToken);
}
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await query(await GetQueryableAsync(), state).ToListAsync(cancellationToken);
}
public async Task<List<OpenIddictToken>> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken)
public async Task<List<OpenIddictToken>> GetPruneListAsync(DateTime date, int count, bool includeDetails = true, CancellationToken cancellationToken = default)
{
//TODO: Test & Improve?
return await (from token in await GetQueryableAsync()

18
modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Applications/MongoOpenIddictApplicationRepository.cs

@ -17,35 +17,35 @@ public class MongoOpenIddictApplicationRepository : MongoDbRepository<OpenIddict
{
}
public async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictApplication>, IQueryable<TResult>> query, CancellationToken cancellationToken)
public async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictApplication>, IQueryable<TResult>> query, CancellationToken cancellationToken = default)
{
return await query(await GetMongoQueryableAsync(cancellationToken))
.As<IMongoQueryable<OpenIddictApplication>>()
.LongCountAsync(GetCancellationToken(cancellationToken));
}
public async Task<OpenIddictApplication> FindByClientIdAsync(string clientId, CancellationToken cancellationToken)
public async Task<OpenIddictApplication> 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<List<OpenIddictApplication>> FindByPostLogoutRedirectUriAsync(string address, CancellationToken cancellationToken)
public async Task<List<OpenIddictApplication>> 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<List<OpenIddictApplication>> FindByRedirectUriAsync(string address, CancellationToken cancellationToken)
public async Task<List<OpenIddictApplication>> 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<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictApplication>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public async Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictApplication>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await query(await GetMongoQueryableAsync(cancellationToken), state).As<IMongoQueryable<TResult>>().FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
}
public async Task<List<OpenIddictApplication>> ListAsync(int? count, int? offset, CancellationToken cancellationToken)
public async Task<List<OpenIddictApplication>> 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<OpenIddict
.ToListAsync(GetCancellationToken(cancellationToken));
}
public async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictApplication>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictApplication>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await query(await GetMongoQueryableAsync(cancellationToken), state).As<IMongoQueryable<TResult>>().ToListAsync(GetCancellationToken(cancellationToken));
}
}
}

24
modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Authorizations/MongoOpenIddictAuthorizationRepository.cs

@ -18,53 +18,53 @@ public class MongoOpenIddictAuthorizationRepository : MongoDbRepository<OpenIddi
{
}
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictAuthorization>, IQueryable<TResult>> query, CancellationToken cancellationToken)
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictAuthorization>, IQueryable<TResult>> query, CancellationToken cancellationToken = default)
{
return await query(await GetMongoQueryableAsync(cancellationToken)).As<IMongoQueryable<OpenIddictAuthorization>>().LongCountAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<OpenIddictAuthorization>> FindAsync(string subject, Guid client, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<List<OpenIddictAuthorization>> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<List<OpenIddictAuthorization>> FindAsync(string subject, Guid client, string status, string type, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<List<OpenIddictAuthorization>> FindByApplicationIdAsync(Guid applicationId, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<OpenIddictAuthorization> FindByIdAsync(Guid id, CancellationToken cancellationToken)
public virtual async Task<OpenIddictAuthorization> 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<List<OpenIddictAuthorization>> FindBySubjectAsync(string subject, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await query(await GetMongoQueryableAsync(cancellationToken), state).As<IMongoQueryable<TResult>>().FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<OpenIddictAuthorization>> ListAsync(int? count, int? offset, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<OpenIddi
.As<IMongoQueryable<OpenIddictAuthorization>>().ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictAuthorization>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await query(await GetMongoQueryableAsync(cancellationToken), state).As<IMongoQueryable<TResult>>().ToListAsync(cancellationToken);
}
public virtual async Task<List<OpenIddictAuthorization>> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictAuthorization>> 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<OpenIddi
.Take(count)
.ToListAsync(cancellationToken);
}
}
}

2
modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/MongoDB/IOpenIddictMongoDbContext.cs

@ -1,6 +1,7 @@
using MongoDB.Driver;
using Volo.Abp.Data;
using Volo.Abp.MongoDB;
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.MongoDB;
[IgnoreMultiTenancy]
[ConnectionStringName(AbpOpenIddictDbProperties.ConnectionStringName)]
public interface IOpenIddictMongoDbContext : IAbpMongoDbContext
{

2
modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/MongoDB/OpenIddictMongoDbContext.cs

@ -1,6 +1,7 @@
using MongoDB.Driver;
using Volo.Abp.Data;
using Volo.Abp.MongoDB;
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.MongoDB;
[IgnoreMultiTenancy]
[ConnectionStringName(AbpOpenIddictDbProperties.ConnectionStringName)]
public class OpenIddictMongoDbContext : AbpMongoDbContext, IOpenIddictMongoDbContext
{

22
modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Scopes/MongoOpenIddictScopeRepository.cs

@ -17,41 +17,41 @@ public class MongoOpenIddictScopeRepository : MongoDbRepository<OpenIddictMongoD
{
}
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictScope>, IQueryable<TResult>> query, CancellationToken cancellationToken)
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictScope>, IQueryable<TResult>> query, CancellationToken cancellationToken = default)
{
return await query(await GetMongoQueryableAsync(cancellationToken)).As<IMongoQueryable<OpenIddictScope>>().LongCountAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<OpenIddictScope> FindByIdAsync(Guid id, CancellationToken cancellationToken)
public virtual async Task<OpenIddictScope> 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<OpenIddictScope> FindByNameAsync(string name, CancellationToken cancellationToken)
public virtual async Task<OpenIddictScope> 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<List<OpenIddictScope>> FindByNamesAsync(string[] names, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictScope>> FindByNamesAsync(string[] names, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => names.Contains(x.Name))
.As<IMongoQueryable<OpenIddictScope>>()
.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken));
}
public virtual async Task<List<OpenIddictScope>> FindByResourceAsync(string resource, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictScope>> FindByResourceAsync(string resource, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => x.Resources.Contains(resource))
.As<IMongoQueryable<OpenIddictScope>>()
.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken));
}
public virtual async Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await query(await GetMongoQueryableAsync(cancellationToken), state).As<IMongoQueryable<TResult>>().FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<OpenIddictScope>> ListAsync(int? count, int? offset, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictScope>> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await Queryable.OrderBy((await GetMongoQueryableAsync(cancellationToken)), x => x.Id)
.SkipIf<OpenIddictScope, IQueryable<OpenIddictScope>>(offset.HasValue, offset.Value)
@ -60,8 +60,8 @@ public class MongoOpenIddictScopeRepository : MongoDbRepository<OpenIddictMongoD
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictScope>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await query(await GetMongoQueryableAsync(cancellationToken), state).As<IMongoQueryable<TResult>>().ToListAsync(GetCancellationToken(cancellationToken));
}
}
}

28
modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs

@ -19,69 +19,69 @@ public class MongoOpenIddictTokenRepository : MongoDbRepository<OpenIddictMongoD
{
}
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictToken>, IQueryable<TResult>> query, CancellationToken cancellationToken)
public virtual async Task<long> CountAsync<TResult>(Func<IQueryable<OpenIddictToken>, IQueryable<TResult>> query, CancellationToken cancellationToken = default)
{
return await (await GetMongoQueryableAsync(cancellationToken)).LongCountAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<OpenIddictToken>> FindAsync(string subject, Guid client, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> 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<IMongoQueryable<OpenIddictToken>>()
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<OpenIddictToken>> FindAsync(string subject, Guid client, string status, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> 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<IMongoQueryable<OpenIddictToken>>()
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<OpenIddictToken>> FindAsync(string subject, Guid client, string status, string type, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> 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<IMongoQueryable<OpenIddictToken>>()
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<OpenIddictToken>> FindByApplicationIdAsync(Guid applicationId, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> FindByApplicationIdAsync(Guid applicationId, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => x.ApplicationId == applicationId)
.As<IMongoQueryable<OpenIddictToken>>()
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<OpenIddictToken>> FindByAuthorizationIdAsync(Guid authorizationId, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> FindByAuthorizationIdAsync(Guid authorizationId, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => x.AuthorizationId == authorizationId)
.As<IMongoQueryable<OpenIddictToken>>()
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<OpenIddictToken> FindByIdAsync(Guid id, CancellationToken cancellationToken)
public virtual async Task<OpenIddictToken> 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<OpenIddictToken> FindByReferenceIdAsync(string referenceId, CancellationToken cancellationToken)
public virtual async Task<OpenIddictToken> 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<List<OpenIddictToken>> FindBySubjectAsync(string subject, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> FindBySubjectAsync(string subject, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await Queryable.Where((await GetMongoQueryableAsync(cancellationToken)), x => x.Subject == subject)
.As<IMongoQueryable<OpenIddictToken>>()
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await query(await GetMongoQueryableAsync(cancellationToken), state).As<IMongoQueryable<TResult>>().FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<OpenIddictToken>> ListAsync(int? count, int? offset, CancellationToken cancellationToken)
public virtual async Task<List<OpenIddictToken>> ListAsync(int? count, int? offset, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await Queryable.OrderBy((await GetMongoQueryableAsync(cancellationToken)), x => x.Id)
.SkipIf<OpenIddictToken, IQueryable<OpenIddictToken>>(offset.HasValue, offset.Value)
@ -90,12 +90,12 @@ public class MongoOpenIddictTokenRepository : MongoDbRepository<OpenIddictMongoD
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual async Task<List<TResult>> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictToken>, TState, IQueryable<TResult>> query, TState state, bool includeDetails = true, CancellationToken cancellationToken = default)
{
return await query(await GetMongoQueryableAsync(cancellationToken), state).As<IMongoQueryable<TResult>>().ToListAsync(GetCancellationToken(cancellationToken));
}
public async Task<List<OpenIddictToken>> GetPruneListAsync(DateTime date, int count, CancellationToken cancellationToken)
public async Task<List<OpenIddictToken>> 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<OpenIddictMongoD
orderby token.Id
select token).Take(count).ToListAsync(GetCancellationToken(cancellationToken));
}
}
}

21
modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Samples/SampleManager_Tests.cs

@ -1,21 +0,0 @@
using System.Globalization;
using System.Threading.Tasks;
using Xunit;
namespace Volo.Abp.OpenIddict.Samples;
public class SampleManager_Tests : OpenIddictDomainTestBase
{
//private readonly SampleManager _sampleManager;
public SampleManager_Tests()
{
//_sampleManager = GetRequiredService<SampleManager>();
}
[Fact]
public async Task Method1Async()
{
var q = new CultureInfo("zh").Parent.Name;
}
}

9
modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo.Abp.OpenIddict.Domain.Tests.csproj

@ -5,7 +5,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>Volo.Abp.OpenIddict</RootNamespace>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
@ -13,4 +13,11 @@
<ProjectReference Include="..\Volo.Abp.OpenIddict.EntityFrameworkCore.Tests\Volo.Abp.OpenIddict.EntityFrameworkCore.Tests.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="Volo\Abp\OpenIddict\Applications" />
<Folder Include="Volo\Abp\OpenIddict\Authorizations" />
<Folder Include="Volo\Abp\OpenIddict\Scopes" />
<Folder Include="Volo\Abp\OpenIddict\Tokens" />
</ItemGroup>
</Project>

3
modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/OpenIddictDomainTestBase.cs → 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<OpenIddictDomainTestModule>
{

0
modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/OpenIddictDomainTestModule.cs → modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo/Abp/OpenIddict/OpenIddictDomainTestModule.cs

3
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<OpenIddictEntityFrameworkCoreTestModule>
{

11
modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/EntityFrameworkCore/Samples/SampleRepository_Tests.cs

@ -1,11 +0,0 @@
using Volo.Abp.OpenIddict.Samples;
namespace Volo.Abp.OpenIddict.EntityFrameworkCore.Samples;
public class SampleRepository_Tests : SampleRepository_Tests<OpenIddictEntityFrameworkCoreTestModule>
{
/* Don't write custom repository tests here, instead write to
* the base class.
* One exception can be some specific tests related to EF core.
*/
}

2
modules/openiddict/test/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests/Volo.Abp.OpenIddict.EntityFrameworkCore.Tests.csproj

@ -5,7 +5,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>Volo.Abp.OpenIddict</RootNamespace>
<RootNamespace />
</PropertyGroup>
<ItemGroup>

3
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<OpenIddictMongoDbTestModule>
{

13
modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/MongoDB/Samples/SampleRepository_Tests.cs

@ -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<OpenIddictMongoDbTestModule>
{
/* Don't write custom repository tests here, instead write to
* the base class.
* One exception can be some specific tests related to MongoDB.
*/
}

2
modules/openiddict/test/Volo.Abp.OpenIddict.MongoDB.Tests/Volo.Abp.OpenIddict.MongoDB.Tests.csproj

@ -5,7 +5,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>Volo.Abp.OpenIddict</RootNamespace>
<RootNamespace />
</PropertyGroup>
<ItemGroup>

16
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";
}

159
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;
}
}

26
modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Samples/SampleRepository_Tests.cs

@ -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<TStartupModule> : OpenIddictTestBase<TStartupModule>
where TStartupModule : IAbpModule
{
//private readonly ISampleRepository _sampleRepository;
protected SampleRepository_Tests()
{
//_sampleRepository = GetRequiredService<ISampleRepository>();
}
[Fact]
public async Task Method1Async()
{
}
}

2
modules/openiddict/test/Volo.Abp.OpenIddict.TestBase/Volo.Abp.OpenIddict.TestBase.csproj

@ -5,7 +5,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>Volo.Abp.OpenIddict</RootNamespace>
<RootNamespace />
</PropertyGroup>
<ItemGroup>

Loading…
Cancel
Save