Browse Source

Merge pull request #18347 from abpframework/openiddict-5

Upgrade `OpenIddict` to `5.0.0-rc1`.
pull/18493/head
Halil İbrahim Kalkan 2 years ago
committed by GitHub
parent
commit
3884df4a61
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      Directory.Packages.props
  2. 108
      docs/en/Migration-Guides/OpenIddict4-to-5.md
  3. BIN
      docs/en/Migration-Guides/images/openiddict-pro-application-modal.png
  4. BIN
      docs/en/Migration-Guides/images/openiddict-pro-application-timelife-modal.png
  5. 13
      modules/openiddict/app/OpenIddict.Demo.API/Program.cs
  6. 35
      modules/openiddict/app/OpenIddict.Demo.Client.BlazorWASM/Pages/Index.razor
  7. 1
      modules/openiddict/app/OpenIddict.Demo.Client.BlazorWASM/Program.cs
  8. 19
      modules/openiddict/app/OpenIddict.Demo.Client.Mvc/Pages/Index.cshtml
  9. 9
      modules/openiddict/app/OpenIddict.Demo.Server/EntityFrameworkCore/ServerDataSeedContributor.cs
  10. 18
      modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20231207053813_Initial.Designer.cs
  11. 5
      modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20231207053813_Initial.cs
  12. 16
      modules/openiddict/app/OpenIddict.Demo.Server/Migrations/ServerDbContextModelSnapshot.cs
  13. 7
      modules/openiddict/app/OpenIddict.Demo.Server/wwwroot/libs/abp/jquery/abp.jquery.js
  14. 268
      modules/openiddict/app/OpenIddict.Demo.Server/yarn.lock
  15. 2
      modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/RemoveClaimsFromClientCredentialsGrantType.cs
  16. 2
      modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Scopes/AttachScopes.cs
  17. 21
      modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpOpenIddictWildcardDomainBase.cs
  18. 1
      modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpOpenIddictWildcardDomainOptions.cs
  19. 8
      modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpValidateAuthorizedParty.cs
  20. 6
      modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpValidateClientPostLogoutRedirectUri.cs
  21. 8
      modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpValidateClientRedirectUri.cs
  22. 6
      modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpValidatePostLogoutRedirectUriParameter.cs
  23. 4
      modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpValidateRedirectUriParameter.cs
  24. 4
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationConsts.cs
  25. 135
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs
  26. 20
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplication.cs
  27. 27
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationExtensions.cs
  28. 20
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationModel.cs
  29. 16
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationCache.cs
  30. 5
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationStore.cs
  31. 2
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/IOpenIddictAuthorizationRepository.cs
  32. 10
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Tokens/AbpOpenIddictTokenStore.cs
  33. 4
      modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Tokens/IOpenIddictTokenRepository.cs
  34. 6
      modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Authorizations/EfCoreOpenIddictAuthorizationRepository.cs
  35. 7
      modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/EntityFrameworkCore/OpenIddictDbContextModelCreatingExtensions.cs
  36. 12
      modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Tokens/EfCoreOpenIddictTokenRepository.cs
  37. 3
      modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Authorizations/MongoOpenIddictAuthorizationRepository.cs
  38. 13
      modules/openiddict/src/Volo.Abp.OpenIddict.MongoDB/Volo/Abp/OpenIddict/Tokens/MongoOpenIddictTokenRepository.cs
  39. 80
      modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore_Tests.cs
  40. 18
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231207053812_Initial.Designer.cs
  41. 5
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231207053812_Initial.cs
  42. 16
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs
  43. 2
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/Data/OpenIddictDataSeedContributor.cs
  44. 2
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Data/OpenIddictDataSeedContributor.cs
  45. 18
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231207053830_Initial.Designer.cs
  46. 5
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231207053830_Initial.cs
  47. 16
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs
  48. 2
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Data/OpenIddictDataSeedContributor.cs
  49. 2
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Data/OpenIddictDataSeedContributor.cs
  50. 18
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231207053820_Initial.Designer.cs
  51. 5
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231207053820_Initial.cs
  52. 16
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs
  53. 18
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231207053825_Initial.Designer.cs
  54. 5
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231207053825_Initial.cs
  55. 16
      templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs
  56. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/OpenIddict/OpenIddictDataSeedContributor.cs
  57. 18
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231207053523_Initial.Designer.cs
  58. 5
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231207053523_Initial.cs
  59. 16
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs
  60. 18
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231207053828_Initial.Designer.cs
  61. 5
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231207053828_Initial.cs
  62. 16
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs
  63. 2
      templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/OpenIddict/OpenIddictDataSeedContributor.cs

10
Directory.Packages.props

@ -113,11 +113,11 @@
<PackageVersion Include="NUglify" Version="1.21.0" />
<PackageVersion Include="Nullable" Version="1.3.1" />
<PackageVersion Include="Octokit" Version="9.0.0" />
<PackageVersion Include="OpenIddict.Abstractions" Version="4.10.0" />
<PackageVersion Include="OpenIddict.Core" Version="4.10.0" />
<PackageVersion Include="OpenIddict.Server.AspNetCore" Version="4.10.0" />
<PackageVersion Include="OpenIddict.Validation.AspNetCore" Version="4.10.0" />
<PackageVersion Include="OpenIddict.Validation.ServerIntegration" Version="4.10.0" />
<PackageVersion Include="OpenIddict.Abstractions" Version="5.0.0-rc1.23614.58" />
<PackageVersion Include="OpenIddict.Core" Version="5.0.0-rc1.23614.58" />
<PackageVersion Include="OpenIddict.Server.AspNetCore" Version="5.0.0-rc1.23614.58" />
<PackageVersion Include="OpenIddict.Validation.AspNetCore" Version="5.0.0-rc1.23614.58" />
<PackageVersion Include="OpenIddict.Validation.ServerIntegration" Version="5.0.0-rc1.23614.58" />
<PackageVersion Include="Oracle.EntityFrameworkCore" Version="8.21.121" />
<PackageVersion Include="Polly" Version="8.2.0" />
<PackageVersion Include="Polly.Extensions.Http" Version="3.0.0" />

108
docs/en/Migration-Guides/OpenIddict4-to-5.md

@ -0,0 +1,108 @@
# OpenIddict 4.x to 5.x Migration Guide
The 5.0 release of OpenIddict is a major release that introduces breaking changes.
Check this blog [Introducing native applications, per-client token lifetimes and client assertions support in OpenIddict 5.0 preview1](https://kevinchalet.com/2023/10/20/introducing-native-applications-per-client-token-lifetimes-and-client-assertions-support-in-openiddict-5-0-preview1/) for the new features introduced in OpenIddict 5.0.
I will show the changes you need to make to do the migration.
> Please backup your database before doing the migration.
## OpenIddictApplication changes
1. The `Type(string)` of the `OpenIddictApplication` has been renamed to `ClientType(string)`.
2. The `ApplicationType(string)` has been added to the `OpenIddictApplication` entity.
3. The `JsonWebKeySet(string)` has been added to the `OpenIddictApplication` entity.
4. The `Settings(string)` has been added to the `OpenIddictApplication` entity.
The new migration looks like this:
````csharp
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OpenIddict.Demo.Server.Migrations
{
/// <inheritdoc />
public partial class openiddict5 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.RenameColumn(
name: "Type",
table: "OpenIddictApplications",
newName: "ClientType");
migrationBuilder.AddColumn<string>(
name: "ApplicationType",
table: "OpenIddictApplications",
type: "nvarchar(50)",
maxLength: 50,
nullable: true);
migrationBuilder.AddColumn<string>(
name: "JsonWebKeySet",
table: "OpenIddictApplications",
type: "nvarchar(max)",
nullable: true);
migrationBuilder.AddColumn<string>(
name: "Settings",
table: "OpenIddictApplications",
type: "nvarchar(max)",
nullable: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "ApplicationType",
table: "OpenIddictApplications");
migrationBuilder.DropColumn(
name: "JsonWebKeySet",
table: "OpenIddictApplications");
migrationBuilder.DropColumn(
name: "Settings",
table: "OpenIddictApplications");
migrationBuilder.RenameColumn(
name: "ClientType",
table: "OpenIddictApplications",
newName: "Type");
}
}
}
````
## OpenIddictApplicationModel changes
1. The `Type(string)` of the `OpenIddictApplicationModel` has been renamed to `ClientType(string)`.
2. The `ApplicationType(string)` has been added to the `OpenIddictApplicationModel` entity.
3. The `JsonWebKeySet`([JsonWebKeySet](https://learn.microsoft.com/en-us/dotnet/api/microsoft.identitymodel.tokens.jsonwebkeyset)) has been added to the `OpenIddictApplicationModel` entity.
4. The `Settings(string)` has been added to the `OpenIddictApplicationModel` entity.
## OpenIddictApplicationDescriptor changes
You have to change the `Type` to `ClientType` when creating a new `AbpApplicationDescriptor` or `OpenIddictApplicationDescriptor`.
````csharp
var application = new AbpApplicationDescriptor {
ClientId = name,
- Type = type,
+ ClientType = type,
ClientSecret = secret,
ConsentType = consentType,
DisplayName = displayName,
````
## OpenIddict Pro module UI changes
You can change the `ApplicationType` when creating/editing a OpenIddict's application, also set time life of the tokens for each application.
![ropeniddict-pro-application-modal](images/openiddict-pro-application-modal.png)
![openiddict-pro-application-timelife-modal](images/openiddict-pro-application-timelife-modal.png)

BIN
docs/en/Migration-Guides/images/openiddict-pro-application-modal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

BIN
docs/en/Migration-Guides/images/openiddict-pro-application-timelife-modal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

13
modules/openiddict/app/OpenIddict.Demo.API/Program.cs

@ -1,11 +1,19 @@
using System.Text;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
var builder = WebApplication.CreateBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(policy =>
{
policy.WithOrigins("https://localhost:44304")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
// Add services to the container.
builder.Services.AddControllers();
@ -31,6 +39,7 @@ if (app.Environment.IsDevelopment())
app.UseHttpsRedirection();
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

35
modules/openiddict/app/OpenIddict.Demo.Client.BlazorWASM/Pages/Index.razor

@ -1,7 +1,11 @@
@page "/"
@using System.Security.Claims
@using System.Text.Json
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using System.Net.Http.Headers
@inject AuthenticationStateProvider AuthenticationStateProvider
@inject IAccessTokenProvider AccessTokenProvider
<PageTitle>Index</PageTitle>
@ -17,14 +21,31 @@ Welcome to your new app.
@if (_claims.Count() > 0)
{
<p>
@_accessToken
</p>
<ul>
@foreach (var claim in _claims)
{
<li>@claim.Type: @claim.Value</li>
}
</ul>
}
<code style="display: block; white-space: pre-wrap; text-align: left">
@{
var apiResponse = "No API response";
if (_claimsResponseString != null)
{
apiResponse = JsonSerializer.Serialize(JsonDocument.Parse(_claimsResponseString), new JsonSerializerOptions
{
WriteIndented = true
});
}
}
@apiResponse;
</code>
}
@code {
@ -35,6 +56,8 @@ Welcome to your new app.
}
private IEnumerable<Claim> _claims = Enumerable.Empty<Claim>();
private string? _accessToken;
private string? _claimsResponseString;
private async Task GetClaimsPrincipalData()
{
@ -43,8 +66,16 @@ Welcome to your new app.
if (user.Identity.IsAuthenticated)
{
_claims = user.Claims;
var result = await AccessTokenProvider.RequestAccessToken();
result.TryGetToken(out var token);
_accessToken = token?.Value;
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://localhost:44303/api/claims");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _accessToken);
_claimsResponseString = await (await client.SendAsync(request)).Content.ReadAsStringAsync();
}
}
}

1
modules/openiddict/app/OpenIddict.Demo.Client.BlazorWASM/Program.cs

@ -21,6 +21,7 @@ builder.Services.AddOidcAuthentication(options =>
options.ProviderOptions.DefaultScopes.Add("roles");
options.ProviderOptions.DefaultScopes.Add("email");
options.ProviderOptions.DefaultScopes.Add("phone");
options.ProviderOptions.DefaultScopes.Add("AbpAPI");
});
await builder.Build().RunAsync();

19
modules/openiddict/app/OpenIddict.Demo.Client.Mvc/Pages/Index.cshtml

@ -45,24 +45,5 @@
}
@apiResponse;
</code>
request = new HttpRequestMessage(HttpMethod.Get, "https://localhost:44301/api/claims");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", await HttpContext.GetTokenAsync("access_token"));
response = await client.SendAsync(request);
<code style="display: block; white-space: pre-wrap; text-align: left">
@{
apiResponse = response.StatusCode.ToString();
if (response.IsSuccessStatusCode)
{
apiResponse = JsonSerializer.Serialize(JsonDocument.Parse(await response.Content.ReadAsStringAsync()), new JsonSerializerOptions
{
WriteIndented = true
});
}
}
@apiResponse;
</code>
}
</div>

9
modules/openiddict/app/OpenIddict.Demo.Server/EntityFrameworkCore/ServerDataSeedContributor.cs

@ -47,8 +47,10 @@ public class ServerDataSeedContributor : IDataSeedContributor, ITransientDepende
{
await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
{
ApplicationType = OpenIddictConstants.ApplicationTypes.Web,
ClientId = "AbpApp",
ClientSecret = "1q2w3e*",
ClientType = OpenIddictConstants.ClientTypes.Confidential,
ConsentType = OpenIddictConstants.ConsentTypes.Explicit,
DisplayName = "Abp Application",
PostLogoutRedirectUris =
@ -93,6 +95,11 @@ public class ServerDataSeedContributor : IDataSeedContributor, ITransientDepende
OpenIddictConstants.Permissions.Scopes.Address,
OpenIddictConstants.Permissions.Scopes.Phone,
OpenIddictConstants.Permissions.Prefixes.Scope + "AbpAPI"
},
Settings =
{
// Use a shorter access token lifetime for tokens issued to the Postman application.
[OpenIddictConstants.Settings.TokenLifetimes.AccessToken] = TimeSpan.FromMinutes(5).ToString("c", CultureInfo.InvariantCulture)
}
});
}
@ -101,7 +108,9 @@ public class ServerDataSeedContributor : IDataSeedContributor, ITransientDepende
{
await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
{
ApplicationType = OpenIddictConstants.ApplicationTypes.Web,
ClientId = "AbpBlazorWASMApp",
ClientType = OpenIddictConstants.ClientTypes.Public,
ConsentType = OpenIddictConstants.ConsentTypes.Explicit,
DisplayName = "Abp Blazor WASM Application",
PostLogoutRedirectUris =

18
modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20231116094249_Initial.Designer.cs → modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20231207053813_Initial.Designer.cs

@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace OpenIddict.Demo.Server.Migrations
{
[DbContext(typeof(ServerDbContext))]
[Migration("20231116094249_Initial")]
[Migration("20231207053813_Initial")]
partial class Initial
{
/// <inheritdoc />
@ -818,6 +818,10 @@ namespace OpenIddict.Demo.Server.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -825,6 +829,10 @@ namespace OpenIddict.Demo.Server.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -872,6 +880,9 @@ namespace OpenIddict.Demo.Server.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -898,9 +909,8 @@ namespace OpenIddict.Demo.Server.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

5
modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20231116094249_Initial.cs → modules/openiddict/app/OpenIddict.Demo.Server/Migrations/20231207053813_Initial.cs

@ -340,17 +340,20 @@ namespace OpenIddict.Demo.Server.Migrations
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ApplicationType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ClientId = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
ClientSecret = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ConsentType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: true),
DisplayNames = table.Column<string>(type: "nvarchar(max)", nullable: true),
JsonWebKeySet = table.Column<string>(type: "nvarchar(max)", nullable: true),
Permissions = table.Column<string>(type: "nvarchar(max)", nullable: true),
PostLogoutRedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Properties = table.Column<string>(type: "nvarchar(max)", nullable: true),
RedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Requirements = table.Column<string>(type: "nvarchar(max)", nullable: true),
Type = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
Settings = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
LogoUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: false),

16
modules/openiddict/app/OpenIddict.Demo.Server/Migrations/ServerDbContextModelSnapshot.cs

@ -815,6 +815,10 @@ namespace OpenIddict.Demo.Server.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -822,6 +826,10 @@ namespace OpenIddict.Demo.Server.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -869,6 +877,9 @@ namespace OpenIddict.Demo.Server.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -895,9 +906,8 @@ namespace OpenIddict.Demo.Server.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

7
modules/openiddict/app/OpenIddict.Demo.Server/wwwroot/libs/abp/jquery/abp.jquery.js

@ -371,13 +371,18 @@ var abp = abp || {};
};
var _loadScript = function (url, loadCallback, failCallback) {
var nonce = document.body.nonce || document.body.getAttribute('nonce');
_loadFromUrl(url, loadCallback, failCallback, function (urlInfo) {
$.get({
url: url,
dataType: 'text'
})
.done(function (script) {
$.globalEval(script);
if(nonce){
$.globalEval(script, { nonce: nonce});
}else{
$.globalEval(script);
}
urlInfo.succeed();
})
.fail(function () {

268
modules/openiddict/app/OpenIddict.Demo.Server/yarn.lock

@ -2,39 +2,39 @@
# yarn lockfile v1
"@abp/aspnetcore.mvc.ui.theme.basic@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-7.0.0.tgz#b61845e6c2d7486575ab0fd177e7c87005f51d54"
integrity sha512-T4rhCG+O3agwD0pt7m/977ID8Hm0ME9zlqyHIQWiIIaRbicmgblr3OY5szv0C5ttCTUsjzeYlxtcv7I+7SXcaA==
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~7.0.0"
"@abp/aspnetcore.mvc.ui.theme.shared@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-7.0.0.tgz#d2c2785dfe0e482677a38d19f40399eddc246a3b"
integrity sha512-LNetkktN3cMuo28bTrKKC0qYo4vo6OKxWTSGX7tXI9uyd0fPHupwQSh5cNzrJ6KZjNLxINn6MphWiSbcTRYLZw==
dependencies:
"@abp/aspnetcore.mvc.ui" "~7.0.0"
"@abp/bootstrap" "~7.0.0"
"@abp/bootstrap-datepicker" "~7.0.0"
"@abp/bootstrap-daterangepicker" "~7.0.0"
"@abp/datatables.net-bs5" "~7.0.0"
"@abp/font-awesome" "~7.0.0"
"@abp/jquery-form" "~7.0.0"
"@abp/jquery-validation-unobtrusive" "~7.0.0"
"@abp/lodash" "~7.0.0"
"@abp/luxon" "~7.0.0"
"@abp/malihu-custom-scrollbar-plugin" "~7.0.0"
"@abp/moment" "~7.0.0"
"@abp/select2" "~7.0.0"
"@abp/sweetalert2" "~7.0.0"
"@abp/timeago" "~7.0.0"
"@abp/toastr" "~7.0.0"
"@abp/aspnetcore.mvc.ui@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-7.0.0.tgz#9b55260d41c3dc0f94c6210b88ed8cdb549fea05"
integrity sha512-Ualz90DAgixUOV/B4xoQuGpSfpyDp8vsxB/56qnHcWtbHqdI9lEjdmZstH2CwV6Ey6vIDNMlPR3azbQlEkwslg==
"@abp/aspnetcore.mvc.ui.theme.basic@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/aspnetcore.mvc.ui.theme.basic/-/@abp/aspnetcore.mvc.ui.theme.basic-8.0.0-rc.2.tgz#ff10cf70d483fd12304e463ef240c113fceb2bb3"
integrity sha1-/xDPcNSD/RIwTkY+8kDBE/zrK7M=
dependencies:
"@abp/aspnetcore.mvc.ui.theme.shared" "~8.0.0-rc.2"
"@abp/aspnetcore.mvc.ui.theme.shared@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/aspnetcore.mvc.ui.theme.shared/-/@abp/aspnetcore.mvc.ui.theme.shared-8.0.0-rc.2.tgz#db570c960ad1b250292a0211317634fbeb762a52"
integrity sha1-21cMlgrRslApKgIRMXY0++t2KlI=
dependencies:
"@abp/aspnetcore.mvc.ui" "~8.0.0-rc.2"
"@abp/bootstrap" "~8.0.0-rc.2"
"@abp/bootstrap-datepicker" "~8.0.0-rc.2"
"@abp/bootstrap-daterangepicker" "~8.0.0-rc.2"
"@abp/datatables.net-bs5" "~8.0.0-rc.2"
"@abp/font-awesome" "~8.0.0-rc.2"
"@abp/jquery-form" "~8.0.0-rc.2"
"@abp/jquery-validation-unobtrusive" "~8.0.0-rc.2"
"@abp/lodash" "~8.0.0-rc.2"
"@abp/luxon" "~8.0.0-rc.2"
"@abp/malihu-custom-scrollbar-plugin" "~8.0.0-rc.2"
"@abp/moment" "~8.0.0-rc.2"
"@abp/select2" "~8.0.0-rc.2"
"@abp/sweetalert2" "~8.0.0-rc.2"
"@abp/timeago" "~8.0.0-rc.2"
"@abp/toastr" "~8.0.0-rc.2"
"@abp/aspnetcore.mvc.ui@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/aspnetcore.mvc.ui/-/@abp/aspnetcore.mvc.ui-8.0.0-rc.2.tgz#57099c3064f462713940a1d40fbddfe7b14510eb"
integrity sha1-VwmcMGT0YnE5QKHUD73f57FFEOs=
dependencies:
ansi-colors "^4.1.1"
extend-object "^1.0.0"
@ -43,160 +43,160 @@
merge-stream "^2.0.0"
micromatch "^4.0.2"
"@abp/bootstrap-datepicker@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-7.0.0.tgz#7d83206c7a496addd9136ebd08635fd55e88e004"
integrity sha512-IBr1lyptW1w8E34yDfx8UcY/9QhWn54X+p1VsVi5vNsabIw/eV2cizfU200w7qdWRENJxWR2rCbvPAvfB79erA==
"@abp/bootstrap-datepicker@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/bootstrap-datepicker/-/@abp/bootstrap-datepicker-8.0.0-rc.2.tgz#85e41ff35b7306040e0dfdaabc04c9dec280ae0f"
integrity sha1-heQf81tzBgQODf2qvATJ3sKArg8=
dependencies:
bootstrap-datepicker "^1.9.0"
"@abp/bootstrap-daterangepicker@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-7.0.0.tgz#8bbbbb5696edbe9dfb02c5057e5aaf0b1e4b3296"
integrity sha512-+dWOj3H5rerpt1JMIWeSEjWh2WkJxYy944BBO42G0TYVghrWFSZkpu3HQTJu4hc/WSEFcHBbE5DmbGmg8tSpvA==
"@abp/bootstrap-daterangepicker@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/bootstrap-daterangepicker/-/@abp/bootstrap-daterangepicker-8.0.0-rc.2.tgz#9380b4e29c69fe8ecec4877c9bbe443857e2e902"
integrity sha1-k4C04pxp/o7OxId8m75EOFfi6QI=
dependencies:
bootstrap-daterangepicker "^3.1.0"
"@abp/bootstrap@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-7.0.0.tgz#f28bf80bf0422c726a563588ed07697d0c990ec9"
integrity sha512-7u6x8hPf4ldpoxpVYZrIvo9AvVdUQdASaDWXgYiuIjgR+xvnVwD1cWI/jzAhKLnnVXfCpv9pcUYp6bfyCHpO8g==
"@abp/bootstrap@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/bootstrap/-/@abp/bootstrap-8.0.0-rc.2.tgz#9d36df7aa5b78ada6739633dabedf0c05fdedbde"
integrity sha1-nTbfeqW3itpnOWM9q+3wwF/e294=
dependencies:
"@abp/core" "~7.0.0"
"@abp/core" "~8.0.0-rc.2"
bootstrap "^5.1.3"
"@abp/core@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/core/-/core-7.0.0.tgz#f2f62ea826563cb7498dff1534f2e87a875002e4"
integrity sha512-I9V+amo8a4eYlKeMV6fxb+2uvBLZkuJv78IRilmL6jOxg5F9mJuvPzg7XQugMnDQ9NZXErjDW04DyR/5OfeIiA==
"@abp/core@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/core/-/@abp/core-8.0.0-rc.2.tgz#6167929da30563b3b2f1938be40648bd08db61af"
integrity sha1-YWeSnaMFY7Oy8ZOL5AZIvQjbYa8=
dependencies:
"@abp/utils" "~7.0.0"
"@abp/utils" "~8.0.0-rc.2"
"@abp/datatables.net-bs5@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-7.0.0.tgz#f85e62d8f634dd0493f6e0bf093b43b1a83ccd1c"
integrity sha512-yul58rrMylQJUJS4aUZNpm85dLbU1IF84LESAqFKrRST0v3uK3/qXdXgir2XQt0cuOv33rQIrljKRovxxv57zA==
"@abp/datatables.net-bs5@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/datatables.net-bs5/-/@abp/datatables.net-bs5-8.0.0-rc.2.tgz#a5d36298ad7ddb59dc66917eeb10f3898d4f6e39"
integrity sha1-pdNimK1921ncZpF+6xDziY1Pbjk=
dependencies:
"@abp/datatables.net" "~7.0.0"
"@abp/datatables.net" "~8.0.0-rc.2"
datatables.net-bs5 "^1.11.4"
"@abp/datatables.net@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-7.0.0.tgz#d6b0557695070a3fdb939e4f3c6593a092881081"
integrity sha512-vETe0eUB5LXQP3oHdwjMibXYFcXmwjkZea3ZoCHH9IG/gLmmrr0zM8yQHwRJvJv+wkxUtp2cWwcMMLFmK5o2Aw==
"@abp/datatables.net@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/datatables.net/-/@abp/datatables.net-8.0.0-rc.2.tgz#267dcb7a49b708af83de3dfbdeb2f42617d46708"
integrity sha1-Jn3Lekm3CK+D3j373rL0JhfUZwg=
dependencies:
"@abp/jquery" "~7.0.0"
"@abp/jquery" "~8.0.0-rc.2"
datatables.net "^1.11.4"
"@abp/font-awesome@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-7.0.0.tgz#938f4e4cf3d46e0ec45fc60f568519f4df7221a3"
integrity sha512-UXiO/y9yrguhvev8BmFEKzdek0wMC25IwppMOsVmxtv/SiCRUsHGIzyTVs1ZLuvlL94cuxxqfIHrQrat423/0g==
"@abp/font-awesome@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/font-awesome/-/@abp/font-awesome-8.0.0-rc.2.tgz#2c7f392d4a7971f34ef6fa2835901183b2731976"
integrity sha1-LH85LUp5cfNO9vooNZARg7JzGXY=
dependencies:
"@abp/core" "~7.0.0"
"@abp/core" "~8.0.0-rc.2"
"@fortawesome/fontawesome-free" "^5.15.4"
"@abp/jquery-form@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-7.0.0.tgz#86a051c9d98b51ce70d15ee578cf4f5d9c628030"
integrity sha512-nm89ufHtO+QFaVZ+TwihuWgmEpxhaFoUUbuD7Plzt3PpFWeGet722yTma7MUr10FUTIshOiBBWJ84+ak+CMqgA==
"@abp/jquery-form@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/jquery-form/-/@abp/jquery-form-8.0.0-rc.2.tgz#45e2a3d838ed8c2b3f59aa6eb6f62b2e7a5934fa"
integrity sha1-ReKj2DjtjCs/WaputvYrLnpZNPo=
dependencies:
"@abp/jquery" "~7.0.0"
"@abp/jquery" "~8.0.0-rc.2"
jquery-form "^4.3.0"
"@abp/jquery-validation-unobtrusive@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-7.0.0.tgz#5049fc367ed8ed7b0faff63b89a7eee1619afaf9"
integrity sha512-B8OPreI05utq3IPyU+/713e0c35OjQrS5OKO7dZs1D6V9L6S/VzkeD3sdoVJQ0Syh59KcSr3IGr1F9VM1O0LJw==
"@abp/jquery-validation-unobtrusive@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/jquery-validation-unobtrusive/-/@abp/jquery-validation-unobtrusive-8.0.0-rc.2.tgz#c6a4e3081f1d7eadff34592b8cf0498db40170a0"
integrity sha1-xqTjCB8dfq3/NFkrjPBJjbQBcKA=
dependencies:
"@abp/jquery-validation" "~7.0.0"
"@abp/jquery-validation" "~8.0.0-rc.2"
jquery-validation-unobtrusive "^3.2.12"
"@abp/jquery-validation@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-7.0.0.tgz#eebadba703391ce6dea1a5217a177af0bafe4f4b"
integrity sha512-6YrYZhVZBTt3897eR0t/b9cQp4gMsiylhe6xqtZBhcuTlS5q0ac30UeiOj9bsBisg4TWS6+3XZYUccdM38YE0Q==
"@abp/jquery-validation@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/jquery-validation/-/@abp/jquery-validation-8.0.0-rc.2.tgz#4282682538c450bffaba2558cbcc8ac9779736b6"
integrity sha1-QoJoJTjEUL/6uiVYy8yKyXeXNrY=
dependencies:
"@abp/jquery" "~7.0.0"
"@abp/jquery" "~8.0.0-rc.2"
jquery-validation "^1.19.3"
"@abp/jquery@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-7.0.0.tgz#0ec51b53c92bd23100bbbe1f719e7e1c13c41406"
integrity sha512-Gsyl1Bl6ahIv1Sc0y1Zt9iaYeS3HCjx7mxJGMitQiKOmKRNHDX6bOzcUN2tY3CaZ+Q5lgHw9RNehleFF2AasJw==
"@abp/jquery@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/jquery/-/@abp/jquery-8.0.0-rc.2.tgz#e54905bbd5efa13f9a87854608f103e15757a26c"
integrity sha1-5UkFu9XvoT+ah4VGCPED4VdXomw=
dependencies:
"@abp/core" "~7.0.0"
"@abp/core" "~8.0.0-rc.2"
jquery "~3.6.0"
"@abp/lodash@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-7.0.0.tgz#7086287a6fafee12a44b2c2abc3c9bea4338ebde"
integrity sha512-JbUxeZNB/RYETPxALKuMJ78SeuVxHPXjsl1lv21XrRhOU6SaQMIFMHWL7AlfLjLS/ibbSXHoHM1K/YwkN3zAZQ==
"@abp/lodash@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/lodash/-/@abp/lodash-8.0.0-rc.2.tgz#1bca1821db7524e1c612cfe23319abab5d874453"
integrity sha1-G8oYIdt1JOHGEs/iMxmrq12HRFM=
dependencies:
"@abp/core" "~7.0.0"
"@abp/core" "~8.0.0-rc.2"
lodash "^4.17.21"
"@abp/luxon@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-7.0.0.tgz#5f781dc826fc1f15af9da52b032f2d4fc1b61c4d"
integrity sha512-zbHZuvkH4F5f0/r2Rfr42k+iNkHlJJKZMCyaCjcDcypLHg/HSsVnpVNjqCrdggSxDgx/7jdf6M3aRIa6hINthA==
"@abp/luxon@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/luxon/-/@abp/luxon-8.0.0-rc.2.tgz#336800a04fd72c42f2b9a00da864a708d0c730c6"
integrity sha1-M2gAoE/XLELyuaANqGSnCNDHMMY=
dependencies:
"@abp/core" "~7.0.0"
"@abp/core" "~8.0.0-rc.2"
luxon "^2.3.0"
"@abp/malihu-custom-scrollbar-plugin@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-7.0.0.tgz#6d01a2a75d04bb1919a9ef4c6bfb8559fb2a1744"
integrity sha512-S6rlGNtcgFtfyuF2/1yoeA6VWE1a4ChGWll08DAwM9oz4ULU2vsjQCsbcLB3uhgmTKmF0Q7I964AF1Ngc7FfrQ==
"@abp/malihu-custom-scrollbar-plugin@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/malihu-custom-scrollbar-plugin/-/@abp/malihu-custom-scrollbar-plugin-8.0.0-rc.2.tgz#30e7f8fb1edfa921e413f7c166fcac03c9702993"
integrity sha1-MOf4+x7fqSHkE/fBZvysA8lwKZM=
dependencies:
"@abp/core" "~7.0.0"
"@abp/core" "~8.0.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
"@abp/moment@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-7.0.0.tgz#fd5480a0f4e59e6cad7fb7dda1167e75eb9b872d"
integrity sha512-22gWkJgb16DAuq4dqol5gNR1xXkJLXfI30lOOMFhGAuFNlyhQiaZH7tk/pt/wk8+74zi5swdcx42R4C4ioJsMg==
"@abp/moment@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/moment/-/@abp/moment-8.0.0-rc.2.tgz#47e65d9cd7f58d2902da2df584d23d6500c9aa4e"
integrity sha1-R+ZdnNf1jSkC2i31hNI9ZQDJqk4=
dependencies:
moment "^2.9.0"
"@abp/select2@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-7.0.0.tgz#510b6a281beb10708609308fe8a001ceb294bdbe"
integrity sha512-1LsxnglYz87zus2XLiknmnISq1WB+FOqNVkVEV5B/tgjZxB47QDHlBAsDq+CVSUdHupvyaoqjvzjhepQWn4lXg==
"@abp/select2@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/select2/-/@abp/select2-8.0.0-rc.2.tgz#eab2d8c788490dfb42e164535a2ec0e5341c9463"
integrity sha1-6rLYx4hJDftC4WRTWi7A5TQclGM=
dependencies:
"@abp/core" "~7.0.0"
"@abp/core" "~8.0.0-rc.2"
select2 "^4.0.13"
"@abp/sweetalert2@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-7.0.0.tgz#0c4ff48755bbc13e00430a5c7107a2d3c0f4ffc6"
integrity sha512-mVFfikx48hnYqQzvmkrYw1pa+ggKkLD+S94U70aEMZE+pqYsVzkPHckFKPqi+iQL265iQ8zTLgeclYCrOsEnrg==
"@abp/sweetalert2@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/sweetalert2/-/@abp/sweetalert2-8.0.0-rc.2.tgz#7c3ca3ffff01a43a3603f49a1986f162157e2a72"
integrity sha1-fDyj//8BpDo2A/SaGYbxYhV+KnI=
dependencies:
"@abp/core" "~7.0.0"
"@abp/core" "~8.0.0-rc.2"
sweetalert2 "^11.3.6"
"@abp/timeago@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-7.0.0.tgz#b5c0a98511cef63d24d51c531adccc135d12706e"
integrity sha512-Y4PZxP4YVUVIQp8mQtNCxdsK9JxxQj7QJURGVtS+v4bfr6HO9GHK2Byq57ypCdB6hHcn+DJ/NHJV8qANcjHnFA==
"@abp/timeago@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/timeago/-/@abp/timeago-8.0.0-rc.2.tgz#ed98d40b1fa2fa7e65bc3ad84db896e32184a112"
integrity sha1-7ZjUCx+i+n5lvDrYTbiW4yGEoRI=
dependencies:
"@abp/jquery" "~7.0.0"
"@abp/jquery" "~8.0.0-rc.2"
timeago "^1.6.7"
"@abp/toastr@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-7.0.0.tgz#4704e61aa0ac741dd4a53505533a5278b5c205cb"
integrity sha512-kDd4YkyOInBs1u1enOL6ov8HKUJwZbJ3Dx0GI+UNnl+7/LFboeWBfsGukDTVaCn8U73jEP+wbc98mTe8j2coZA==
"@abp/toastr@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/toastr/-/@abp/toastr-8.0.0-rc.2.tgz#c494bb1070ef6aa80d443d11a61f93c03d82f543"
integrity sha1-xJS7EHDvaqgNRD0Rph+TwD2C9UM=
dependencies:
"@abp/jquery" "~7.0.0"
"@abp/jquery" "~8.0.0-rc.2"
toastr "^2.1.4"
"@abp/utils@~7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-7.0.0.tgz#662645b8774b048ba5eb6f7971fa1f20b909ad96"
integrity sha512-JLufGsUmZ8jUdZNteXXp/phYqVCiOHO6ymMyd2oUjVEnRh3wRtRs4snhN2MQruGa6KCbPHkjGhXiQTUo75IbaQ==
"@abp/utils@~8.0.0-rc.2":
version "8.0.0-rc.2"
resolved "https://www.myget.org/F/abp-nightly/npm/@abp/utils/-/@abp/utils-8.0.0-rc.2.tgz#c2959e5161e4102d5757a571d16bd3a4316779fb"
integrity sha1-wpWeUWHkEC1XV6Vx0WvTpDFnefs=
dependencies:
just-compare "^1.3.0"
just-compare "^2.3.0"
"@fortawesome/fontawesome-free@^5.15.4":
version "5.15.4"
@ -1439,10 +1439,10 @@ json-stable-stringify-without-jsonify@^1.0.1:
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
just-compare@^1.3.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/just-compare/-/just-compare-1.5.1.tgz#aed7e93e6bae9c3b69d79aea7805684132a0c0c5"
integrity sha512-xDEEFHNIyJNmN4uo/2RVeUcay9THtN/5ka/iw98Y/gsa8w9KXZQuyaf5eFUY6VlntA2+G+bdPmdhqqTs7T+BRw==
just-compare@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/just-compare/-/just-compare-2.3.0.tgz#a2adcc1d1940536263275f5a1ef1298bcacfeda7"
integrity sha512-6shoR7HDT+fzfL3gBahx1jZG3hWLrhPAf+l7nCwahDdT9XDtosB9kIF0ZrzUp5QY8dJWfQVr5rnsPqsbvflDzg==
just-debounce@^1.0.0:
version "1.1.0"

2
modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/RemoveClaimsFromClientCredentialsGrantType.cs

@ -14,7 +14,7 @@ public class RemoveClaimsFromClientCredentialsGrantType : IOpenIddictServerHandl
.SetType(OpenIddictServerHandlerType.Custom)
.Build();
public ValueTask HandleAsync(OpenIddictServerEvents.ProcessSignInContext context)
public virtual ValueTask HandleAsync(OpenIddictServerEvents.ProcessSignInContext context)
{
if (context.Request.IsClientCredentialsGrantType())
{

2
modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Scopes/AttachScopes.cs

@ -21,7 +21,7 @@ public class AttachScopes : IOpenIddictServerHandler<OpenIddictServerEvents.Hand
_scopeRepository = scopeRepository;
}
public async ValueTask HandleAsync(OpenIddictServerEvents.HandleConfigurationRequestContext context)
public virtual async ValueTask HandleAsync(OpenIddictServerEvents.HandleConfigurationRequestContext context)
{
if (context is null)
{

21
modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpOpenIddictWildcardDomainBase.cs

@ -1,45 +1,58 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using OpenIddict.Server;
using Volo.Abp.Text.Formatting;
namespace Volo.Abp.OpenIddict.WildcardDomains;
public abstract class AbpOpenIddictWildcardDomainBase<THandler, TContext> : IOpenIddictServerHandler<TContext>
public abstract class AbpOpenIddictWildcardDomainBase<THandler, TOriginalHandler, TContext> : IOpenIddictServerHandler<TContext>
where THandler : class
where TOriginalHandler : class
where TContext : OpenIddictServerEvents.BaseContext
{
protected THandler Handler { get; set; }
public ILogger<THandler> Logger { get; set; }
protected TOriginalHandler OriginalHandler { get; set; }
protected AbpOpenIddictWildcardDomainOptions WildcardDomainOptions { get; }
protected AbpOpenIddictWildcardDomainBase(IOptions<AbpOpenIddictWildcardDomainOptions> wildcardDomainOptions, THandler handler)
protected AbpOpenIddictWildcardDomainBase(IOptions<AbpOpenIddictWildcardDomainOptions> wildcardDomainOptions, TOriginalHandler originalHandler)
{
WildcardDomainOptions = wildcardDomainOptions.Value;
Handler = handler;
OriginalHandler = originalHandler;
Logger = NullLogger<THandler>.Instance;
}
public abstract ValueTask HandleAsync(TContext context);
protected virtual Task<bool> CheckWildcardDomainAsync(string url)
{
Logger.LogDebug("Checking wildcard domain for url: {url}", url);
foreach (var domainFormat in WildcardDomainOptions.WildcardDomainsFormat)
{
Logger.LogDebug("Checking wildcard domain format: {domainFormat}", domainFormat);
var extractResult = FormattedStringValueExtracter.Extract(url, domainFormat, ignoreCase: true);
if (extractResult.IsMatch)
{
Logger.LogDebug("Wildcard domain found for url: {url}", url);
return Task.FromResult(true);
}
}
foreach (var domainFormat in WildcardDomainOptions.WildcardDomainsFormat)
{
Logger.LogDebug("Checking wildcard domain format: {domainFormat}", domainFormat);
if (domainFormat.Replace("{0}.", "").Equals(url, StringComparison.OrdinalIgnoreCase))
{
Logger.LogDebug("Wildcard domain found for url: {url}", url);
return Task.FromResult(true);
}
}
Logger.LogDebug("Wildcard domain not found for url: {url}", url);
return Task.FromResult(false);
}
}

1
modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpOpenIddictWildcardDomainOptions.cs

@ -12,5 +12,4 @@ public class AbpOpenIddictWildcardDomainOptions
{
WildcardDomainsFormat = new HashSet<string>();
}
}

8
modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpValidateAuthorizedParty.cs

@ -5,12 +5,12 @@ using OpenIddict.Server;
namespace Volo.Abp.OpenIddict.WildcardDomains;
public class AbpValidateAuthorizedParty : AbpOpenIddictWildcardDomainBase<OpenIddictServerHandlers.Session.ValidateAuthorizedParty, OpenIddictServerEvents.ValidateLogoutRequestContext>
public class AbpValidateAuthorizedParty : AbpOpenIddictWildcardDomainBase<AbpValidateAuthorizedParty, OpenIddictServerHandlers.Session.ValidateAuthorizedParty, OpenIddictServerEvents.ValidateLogoutRequestContext>
{
public static OpenIddictServerHandlerDescriptor Descriptor { get; }
= OpenIddictServerHandlerDescriptor.CreateBuilder<OpenIddictServerEvents.ValidateLogoutRequestContext>()
.UseScopedHandler<AbpValidateAuthorizedParty>()
.SetOrder(OpenIddictServerHandlers.Session.ValidateToken.Descriptor.Order + 1_000)
.SetOrder(OpenIddictServerHandlers.Session.ValidateEndpointPermissions.Descriptor.Order + 1_000)
.SetType(OpenIddictServerHandlerType.BuiltIn)
.Build();
@ -19,7 +19,7 @@ public class AbpValidateAuthorizedParty : AbpOpenIddictWildcardDomainBase<OpenId
IOpenIddictApplicationManager applicationManager)
: base(wildcardDomainsOptions, new OpenIddictServerHandlers.Session.ValidateAuthorizedParty(applicationManager))
{
Handler = new OpenIddictServerHandlers.Session.ValidateAuthorizedParty(applicationManager);
OriginalHandler = new OpenIddictServerHandlers.Session.ValidateAuthorizedParty(applicationManager);
}
public async override ValueTask HandleAsync(OpenIddictServerEvents.ValidateLogoutRequestContext context)
@ -31,6 +31,6 @@ public class AbpValidateAuthorizedParty : AbpOpenIddictWildcardDomainBase<OpenId
return;
}
await Handler.HandleAsync(context);
await OriginalHandler.HandleAsync(context);
}
}

6
modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpValidateClientPostLogoutRedirectUri.cs

@ -5,7 +5,7 @@ using OpenIddict.Server;
namespace Volo.Abp.OpenIddict.WildcardDomains;
public class AbpValidateClientPostLogoutRedirectUri : AbpOpenIddictWildcardDomainBase<OpenIddictServerHandlers.Session.ValidateClientPostLogoutRedirectUri, OpenIddictServerEvents.ValidateLogoutRequestContext>
public class AbpValidateClientPostLogoutRedirectUri : AbpOpenIddictWildcardDomainBase<AbpValidateClientPostLogoutRedirectUri, OpenIddictServerHandlers.Session.ValidateClientPostLogoutRedirectUri, OpenIddictServerEvents.ValidateLogoutRequestContext>
{
public static OpenIddictServerHandlerDescriptor Descriptor { get; }
= OpenIddictServerHandlerDescriptor.CreateBuilder<OpenIddictServerEvents.ValidateLogoutRequestContext>()
@ -21,7 +21,7 @@ public class AbpValidateClientPostLogoutRedirectUri : AbpOpenIddictWildcardDomai
IOpenIddictApplicationManager applicationManager)
: base(wildcardDomainsOptions, new OpenIddictServerHandlers.Session.ValidateClientPostLogoutRedirectUri(applicationManager))
{
Handler = new OpenIddictServerHandlers.Session.ValidateClientPostLogoutRedirectUri(applicationManager);
OriginalHandler = new OpenIddictServerHandlers.Session.ValidateClientPostLogoutRedirectUri(applicationManager);
}
public async override ValueTask HandleAsync(OpenIddictServerEvents.ValidateLogoutRequestContext context)
@ -34,6 +34,6 @@ public class AbpValidateClientPostLogoutRedirectUri : AbpOpenIddictWildcardDomai
return;
}
await Handler.HandleAsync(context);
await OriginalHandler.HandleAsync(context);
}
}

8
modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpValidateClientRedirectUri.cs

@ -5,13 +5,13 @@ using OpenIddict.Server;
namespace Volo.Abp.OpenIddict.WildcardDomains;
public class AbpValidateClientRedirectUri : AbpOpenIddictWildcardDomainBase<OpenIddictServerHandlers.Authentication.ValidateClientRedirectUri, OpenIddictServerEvents.ValidateAuthorizationRequestContext>
public class AbpValidateClientRedirectUri : AbpOpenIddictWildcardDomainBase<AbpValidateClientRedirectUri, OpenIddictServerHandlers.Authentication.ValidateClientRedirectUri, OpenIddictServerEvents.ValidateAuthorizationRequestContext>
{
public static OpenIddictServerHandlerDescriptor Descriptor { get; }
= OpenIddictServerHandlerDescriptor.CreateBuilder<OpenIddictServerEvents.ValidateAuthorizationRequestContext>()
.AddFilter<OpenIddictServerHandlerFilters.RequireDegradedModeDisabled>()
.UseScopedHandler<AbpValidateClientRedirectUri>()
.SetOrder(OpenIddictServerHandlers.Authentication.ValidateClientType.Descriptor.Order + 1_000)
.SetOrder(OpenIddictServerHandlers.Authentication.ValidateResponseType.Descriptor.Order + 1_000)
.SetType(OpenIddictServerHandlerType.BuiltIn)
.Build();
@ -20,7 +20,7 @@ public class AbpValidateClientRedirectUri : AbpOpenIddictWildcardDomainBase<Open
IOpenIddictApplicationManager applicationManager)
: base(wildcardDomainsOptions, new OpenIddictServerHandlers.Authentication.ValidateClientRedirectUri(applicationManager))
{
Handler = new OpenIddictServerHandlers.Authentication.ValidateClientRedirectUri(applicationManager);
OriginalHandler = new OpenIddictServerHandlers.Authentication.ValidateClientRedirectUri(applicationManager);
}
public async override ValueTask HandleAsync(OpenIddictServerEvents.ValidateAuthorizationRequestContext context)
@ -32,6 +32,6 @@ public class AbpValidateClientRedirectUri : AbpOpenIddictWildcardDomainBase<Open
return;
}
await Handler.HandleAsync(context);
await OriginalHandler.HandleAsync(context);
}
}

6
modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpValidatePostLogoutRedirectUriParameter.cs

@ -4,7 +4,7 @@ using OpenIddict.Server;
namespace Volo.Abp.OpenIddict.WildcardDomains;
public class AbpValidatePostLogoutRedirectUriParameter : AbpOpenIddictWildcardDomainBase<OpenIddictServerHandlers.Session.ValidatePostLogoutRedirectUriParameter, OpenIddictServerEvents.ValidateLogoutRequestContext>
public class AbpValidatePostLogoutRedirectUriParameter : AbpOpenIddictWildcardDomainBase<AbpValidatePostLogoutRedirectUriParameter, OpenIddictServerHandlers.Session.ValidatePostLogoutRedirectUriParameter, OpenIddictServerEvents.ValidateLogoutRequestContext>
{
public static OpenIddictServerHandlerDescriptor Descriptor { get; }
= OpenIddictServerHandlerDescriptor.CreateBuilder<OpenIddictServerEvents.ValidateLogoutRequestContext>()
@ -14,7 +14,7 @@ public class AbpValidatePostLogoutRedirectUriParameter : AbpOpenIddictWildcardDo
.Build();
public AbpValidatePostLogoutRedirectUriParameter(IOptions<AbpOpenIddictWildcardDomainOptions> wildcardDomainsOptions)
: base(wildcardDomainsOptions, new OpenIddictServerHandlers.Session.ValidatePostLogoutRedirectUriParameter())
: base(wildcardDomainsOptions, new OpenIddictServerHandlers.Session.ValidatePostLogoutRedirectUriParameter())
{
}
@ -27,6 +27,6 @@ public class AbpValidatePostLogoutRedirectUriParameter : AbpOpenIddictWildcardDo
return;
}
await Handler.HandleAsync(context);
await OriginalHandler.HandleAsync(context);
}
}

4
modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/WildcardDomains/AbpValidateRedirectUriParameter.cs

@ -4,7 +4,7 @@ using OpenIddict.Server;
namespace Volo.Abp.OpenIddict.WildcardDomains;
public class AbpValidateRedirectUriParameter : AbpOpenIddictWildcardDomainBase<OpenIddictServerHandlers.Authentication.ValidateRedirectUriParameter, OpenIddictServerEvents.ValidateAuthorizationRequestContext>
public class AbpValidateRedirectUriParameter : AbpOpenIddictWildcardDomainBase<AbpValidateRedirectUriParameter, OpenIddictServerHandlers.Authentication.ValidateRedirectUriParameter, OpenIddictServerEvents.ValidateAuthorizationRequestContext>
{
public static OpenIddictServerHandlerDescriptor Descriptor { get; }
= OpenIddictServerHandlerDescriptor.CreateBuilder<OpenIddictServerEvents.ValidateAuthorizationRequestContext>()
@ -27,6 +27,6 @@ public class AbpValidateRedirectUriParameter : AbpOpenIddictWildcardDomainBase<O
return;
}
await Handler.HandleAsync(context);
await OriginalHandler.HandleAsync(context);
}
}

4
modules/openiddict/src/Volo.Abp.OpenIddict.Domain.Shared/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationConsts.cs

@ -2,9 +2,11 @@
public class OpenIddictApplicationConsts
{
public static int ApplicationTypeMaxLength { get; set; } = 50;
public static int ClientIdMaxLength { get; set; } = 100;
public static int ConsentTypeMaxLength { get; set; } = 50;
public static int TypeMaxLength { get; set; } = 50;
public static int ClientTypeMaxLength { get; set; } = 50;
}

135
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore.cs

@ -9,6 +9,7 @@ using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.IdentityModel.Tokens;
using OpenIddict.Abstractions;
using Volo.Abp.Data;
using Volo.Abp.Guids;
@ -33,17 +34,17 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
TokenRepository = tokenRepository;
}
public async ValueTask<long> CountAsync(CancellationToken cancellationToken)
public virtual async ValueTask<long> CountAsync(CancellationToken cancellationToken)
{
return await Repository.GetCountAsync(cancellationToken);
}
public ValueTask<long> CountAsync<TResult>(Func<IQueryable<OpenIddictApplicationModel>, IQueryable<TResult>> query, CancellationToken cancellationToken)
public virtual ValueTask<long> CountAsync<TResult>(Func<IQueryable<OpenIddictApplicationModel>, IQueryable<TResult>> query, CancellationToken cancellationToken)
{
throw new NotSupportedException();
}
public async ValueTask CreateAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual async ValueTask CreateAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
@ -52,7 +53,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
application = (await Repository.FindAsync(application.Id, cancellationToken: cancellationToken)).ToModel();
}
public async ValueTask DeleteAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual async ValueTask DeleteAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
@ -75,21 +76,21 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
}
}
public async ValueTask<OpenIddictApplicationModel> FindByIdAsync(string identifier, CancellationToken cancellationToken)
public virtual async ValueTask<OpenIddictApplicationModel> FindByIdAsync(string identifier, CancellationToken cancellationToken)
{
Check.NotNullOrEmpty(identifier, nameof(identifier));
return (await Repository.FindAsync(ConvertIdentifierFromString(identifier), cancellationToken: cancellationToken)).ToModel();
}
public async ValueTask<OpenIddictApplicationModel> FindByClientIdAsync(string identifier, CancellationToken cancellationToken)
public virtual async ValueTask<OpenIddictApplicationModel> FindByClientIdAsync(string identifier, CancellationToken cancellationToken)
{
Check.NotNullOrEmpty(identifier, nameof(identifier));
return (await Repository.FindByClientIdAsync(identifier, cancellationToken: cancellationToken)).ToModel();
}
public async IAsyncEnumerable<OpenIddictApplicationModel> FindByPostLogoutRedirectUriAsync(string uris, [EnumeratorCancellation] CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictApplicationModel> FindByPostLogoutRedirectUriAsync(string uris, [EnumeratorCancellation] CancellationToken cancellationToken)
{
Check.NotNullOrEmpty(uris, nameof(uris));
@ -105,7 +106,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
}
}
public async IAsyncEnumerable<OpenIddictApplicationModel> FindByRedirectUriAsync(string uri, [EnumeratorCancellation] CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictApplicationModel> FindByRedirectUriAsync(string uri, [EnumeratorCancellation] CancellationToken cancellationToken)
{
Check.NotNullOrEmpty(uri, nameof(uri));
@ -120,46 +121,53 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
}
}
public ValueTask<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictApplicationModel>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual ValueTask<string> GetApplicationTypeAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
return new ValueTask<string>(application.ApplicationType);
}
public virtual ValueTask<TResult> GetAsync<TState, TResult>(Func<IQueryable<OpenIddictApplicationModel>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
{
throw new NotSupportedException();
}
public ValueTask<string> GetClientIdAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual ValueTask<string> GetClientIdAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
return new ValueTask<string>(application.ClientId);
}
public ValueTask<string> GetClientSecretAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual ValueTask<string> GetClientSecretAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
return new ValueTask<string>(application.ClientSecret);
}
public ValueTask<string> GetClientTypeAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual ValueTask<string> GetClientTypeAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
return new ValueTask<string>(application.Type);
return new ValueTask<string>(application.ClientType);
}
public ValueTask<string> GetConsentTypeAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual ValueTask<string> GetConsentTypeAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
return new ValueTask<string>(application.ConsentType);
}
public ValueTask<string> GetDisplayNameAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual ValueTask<string> GetDisplayNameAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
return new ValueTask<string>(application.DisplayName);
}
public ValueTask<ImmutableDictionary<CultureInfo, string>> GetDisplayNamesAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual ValueTask<ImmutableDictionary<CultureInfo, string>> GetDisplayNamesAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
@ -187,14 +195,21 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
}
}
public ValueTask<string> GetIdAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual ValueTask<string> GetIdAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
return new ValueTask<string>(ConvertIdentifierToString(application.Id));
}
public ValueTask<ImmutableArray<string>> GetPermissionsAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual ValueTask<JsonWebKeySet> GetJsonWebKeySetAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
return new ValueTask<JsonWebKeySet>(application.JsonWebKeySet);
}
public virtual ValueTask<ImmutableArray<string>> GetPermissionsAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
@ -222,7 +237,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
}
}
public ValueTask<ImmutableArray<string>> GetPostLogoutRedirectUrisAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual ValueTask<ImmutableArray<string>> GetPostLogoutRedirectUrisAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
@ -250,7 +265,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
};
}
public ValueTask<ImmutableDictionary<string, JsonElement>> GetPropertiesAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual ValueTask<ImmutableDictionary<string, JsonElement>> GetPropertiesAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
@ -271,7 +286,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
}
}
public ValueTask<ImmutableArray<string>> GetRedirectUrisAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual ValueTask<ImmutableArray<string>> GetRedirectUrisAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
@ -299,7 +314,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
}
}
public ValueTask<ImmutableArray<string>> GetRequirementsAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
public virtual ValueTask<ImmutableArray<string>> GetRequirementsAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
@ -327,7 +342,35 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
}
}
public ValueTask<OpenIddictApplicationModel> InstantiateAsync(CancellationToken cancellationToken)
public virtual ValueTask<ImmutableDictionary<string, string>> GetSettingsAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
if (string.IsNullOrEmpty(application.Settings))
{
return new ValueTask<ImmutableDictionary<string, string>>(ImmutableDictionary.Create<string, string>());
}
using (var document = JsonDocument.Parse(application.Settings))
{
var builder = ImmutableDictionary.CreateBuilder<string, string>();
foreach (var property in document.RootElement.EnumerateObject())
{
var value = property.Value.GetString();
if (string.IsNullOrEmpty(value))
{
continue;
}
builder[property.Name] = value;
}
return new ValueTask<ImmutableDictionary<string, string>>(builder.ToImmutable());
}
}
public virtual ValueTask<OpenIddictApplicationModel> InstantiateAsync(CancellationToken cancellationToken)
{
return new ValueTask<OpenIddictApplicationModel>(new OpenIddictApplicationModel
{
@ -335,7 +378,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
});
}
public async IAsyncEnumerable<OpenIddictApplicationModel> ListAsync(int? count, int? offset, [EnumeratorCancellation] CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictApplicationModel> ListAsync(int? count, int? offset, [EnumeratorCancellation] CancellationToken cancellationToken)
{
var applications = await Repository.ListAsync(count, offset, cancellationToken);
foreach (var application in applications)
@ -344,11 +387,19 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
}
}
public IAsyncEnumerable<TResult> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictApplicationModel>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
public virtual IAsyncEnumerable<TResult> ListAsync<TState, TResult>(Func<IQueryable<OpenIddictApplicationModel>, TState, IQueryable<TResult>> query, TState state, CancellationToken cancellationToken)
{
throw new NotSupportedException();
}
public virtual ValueTask SetApplicationTypeAsync(OpenIddictApplicationModel application, string type, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
application.ApplicationType = type;
return default;
}
public virtual ValueTask SetClientIdAsync(OpenIddictApplicationModel application, string identifier, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
@ -369,7 +420,7 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
{
Check.NotNull(application, nameof(application));
application.Type = type;
application.ClientType = type;
return default;
}
@ -413,6 +464,14 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
return default;
}
public virtual ValueTask SetJsonWebKeySetAsync(OpenIddictApplicationModel application, JsonWebKeySet set, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
application.JsonWebKeySet = set;
return default;
}
public virtual ValueTask SetPermissionsAsync(OpenIddictApplicationModel application, ImmutableArray<string> permissions,
CancellationToken cancellationToken)
{
@ -534,6 +593,30 @@ public class AbpOpenIddictApplicationStore : AbpOpenIddictStoreBase<IOpenIddictA
return default;
}
public virtual ValueTask SetSettingsAsync(OpenIddictApplicationModel application, ImmutableDictionary<string, string> settings, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));
if (settings.IsEmpty)
{
application.Settings = null;
return default;
}
application.Settings = WriteStream(writer =>
{
writer.WriteStartObject();
foreach (var setting in settings)
{
writer.WritePropertyName(setting.Key);
writer.WriteStringValue(setting.Value);
}
writer.WriteEndObject();
});
return default;
}
public virtual async ValueTask UpdateAsync(OpenIddictApplicationModel application, CancellationToken cancellationToken)
{
Check.NotNull(application, nameof(application));

20
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplication.cs

@ -14,6 +14,11 @@ public class OpenIddictApplication : FullAuditedAggregateRoot<Guid>
{
}
/// <summary>
/// Gets or sets the application type associated with the application.
/// </summary>
public virtual string ApplicationType { get; set; }
/// <summary>
/// Gets or sets the client identifier associated with the current application.
/// </summary>
@ -26,6 +31,11 @@ public class OpenIddictApplication : FullAuditedAggregateRoot<Guid>
/// </summary>
public virtual string ClientSecret { get; set; }
/// <summary>
/// Gets or sets the client type associated with the application.
/// </summary>
public string ClientType { get; set; }
/// <summary>
/// Gets or sets the consent type associated with the current application.
/// </summary>
@ -43,6 +53,12 @@ public class OpenIddictApplication : FullAuditedAggregateRoot<Guid>
/// </summary>
public virtual string DisplayNames { get; set; }
/// <summary>
/// Gets or sets the JSON Web Key Set associated with
/// the application, serialized as a JSON object.
/// </summary>
public virtual string JsonWebKeySet { get; set; }
/// <summary>
/// Gets or sets the permissions associated with the
/// current application, serialized as a JSON array.
@ -74,9 +90,9 @@ public class OpenIddictApplication : FullAuditedAggregateRoot<Guid>
public virtual string Requirements { get; set; }
/// <summary>
/// Gets or sets the application type associated with the current application.
/// Gets or sets the settings serialized as a JSON object.
/// </summary>
public virtual string Type { get; set; }
public virtual string Settings { get; set; }
/// <summary>
/// URI to further information about client.

27
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationExtensions.cs

@ -1,4 +1,9 @@
namespace Volo.Abp.OpenIddict.Applications;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Text.Json;
using Microsoft.IdentityModel.Tokens;
namespace Volo.Abp.OpenIddict.Applications;
public static class OpenIddictApplicationExtensions
{
@ -8,17 +13,20 @@ public static class OpenIddictApplicationExtensions
var entity = new OpenIddictApplication(model.Id)
{
ApplicationType = model.ApplicationType,
ClientId = model.ClientId,
ClientSecret = model.ClientSecret,
ClientType = model.ClientType,
ConsentType = model.ConsentType,
DisplayName = model.DisplayName,
DisplayNames = model.DisplayNames,
JsonWebKeySet = model.JsonWebKeySet != null ? JsonSerializer.Serialize(model.JsonWebKeySet) : null,
Permissions = model.Permissions,
PostLogoutRedirectUris = model.PostLogoutRedirectUris,
Properties = model.Properties,
RedirectUris = model.RedirectUris,
Requirements = model.Requirements,
Type = model.Type,
Settings = model.Settings,
ClientUri = model.ClientUri,
LogoUri = model.LogoUri
};
@ -37,17 +45,20 @@ public static class OpenIddictApplicationExtensions
Check.NotNull(model, nameof(model));
Check.NotNull(entity, nameof(entity));
entity.ApplicationType = model.ApplicationType;
entity.ClientId = model.ClientId;
entity.ClientSecret = model.ClientSecret;
entity.ConsentType = model.ConsentType;
entity.ClientType = model.ClientType;
entity.DisplayName = model.DisplayName;
entity.DisplayNames = model.DisplayNames;
entity.JsonWebKeySet = model.JsonWebKeySet != null ? JsonSerializer.Serialize(model.JsonWebKeySet) : null;
entity.Permissions = model.Permissions;
entity.PostLogoutRedirectUris = model.PostLogoutRedirectUris;
entity.Properties = model.Properties;
entity.RedirectUris = model.RedirectUris;
entity.Requirements = model.Requirements;
entity.Type = model.Type;
entity.Settings = model.Settings;
entity.ClientUri = model.ClientUri;
entity.LogoUri = model.LogoUri;
@ -60,6 +71,11 @@ public static class OpenIddictApplicationExtensions
return entity;
}
/// <summary>
/// parsing the stringified JSON Web Key Set is an expensive operation, To mitigate that, the resulting object is stored in the static cache.
/// </summary>
private readonly static ConcurrentDictionary<string, JsonWebKeySet> JsonWebKeySetCache = new ConcurrentDictionary<string, JsonWebKeySet>();
public static OpenIddictApplicationModel ToModel(this OpenIddictApplication entity)
{
if(entity == null)
@ -70,17 +86,20 @@ public static class OpenIddictApplicationExtensions
var model = new OpenIddictApplicationModel
{
Id = entity.Id,
ApplicationType = entity.ApplicationType,
ClientId = entity.ClientId,
ClientSecret = entity.ClientSecret,
ClientType = entity.ClientType,
ConsentType = entity.ConsentType,
DisplayName = entity.DisplayName,
DisplayNames = entity.DisplayNames,
JsonWebKeySet = entity.JsonWebKeySet != null ? JsonWebKeySetCache.GetOrAdd(entity.JsonWebKeySet, () => JsonWebKeySet.Create(entity.JsonWebKeySet)) : null,
Permissions = entity.Permissions,
PostLogoutRedirectUris = entity.PostLogoutRedirectUris,
Properties = entity.Properties,
RedirectUris = entity.RedirectUris,
Requirements = entity.Requirements,
Type = entity.Type,
Settings = entity.Settings,
ClientUri = entity.ClientUri,
LogoUri = entity.LogoUri
};

20
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Applications/OpenIddictApplicationModel.cs

@ -1,4 +1,5 @@
using System;
using Microsoft.IdentityModel.Tokens;
using Volo.Abp.MultiTenancy;
using Volo.Abp.ObjectExtending;
@ -9,6 +10,11 @@ public class OpenIddictApplicationModel : ExtensibleObject
{
public Guid Id { get; set; }
/// <summary>
/// Gets or sets the application type associated with the application.
/// </summary>
public virtual string ApplicationType { get; set; }
/// <summary>
/// Gets or sets the client identifier associated with the current application.
/// </summary>
@ -21,6 +27,11 @@ public class OpenIddictApplicationModel : ExtensibleObject
/// </summary>
public virtual string ClientSecret { get; set; }
/// <summary>
/// Gets or sets the client type associated with the application.
/// </summary>
public string ClientType { get; set; }
/// <summary>
/// Gets or sets the consent type associated with the current application.
/// </summary>
@ -38,6 +49,11 @@ public class OpenIddictApplicationModel : ExtensibleObject
/// </summary>
public virtual string DisplayNames { get; set; }
/// <summary>
/// Gets or sets the JSON Web Key Set associated with the application.
/// </summary>
public virtual JsonWebKeySet JsonWebKeySet { get; set; }
/// <summary>
/// Gets or sets the permissions associated with the
/// current application, serialized as a JSON array.
@ -69,9 +85,9 @@ public class OpenIddictApplicationModel : ExtensibleObject
public virtual string Requirements { get; set; }
/// <summary>
/// Gets or sets the application type associated with the current application.
/// Gets the settings associated with the application.
/// </summary>
public virtual string Type { get; set; }
public virtual string Settings { get; set; }
/// <summary>
/// URI to further information about client.

16
modules/openiddict/src/Volo.Abp.OpenIddict.Domain/Volo/Abp/OpenIddict/Authorizations/AbpOpenIddictAuthorizationCache.cs

@ -21,7 +21,7 @@ public class AbpOpenIddictAuthorizationCache : AbpOpenIddictCacheBase<OpenIddict
{
}
public async ValueTask AddAsync(OpenIddictAuthorizationModel authorization, CancellationToken cancellationToken)
public virtual async ValueTask AddAsync(OpenIddictAuthorizationModel authorization, CancellationToken cancellationToken)
{
Check.NotNull(authorization, nameof(authorization));
@ -30,7 +30,7 @@ public class AbpOpenIddictAuthorizationCache : AbpOpenIddictCacheBase<OpenIddict
await Cache.SetAsync($"{nameof(FindByIdAsync)}_{await Store.GetIdAsync(authorization, cancellationToken)}", authorization, token: cancellationToken);
}
public async IAsyncEnumerable<OpenIddictAuthorizationModel> FindAsync(string subject, string client, [EnumeratorCancellation] CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictAuthorizationModel> FindAsync(string subject, string client, [EnumeratorCancellation] CancellationToken cancellationToken)
{
Check.NotNullOrEmpty(subject, nameof(subject));
Check.NotNullOrEmpty(client, nameof(client));
@ -52,7 +52,7 @@ public class AbpOpenIddictAuthorizationCache : AbpOpenIddictCacheBase<OpenIddict
}
}
public async IAsyncEnumerable<OpenIddictAuthorizationModel> FindAsync(string subject, string client, string status, [EnumeratorCancellation] CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictAuthorizationModel> FindAsync(string subject, string client, string status, [EnumeratorCancellation] CancellationToken cancellationToken)
{
Check.NotNullOrEmpty(subject, nameof(subject));
Check.NotNullOrEmpty(client, nameof(client));
@ -75,7 +75,7 @@ public class AbpOpenIddictAuthorizationCache : AbpOpenIddictCacheBase<OpenIddict
}
}
public async IAsyncEnumerable<OpenIddictAuthorizationModel> FindAsync(string subject, string client, string status, string type, [EnumeratorCancellation] CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictAuthorizationModel> FindAsync(string subject, string client, string status, string type, [EnumeratorCancellation] CancellationToken cancellationToken)
{
Check.NotNullOrEmpty(subject, nameof(subject));
Check.NotNullOrEmpty(client, nameof(client));
@ -99,7 +99,7 @@ public class AbpOpenIddictAuthorizationCache : AbpOpenIddictCacheBase<OpenIddict
}
}
public async IAsyncEnumerable<OpenIddictAuthorizationModel> FindAsync(string subject, string client, string status, string type, ImmutableArray<string> scopes, [EnumeratorCancellation] CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictAuthorizationModel> 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));
@ -114,7 +114,7 @@ public class AbpOpenIddictAuthorizationCache : AbpOpenIddictCacheBase<OpenIddict
}
}
public async IAsyncEnumerable<OpenIddictAuthorizationModel> FindByApplicationIdAsync(string applicationId, [EnumeratorCancellation] CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictAuthorizationModel> FindByApplicationIdAsync(string applicationId, [EnumeratorCancellation] CancellationToken cancellationToken)
{
Check.NotNullOrEmpty(applicationId, nameof(applicationId));
@ -135,7 +135,7 @@ public class AbpOpenIddictAuthorizationCache : AbpOpenIddictCacheBase<OpenIddict
}
}
public async ValueTask<OpenIddictAuthorizationModel> FindByIdAsync(string id, CancellationToken cancellationToken)
public virtual async ValueTask<OpenIddictAuthorizationModel> FindByIdAsync(string id, CancellationToken cancellationToken)
{
Check.NotNullOrEmpty(id, nameof(id));
@ -143,7 +143,7 @@ public class AbpOpenIddictAuthorizationCache : AbpOpenIddictCacheBase<OpenIddict
async () => await Store.FindByIdAsync(id, cancellationToken), token: cancellationToken);
}
public async IAsyncEnumerable<OpenIddictAuthorizationModel> FindBySubjectAsync(string subject, [EnumeratorCancellation] CancellationToken cancellationToken)
public virtual async IAsyncEnumerable<OpenIddictAuthorizationModel> FindBySubjectAsync(string subject, [EnumeratorCancellation] CancellationToken cancellationToken)
{
Check.NotNullOrEmpty(subject, nameof(subject));

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

@ -287,13 +287,14 @@ public class AbpOpenIddictAuthorizationStore : AbpOpenIddictStoreBase<IOpenIddic
throw new NotSupportedException();
}
public virtual async ValueTask PruneAsync(DateTimeOffset threshold, CancellationToken cancellationToken)
public virtual async ValueTask<long> PruneAsync(DateTimeOffset threshold, CancellationToken cancellationToken)
{
using (var uow = UnitOfWorkManager.Begin(requiresNew: true, isTransactional: true, isolationLevel: IsolationLevel.RepeatableRead))
{
var date = threshold.UtcDateTime;
await Repository.PruneAsync(date, cancellationToken: cancellationToken);
var count = await Repository.PruneAsync(date, cancellationToken: cancellationToken);
await uow.CompleteAsync(cancellationToken);
return count;
}
}

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

@ -22,5 +22,5 @@ public interface IOpenIddictAuthorizationRepository : IBasicRepository<OpenIddic
Task<List<OpenIddictAuthorization>> ListAsync(int? count, int? offset, CancellationToken cancellationToken = default);
Task PruneAsync(DateTime date, CancellationToken cancellationToken = default);
Task<long> PruneAsync(DateTime date, CancellationToken cancellationToken = default);
}

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

@ -302,13 +302,19 @@ public class AbpOpenIddictTokenStore : AbpOpenIddictStoreBase<IOpenIddictTokenRe
throw new NotSupportedException();
}
public virtual async ValueTask PruneAsync(DateTimeOffset threshold, CancellationToken cancellationToken)
public virtual async ValueTask<long> RevokeByAuthorizationIdAsync(string identifier, CancellationToken cancellationToken)
{
return await Repository.RevokeByAuthorizationIdAsync(ConvertIdentifierFromString(identifier), cancellationToken);
}
public virtual async ValueTask<long> PruneAsync(DateTimeOffset threshold, CancellationToken cancellationToken)
{
using (var uow = UnitOfWorkManager.Begin(requiresNew: true, isTransactional: true, isolationLevel: IsolationLevel.RepeatableRead))
{
var date = threshold.UtcDateTime;
await Repository.PruneAsync(date, cancellationToken: cancellationToken);
var count = await Repository.PruneAsync(date, cancellationToken: cancellationToken);
await uow.CompleteAsync(cancellationToken);
return count;
}
}

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

@ -32,5 +32,7 @@ public interface IOpenIddictTokenRepository : IBasicRepository<OpenIddictToken,
Task<List<OpenIddictToken>> ListAsync(int? count, int? offset, CancellationToken cancellationToken = default);
Task PruneAsync(DateTime date, CancellationToken cancellationToken = default);
Task<long> PruneAsync(DateTime date, CancellationToken cancellationToken = default);
ValueTask<long> RevokeByAuthorizationIdAsync(Guid id, CancellationToken cancellationToken);
}

6
modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Authorizations/EfCoreOpenIddictAuthorizationRepository.cs

@ -80,7 +80,7 @@ public class EfCoreOpenIddictAuthorizationRepository : EfCoreRepository<IOpenIdd
return await query.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task PruneAsync(DateTime date, CancellationToken cancellationToken = default)
public virtual async Task<long> PruneAsync(DateTime date, CancellationToken cancellationToken = default)
{
var authorizations = await (from authorization in (await GetQueryableAsync())
join token in (await GetDbContextAsync()).Set<OpenIddictToken>()
@ -91,11 +91,11 @@ public class EfCoreOpenIddictAuthorizationRepository : EfCoreRepository<IOpenIdd
(authorization.Type == OpenIddictConstants.AuthorizationTypes.AdHoc && authorizationToken == null)
select authorization.Id).ToListAsync(cancellationToken);
await (from token in (await GetDbContextAsync()).Set<OpenIddictToken>()
var count = await (from token in (await GetDbContextAsync()).Set<OpenIddictToken>()
where token.AuthorizationId != null && authorizations.Contains(token.AuthorizationId.Value)
select token)
.ExecuteDeleteAsync(GetCancellationToken(cancellationToken));
await (await GetDbSetAsync()).Where(x => authorizations.Contains(x.Id)).ExecuteDeleteAsync(cancellationToken);
return count + await (await GetDbSetAsync()).Where(x => authorizations.Contains(x.Id)).ExecuteDeleteAsync(cancellationToken);
}
}

7
modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/EntityFrameworkCore/OpenIddictDbContextModelCreatingExtensions.cs

@ -28,14 +28,17 @@ public static class OpenIddictDbContextModelCreatingExtensions
b.HasIndex(x => x.ClientId);
//.IsUnique();
b.Property(x => x.ApplicationType)
.HasMaxLength(OpenIddictApplicationConsts.ApplicationTypeMaxLength);
b.Property(x => x.ClientId)
.HasMaxLength(OpenIddictApplicationConsts.ClientIdMaxLength);
b.Property(x => x.ConsentType)
.HasMaxLength(OpenIddictApplicationConsts.ConsentTypeMaxLength);
b.Property(x => x.Type)
.HasMaxLength(OpenIddictApplicationConsts.TypeMaxLength);
b.Property(x => x.ClientType)
.HasMaxLength(OpenIddictApplicationConsts.ClientTypeMaxLength);
b.ApplyObjectExtensionMappings();
});

12
modules/openiddict/src/Volo.Abp.OpenIddict.EntityFrameworkCore/Volo/Abp/OpenIddict/Tokens/EfCoreOpenIddictTokenRepository.cs

@ -96,9 +96,9 @@ public class EfCoreOpenIddictTokenRepository : EfCoreRepository<IOpenIddictDbCon
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task PruneAsync(DateTime date, CancellationToken cancellationToken = default)
public virtual async Task<long> PruneAsync(DateTime date, CancellationToken cancellationToken = default)
{
await (from token in await GetQueryableAsync()
return await (from token in await GetQueryableAsync()
join authorization in (await GetDbContextAsync()).Set<OpenIddictAuthorization>()
on token.AuthorizationId equals authorization.Id into tokenAuthorizations
from tokenAuthorization in tokenAuthorizations.DefaultIfEmpty()
@ -109,4 +109,12 @@ public class EfCoreOpenIddictTokenRepository : EfCoreRepository<IOpenIddictDbCon
select token)
.ExecuteDeleteAsync(GetCancellationToken(cancellationToken));
}
public virtual async ValueTask<long> RevokeByAuthorizationIdAsync(Guid id, CancellationToken cancellationToken)
{
return await (from token in await GetQueryableAsync() where token.AuthorizationId == id select token)
.ExecuteUpdateAsync(
entity => entity.SetProperty(token => token.Status, OpenIddictConstants.Statuses.Revoked),
GetCancellationToken(cancellationToken));
}
}

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

@ -71,7 +71,7 @@ public class MongoOpenIddictAuthorizationRepository : MongoDbRepository<OpenIddi
.As<IMongoQueryable<OpenIddictAuthorization>>().ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task PruneAsync(DateTime date, CancellationToken cancellationToken = default)
public virtual async Task<long> PruneAsync(DateTime date, CancellationToken cancellationToken = default)
{
var tokenIds = await (await GetMongoQueryableAsync<OpenIddictToken>(cancellationToken))
.Where(x => x.AuthorizationId != null)
@ -107,5 +107,6 @@ public class MongoOpenIddictAuthorizationRepository : MongoDbRepository<OpenIddi
}
await DeleteManyAsync(authorizations, cancellationToken: cancellationToken);
return authorizations.Count;
}
}

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

@ -108,7 +108,7 @@ public class MongoOpenIddictTokenRepository : MongoDbRepository<OpenIddictMongoD
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task PruneAsync(DateTime date, CancellationToken cancellationToken = default)
public virtual async Task<long> PruneAsync(DateTime date, CancellationToken cancellationToken = default)
{
var authorizationIds = await (await GetMongoQueryableAsync<OpenIddictAuthorization>(cancellationToken))
.Where(x => x.Status != OpenIddictConstants.Statuses.Valid)
@ -125,5 +125,16 @@ public class MongoOpenIddictTokenRepository : MongoDbRepository<OpenIddictMongoD
.ToListAsync(GetCancellationToken(cancellationToken));
await DeleteManyAsync(tokens, cancellationToken: cancellationToken);
return tokens.Count;
}
public virtual async ValueTask<long> RevokeByAuthorizationIdAsync(Guid id, CancellationToken cancellationToken)
{
return (await (await GetCollectionAsync(GetCancellationToken(cancellationToken))).UpdateManyAsync(
filter: token => token.AuthorizationId == id,
update: Builders<OpenIddictToken>.Update.Set(token => token.Status, OpenIddictConstants.Statuses.Revoked),
options: null,
cancellationToken: GetCancellationToken(cancellationToken))).MatchedCount;
}
}

80
modules/openiddict/test/Volo.Abp.OpenIddict.Domain.Tests/Volo/Abp/OpenIddict/Applications/AbpOpenIddictApplicationStore_Tests.cs

@ -6,6 +6,7 @@ using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using OpenIddict.Abstractions;
using Shouldly;
using Xunit;
@ -30,12 +31,12 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
var application = await _applicationStore.FindByIdAsync(nonExistingId, CancellationToken.None);
application.ShouldBeNull();
}
[Fact]
public async Task FindByIdAsync_Should_Return_Application_If_Found()
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
application.ShouldNotBeNull();
application.ClientId.ShouldBe(_testData.App1ClientId);
application.ConsentType.ShouldBe(OpenIddictConstants.ConsentTypes.Explicit);
@ -73,19 +74,24 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var clientId = Guid.NewGuid().ToString();
await _applicationStore.CreateAsync(new OpenIddictApplicationModel {
ApplicationType = OpenIddictConstants.ApplicationTypes.Web,
ClientId = clientId,
ConsentType = OpenIddictConstants.ConsentTypes.Explicit,
DisplayName = "Test Application",
Type = OpenIddictConstants.ClientTypes.Public,
ClientType = OpenIddictConstants.ClientTypes.Public,
JsonWebKeySet = JsonWebKeySet.Create("{\"keys\":[{\"kid\":\"B3CFECA9F030CB8DA7EC0C2C27462E0F1EDB5920\",\"use\":\"sig\",\"kty\":\"RSA\",\"alg\":\"RS256\",\"e\":\"AQAB\",\"n\":\"yvTJVUUPNKui4mc12Z9sasNC1xQ_feZLhYDUqrMYDrbbOdHNdppCRQa8hwZBAgru7mJn-qD1aBDHZQFp0h_tWME5B5c07Y8b80w0vBWgfhgw0Kvzet6aDtVRVFZ0pJ92sIto0gcEeU2cst21s21ICGI3bT80-BIrWe_OGbWt0LwkTYLMGFaSiIov65OqnBm9LiZFgpANk8gajmPW49Jp9w4N6dXKJmpLD4Ke0TqHV1wx3DepYs9cdXlyEAh_Zb6iX7-GaIqkpiG32Ej1ezc-Qfjy16nt1mxrDkgZNROXeo9dSKT-zCuUNaAoDj93vFFnKzdGB4wiUbeRb-fvebAKDw\",\"x5t\":\"s8_sqfAwy42n7AwsJ0YuDx7bWSA\",\"x5c\":[\"MIIDzTCCArWgAwIBAgIJAJk4OSYyxcY2MA0GCSqGSIb3DQEBCwUAMH0xCzAJBgNVBAYTAlRSMREwDwYDVQQHDAhJc3RhbmJ1bDEZMBcGA1UECgwQVm9sb3NvZnQgTFRELlNUSTEXMBUGA1UEAwwOYWNjb3VudC5hYnAuaW8xJzAlBgkqhkiG9w0BCQEWGGdhbGlwLmVyZGVtQHZvbG9zb2Z0LmNvbTAeFw0yMDAxMjExNjQ1MTBaFw0zMDAxMTgxNjQ1MTBaMH0xCzAJBgNVBAYTAlRSMREwDwYDVQQHDAhJc3RhbmJ1bDEZMBcGA1UECgwQVm9sb3NvZnQgTFRELlNUSTEXMBUGA1UEAwwOYWNjb3VudC5hYnAuaW8xJzAlBgkqhkiG9w0BCQEWGGdhbGlwLmVyZGVtQHZvbG9zb2Z0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMr0yVVFDzSrouJnNdmfbGrDQtcUP33mS4WA1KqzGA622znRzXaaQkUGvIcGQQIK7u5iZ/qg9WgQx2UBadIf7VjBOQeXNO2PG/NMNLwVoH4YMNCr83remg7VUVRWdKSfdrCLaNIHBHlNnLLdtbNtSAhiN20/NPgSK1nvzhm1rdC8JE2CzBhWkoiKL+uTqpwZvS4mRYKQDZPIGo5j1uPSafcODenVyiZqSw+CntE6h1dcMdw3qWLPXHV5chAIf2W+ol+/hmiKpKYht9hI9Xs3PkH48tep7dZsaw5IGTUTl3qPXUik/swrlDWgKA4/d7xRZys3RgeMIlG3kW/n73mwCg8CAwEAAaNQME4wHQYDVR0OBBYEFCnN7HANDCj/ncgFu4AI+U6wXn2AMB8GA1UdIwQYMBaAFCnN7HANDCj/ncgFu4AI+U6wXn2AMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAEvVPtZnXzebhgVIyD+TBE7cgI567ck5W9kfeZhJLPlWQzrOQCgXbR7rqNLRs4K73k6Yo6/9E5jAOtjlqqotiqj89tqOTZzG6kDIVoMiYJjgEVLeF1bVBnCA7xDbdpVfrL2IOnNGy9Ys+FsG6EV/oBbTw8Fqk+5c7M0RvverCaEfPHWSTg6M+B5pHBk50p67MB6DeaD0u6RUnCkqYxBBPrnVHvvGEoimoEAdT5g3/8CAtAG9m4b9IoBpUHi626b+/SS+2h1xr4oq54gxG8jlDkLoRWT2cKiFM/bCufZkd1LyOmke8udpHBZ3Jt0nH64oZdSUT6huDzYBdtXfSw3XTwo=\"]}]}"),
PostLogoutRedirectUris = "https://abp.io",
RedirectUris = "https://abp.io"
}, CancellationToken.None);
var application = await _applicationStore.FindByClientIdAsync(clientId, CancellationToken.None);
application.ShouldNotBeNull();
application.ApplicationType.ShouldBe(OpenIddictConstants.ApplicationTypes.Web);
application.ClientId.ShouldBe(clientId);
application.DisplayName.ShouldBe("Test Application");
application.Type.ShouldBe(OpenIddictConstants.ClientTypes.Public);
application.ClientType.ShouldBe(OpenIddictConstants.ClientTypes.Public);
application.JsonWebKeySet.ShouldNotBeNull();
application.JsonWebKeySet.Keys.First().Alg.ShouldBe(SecurityAlgorithms.RsaSha256);
application.PostLogoutRedirectUris.ShouldBe("https://abp.io");
application.RedirectUris.ShouldBe("https://abp.io");
}
@ -95,9 +101,9 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
application.ShouldNotBeNull();
await _applicationStore.DeleteAsync(application, CancellationToken.None);
application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
application.ShouldBeNull();
}
@ -115,14 +121,14 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
var applications = await _applicationStore.FindByPostLogoutRedirectUriAsync("https://abp.io", CancellationToken.None).ToListAsync();
applications.Count.ShouldBe(2);
}
[Fact]
public async Task FindByRedirectUriAsync_Should_Return_Empty_If_Not_Found()
{
var applications = await _applicationStore.FindByRedirectUriAsync("non-existing-uri", CancellationToken.None).ToListAsync();
applications.Count.ShouldBe(0);
}
[Fact]
public async Task FindByRedirectUriAsync_Should_Return_Applications_If_Found()
{
@ -135,7 +141,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
var clientId = await _applicationStore.GetClientIdAsync(application, CancellationToken.None);
clientId.ShouldBe(_testData.App1ClientId);
}
@ -144,7 +150,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
var secret = await _applicationStore.GetClientIdAsync(application, CancellationToken.None);
secret.ShouldBe("Client1");
}
@ -153,7 +159,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
var clientType = await _applicationStore.GetClientTypeAsync(application, CancellationToken.None);
clientType.ShouldBe(OpenIddictConstants.ClientTypes.Public);
}
@ -162,7 +168,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
var consentType = await _applicationStore.GetConsentTypeAsync(application, CancellationToken.None);
consentType.ShouldBe(OpenIddictConstants.ConsentTypes.Explicit);
}
@ -171,7 +177,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
var displayName = await _applicationStore.GetDisplayNameAsync(application, CancellationToken.None);
displayName.ShouldBe("Test Application");
}
@ -180,7 +186,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
var id = await _applicationStore.GetIdAsync(application, CancellationToken.None);
id.ShouldBe(_testData.App1Id.ToString());
}
@ -189,7 +195,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
var permissions = await _applicationStore.GetPermissionsAsync(application, CancellationToken.None);
permissions.Length.ShouldBeGreaterThan(0);
}
@ -198,7 +204,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
var postLogoutRedirectUris = await _applicationStore.GetPostLogoutRedirectUrisAsync(application, CancellationToken.None);
postLogoutRedirectUris.Length.ShouldBe(1);
postLogoutRedirectUris[0].ShouldBe("https://abp.io");
}
@ -208,7 +214,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
var redirectUris = await _applicationStore.GetRedirectUrisAsync(application, CancellationToken.None);
redirectUris.Length.ShouldBe(1);
redirectUris[0].ShouldBe("https://abp.io");
}
@ -218,7 +224,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
var properties = await _applicationStore.GetPropertiesAsync(application, CancellationToken.None);
properties.Count.ShouldBe(0);
}
@ -227,14 +233,14 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
var requirements = await _applicationStore.GetRequirementsAsync(application, CancellationToken.None);
requirements.Length.ShouldBe(0);
}
[Fact]
public async Task InstantiateAsync()
{
var application = await _applicationStore.InstantiateAsync(CancellationToken.None);
var application = await _applicationStore.InstantiateAsync(CancellationToken.None);
application.ShouldNotBeNull();
}
@ -268,7 +274,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
var clientSecret = Guid.NewGuid().ToString();
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetClientSecretAsync(application, clientSecret, CancellationToken.None);
application.ClientSecret.ShouldBe(clientSecret);
}
@ -277,8 +283,8 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetClientTypeAsync(application, OpenIddictConstants.ClientTypes.Confidential, CancellationToken.None);
application.Type.ShouldBe(OpenIddictConstants.ClientTypes.Confidential);
application.ClientType.ShouldBe(OpenIddictConstants.ClientTypes.Confidential);
}
[Fact]
@ -286,17 +292,17 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetConsentTypeAsync(application, OpenIddictConstants.ConsentTypes.Systematic, CancellationToken.None);
application.ConsentType.ShouldBe(OpenIddictConstants.ConsentTypes.Systematic);
}
[Fact]
public async Task SetDisplayNameAsync()
{
var displayName = Guid.NewGuid().ToString();
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetDisplayNameAsync(application, displayName, CancellationToken.None);
application.DisplayName.ShouldBe(displayName);
}
@ -306,7 +312,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
var displayNames = ImmutableDictionary.Create<CultureInfo, string>();
displayNames = displayNames.Add(CultureInfo.GetCultureInfo("en"), "Test Application");
displayNames = displayNames.Add(CultureInfo.GetCultureInfo("zh-Hans"), "测试应用程序");
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetDisplayNamesAsync(application, displayNames, CancellationToken.None);
@ -319,7 +325,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetPermissionsAsync(application, ImmutableArray.Create(OpenIddictConstants.Permissions.Endpoints.Authorization), CancellationToken.None);
application.Permissions.ShouldBe("[\""+OpenIddictConstants.Permissions.Endpoints.Authorization+"\"]");
}
@ -328,7 +334,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetPostLogoutRedirectUrisAsync(application, ImmutableArray.Create("https://abp.io"), CancellationToken.None);
application.PostLogoutRedirectUris.ShouldBe("[\"https://abp.io\"]");
}
@ -337,7 +343,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetPropertiesAsync(application, ImmutableDictionary.Create<string, JsonElement>(), CancellationToken.None);
application.Properties.ShouldBeNull();
}
@ -346,7 +352,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetRedirectUrisAsync(application, ImmutableArray.Create("https://abp.io"), CancellationToken.None);
application.RedirectUris.ShouldBe("[\"https://abp.io\"]");
}
@ -355,7 +361,7 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
await _applicationStore.SetRequirementsAsync(application, ImmutableArray.Create(OpenIddictConstants.Requirements.Features.ProofKeyForCodeExchange), CancellationToken.None);
application.Requirements.ShouldBe("[\""+OpenIddictConstants.Requirements.Features.ProofKeyForCodeExchange+"\"]");
}
@ -364,19 +370,19 @@ public class AbpOpenIddictApplicationStore_Tests : OpenIddictDomainTestBase
{
var application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
application.ClientId = "new_client_id";
application.Type = OpenIddictConstants.ClientTypes.Public;
application.ClientType = OpenIddictConstants.ClientTypes.Public;
application.RedirectUris = "https://new_logout_uri";
application.PostLogoutRedirectUris = "https://new_post_logout_uri";
application.DisplayName = "new_display_name";
await _applicationStore.UpdateAsync(application, CancellationToken.None);
application = await _applicationStore.FindByIdAsync(_testData.App1Id.ToString(), CancellationToken.None);
application.ShouldNotBeNull();
application.ClientId.ShouldBe("new_client_id");
application.Type.ShouldBe(OpenIddictConstants.ClientTypes.Public);
application.ClientType.ShouldBe(OpenIddictConstants.ClientTypes.Public);
application.RedirectUris.ShouldBe("https://new_logout_uri");
application.PostLogoutRedirectUris.ShouldBe("https://new_post_logout_uri");
application.DisplayName.ShouldBe("new_display_name");
}
}
}

18
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231115065150_Initial.Designer.cs → templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231207053812_Initial.Designer.cs

@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations
{
[DbContext(typeof(MyProjectNameDbContext))]
[Migration("20231115065150_Initial")]
[Migration("20231207053812_Initial")]
partial class Initial
{
/// <inheritdoc />
@ -1081,6 +1081,10 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -1088,6 +1092,10 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -1135,6 +1143,9 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -1161,9 +1172,8 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

5
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231115065150_Initial.cs → templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/20231207053812_Initial.cs

@ -374,17 +374,20 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ApplicationType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ClientId = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
ClientSecret = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ConsentType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: true),
DisplayNames = table.Column<string>(type: "nvarchar(max)", nullable: true),
JsonWebKeySet = table.Column<string>(type: "nvarchar(max)", nullable: true),
Permissions = table.Column<string>(type: "nvarchar(max)", nullable: true),
PostLogoutRedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Properties = table.Column<string>(type: "nvarchar(max)", nullable: true),
RedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Requirements = table.Column<string>(type: "nvarchar(max)", nullable: true),
Type = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
Settings = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
LogoUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: false),

16
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Migrations/MyProjectNameDbContextModelSnapshot.cs

@ -1078,6 +1078,10 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -1085,6 +1089,10 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -1132,6 +1140,9 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -1158,9 +1169,8 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

2
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/Data/OpenIddictDataSeedContributor.cs

@ -152,7 +152,7 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep
var application = new AbpApplicationDescriptor
{
ClientId = name,
Type = type,
ClientType = type,
ClientSecret = secret,
ConsentType = consentType,
DisplayName = displayName,

2
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Data/OpenIddictDataSeedContributor.cs

@ -152,7 +152,7 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep
var application = new AbpApplicationDescriptor
{
ClientId = name,
Type = type,
ClientType = type,
ClientSecret = secret,
ConsentType = consentType,
DisplayName = displayName,

18
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231115065250_Initial.Designer.cs → templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231207053830_Initial.Designer.cs

@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace MyCompanyName.MyProjectName.Migrations
{
[DbContext(typeof(MyProjectNameDbContext))]
[Migration("20231115065250_Initial")]
[Migration("20231207053830_Initial")]
partial class Initial
{
/// <inheritdoc />
@ -1081,6 +1081,10 @@ namespace MyCompanyName.MyProjectName.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -1088,6 +1092,10 @@ namespace MyCompanyName.MyProjectName.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -1135,6 +1143,9 @@ namespace MyCompanyName.MyProjectName.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -1161,9 +1172,8 @@ namespace MyCompanyName.MyProjectName.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

5
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231115065520_Initial.cs → templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231207053830_Initial.cs

@ -374,17 +374,20 @@ namespace MyCompanyName.MyProjectName.Migrations
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ApplicationType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ClientId = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
ClientSecret = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ConsentType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: true),
DisplayNames = table.Column<string>(type: "nvarchar(max)", nullable: true),
JsonWebKeySet = table.Column<string>(type: "nvarchar(max)", nullable: true),
Permissions = table.Column<string>(type: "nvarchar(max)", nullable: true),
PostLogoutRedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Properties = table.Column<string>(type: "nvarchar(max)", nullable: true),
RedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Requirements = table.Column<string>(type: "nvarchar(max)", nullable: true),
Type = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
Settings = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
LogoUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: false),

16
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/MyProjectNameDbContextModelSnapshot.cs

@ -1078,6 +1078,10 @@ namespace MyCompanyName.MyProjectName.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -1085,6 +1089,10 @@ namespace MyCompanyName.MyProjectName.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -1132,6 +1140,9 @@ namespace MyCompanyName.MyProjectName.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -1158,9 +1169,8 @@ namespace MyCompanyName.MyProjectName.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

2
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Data/OpenIddictDataSeedContributor.cs

@ -152,7 +152,7 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep
var application = new OpenIddictApplicationDescriptor
{
ClientId = name,
Type = type,
ClientType = type,
ClientSecret = secret,
ConsentType = consentType,
DisplayName = displayName

2
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Data/OpenIddictDataSeedContributor.cs

@ -152,7 +152,7 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep
var application = new OpenIddictApplicationDescriptor
{
ClientId = name,
Type = type,
ClientType = type,
ClientSecret = secret,
ConsentType = consentType,
DisplayName = displayName

18
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231115065335_Initial.Designer.cs → templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231207053820_Initial.Designer.cs

@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace MyCompanyName.MyProjectName.Host.Migrations
{
[DbContext(typeof(MyProjectNameDbContext))]
[Migration("20231115065335_Initial")]
[Migration("20231207053820_Initial")]
partial class Initial
{
/// <inheritdoc />
@ -1081,6 +1081,10 @@ namespace MyCompanyName.MyProjectName.Host.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -1088,6 +1092,10 @@ namespace MyCompanyName.MyProjectName.Host.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -1135,6 +1143,9 @@ namespace MyCompanyName.MyProjectName.Host.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -1161,9 +1172,8 @@ namespace MyCompanyName.MyProjectName.Host.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

5
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231115065335_Initial.cs → templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/20231207053820_Initial.cs

@ -374,17 +374,20 @@ namespace MyCompanyName.MyProjectName.Host.Migrations
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ApplicationType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ClientId = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
ClientSecret = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ConsentType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: true),
DisplayNames = table.Column<string>(type: "nvarchar(max)", nullable: true),
JsonWebKeySet = table.Column<string>(type: "nvarchar(max)", nullable: true),
Permissions = table.Column<string>(type: "nvarchar(max)", nullable: true),
PostLogoutRedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Properties = table.Column<string>(type: "nvarchar(max)", nullable: true),
RedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Requirements = table.Column<string>(type: "nvarchar(max)", nullable: true),
Type = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
Settings = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
LogoUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: false),

16
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Migrations/MyProjectNameDbContextModelSnapshot.cs

@ -1078,6 +1078,10 @@ namespace MyCompanyName.MyProjectName.Host.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -1085,6 +1089,10 @@ namespace MyCompanyName.MyProjectName.Host.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -1132,6 +1140,9 @@ namespace MyCompanyName.MyProjectName.Host.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -1158,9 +1169,8 @@ namespace MyCompanyName.MyProjectName.Host.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

18
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231115065427_Initial.Designer.cs → templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231207053825_Initial.Designer.cs

@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace MyCompanyName.MyProjectName.Mvc.Migrations
{
[DbContext(typeof(MyProjectNameDbContext))]
[Migration("20231115065427_Initial")]
[Migration("20231207053825_Initial")]
partial class Initial
{
/// <inheritdoc />
@ -1081,6 +1081,10 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -1088,6 +1092,10 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -1135,6 +1143,9 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -1161,9 +1172,8 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

5
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231115065427_Initial.cs → templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/20231207053825_Initial.cs

@ -374,17 +374,20 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ApplicationType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ClientId = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
ClientSecret = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ConsentType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: true),
DisplayNames = table.Column<string>(type: "nvarchar(max)", nullable: true),
JsonWebKeySet = table.Column<string>(type: "nvarchar(max)", nullable: true),
Permissions = table.Column<string>(type: "nvarchar(max)", nullable: true),
PostLogoutRedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Properties = table.Column<string>(type: "nvarchar(max)", nullable: true),
RedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Requirements = table.Column<string>(type: "nvarchar(max)", nullable: true),
Type = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
Settings = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
LogoUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: false),

16
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Migrations/MyProjectNameDbContextModelSnapshot.cs

@ -1078,6 +1078,10 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -1085,6 +1089,10 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -1132,6 +1140,9 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -1158,9 +1169,8 @@ namespace MyCompanyName.MyProjectName.Mvc.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/OpenIddict/OpenIddictDataSeedContributor.cs

@ -230,7 +230,7 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep
var application = new AbpApplicationDescriptor {
ClientId = name,
Type = type,
ClientType = type,
ClientSecret = secret,
ConsentType = consentType,
DisplayName = displayName,

18
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231115065038_Initial.Designer.cs → templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231207053523_Initial.Designer.cs

@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace MyCompanyName.MyProjectName.Migrations
{
[DbContext(typeof(MyProjectNameDbContext))]
[Migration("20231115065038_Initial")]
[Migration("20231207053523_Initial")]
partial class Initial
{
/// <inheritdoc />
@ -1134,6 +1134,10 @@ namespace MyCompanyName.MyProjectName.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -1141,6 +1145,10 @@ namespace MyCompanyName.MyProjectName.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -1188,6 +1196,9 @@ namespace MyCompanyName.MyProjectName.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -1214,9 +1225,8 @@ namespace MyCompanyName.MyProjectName.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

5
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231115065038_Initial.cs → templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/20231207053523_Initial.cs

@ -395,17 +395,20 @@ namespace MyCompanyName.MyProjectName.Migrations
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ApplicationType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ClientId = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
ClientSecret = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ConsentType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: true),
DisplayNames = table.Column<string>(type: "nvarchar(max)", nullable: true),
JsonWebKeySet = table.Column<string>(type: "nvarchar(max)", nullable: true),
Permissions = table.Column<string>(type: "nvarchar(max)", nullable: true),
PostLogoutRedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Properties = table.Column<string>(type: "nvarchar(max)", nullable: true),
RedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Requirements = table.Column<string>(type: "nvarchar(max)", nullable: true),
Type = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
Settings = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
LogoUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: false),

16
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/Migrations/MyProjectNameDbContextModelSnapshot.cs

@ -1131,6 +1131,10 @@ namespace MyCompanyName.MyProjectName.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -1138,6 +1142,10 @@ namespace MyCompanyName.MyProjectName.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -1185,6 +1193,9 @@ namespace MyCompanyName.MyProjectName.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -1211,9 +1222,8 @@ namespace MyCompanyName.MyProjectName.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

18
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231115065520_Initial.Designer.cs → templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231207053828_Initial.Designer.cs

@ -13,7 +13,7 @@ using Volo.Abp.EntityFrameworkCore;
namespace MyCompanyName.MyProjectName.Migrations
{
[DbContext(typeof(AuthServerDbContext))]
[Migration("20231115065520_Initial")]
[Migration("20231207053828_Initial")]
partial class Initial
{
/// <inheritdoc />
@ -1081,6 +1081,10 @@ namespace MyCompanyName.MyProjectName.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -1088,6 +1092,10 @@ namespace MyCompanyName.MyProjectName.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -1135,6 +1143,9 @@ namespace MyCompanyName.MyProjectName.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -1161,9 +1172,8 @@ namespace MyCompanyName.MyProjectName.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

5
templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/Migrations/20231115065250_Initial.cs → templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/20231207053828_Initial.cs

@ -374,17 +374,20 @@ namespace MyCompanyName.MyProjectName.Migrations
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ApplicationType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ClientId = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
ClientSecret = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
ConsentType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: true),
DisplayNames = table.Column<string>(type: "nvarchar(max)", nullable: true),
JsonWebKeySet = table.Column<string>(type: "nvarchar(max)", nullable: true),
Permissions = table.Column<string>(type: "nvarchar(max)", nullable: true),
PostLogoutRedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Properties = table.Column<string>(type: "nvarchar(max)", nullable: true),
RedirectUris = table.Column<string>(type: "nvarchar(max)", nullable: true),
Requirements = table.Column<string>(type: "nvarchar(max)", nullable: true),
Type = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
Settings = table.Column<string>(type: "nvarchar(max)", nullable: true),
ClientUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
LogoUri = table.Column<string>(type: "nvarchar(max)", nullable: true),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: false),

16
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/Migrations/AuthServerDbContextModelSnapshot.cs

@ -1078,6 +1078,10 @@ namespace MyCompanyName.MyProjectName.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ApplicationType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientId")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
@ -1085,6 +1089,10 @@ namespace MyCompanyName.MyProjectName.Migrations
b.Property<string>("ClientSecret")
.HasColumnType("nvarchar(max)");
b.Property<string>("ClientType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("ClientUri")
.HasColumnType("nvarchar(max)");
@ -1132,6 +1140,9 @@ namespace MyCompanyName.MyProjectName.Migrations
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<string>("JsonWebKeySet")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
@ -1158,9 +1169,8 @@ namespace MyCompanyName.MyProjectName.Migrations
b.Property<string>("Requirements")
.HasColumnType("nvarchar(max)");
b.Property<string>("Type")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Settings")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");

2
templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/OpenIddict/OpenIddictDataSeedContributor.cs

@ -204,7 +204,7 @@ public class OpenIddictDataSeedContributor : IDataSeedContributor, ITransientDep
var application = new OpenIddictApplicationDescriptor
{
ClientId = name,
Type = type,
ClientType = type,
ClientSecret = secret,
ConsentType = consentType,
DisplayName = displayName

Loading…
Cancel
Save