@ -1,5 +1,4 @@
using System ;
using Microsoft.EntityFrameworkCore ;
using Microsoft.EntityFrameworkCore ;
using Volo.Abp.EntityFrameworkCore ;
using Volo.Abp.EntityFrameworkCore.Modeling ;
using Volo.Abp.IdentityServer.ApiResources ;
@ -14,8 +13,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
public static class IdentityServerDbContextModelCreatingExtensions
{
public static void ConfigureIdentityServer (
this ModelBuilder builder ,
Action < IdentityServerModelBuilderConfigurationOptions > optionsAction = null )
this ModelBuilder builder )
{
Check . NotNull ( builder , nameof ( builder ) ) ;
@ -24,18 +22,11 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
return ;
}
var options = new IdentityServerModelBuilderConfigurationOptions (
AbpIdentityServerDbProperties . DbTablePrefix ,
AbpIdentityServerDbProperties . DbSchema
) ;
optionsAction ? . Invoke ( options ) ;
#region Client
builder . Entity < Client > ( b = >
{
b . ToTable ( options . TablePrefix + "Clients" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . DbTablePrefix + "Clients" , AbpIdentityServerDbProperties . DbSchema ) ;
b . ConfigureByConvention ( ) ;
@ -69,7 +60,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ClientGrantType > ( b = >
{
b . ToTable ( options . TablePrefix + "ClientGrantTypes" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ClientGrantTypes" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -82,13 +73,13 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ClientRedirectUri > ( b = >
{
b . ToTable ( options . TablePrefix + "ClientRedirectUris" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ClientRedirectUris" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
b . HasKey ( x = > new { x . ClientId , x . RedirectUri } ) ;
if ( IsDatabaseProvider ( builder , options , EfCoreDatabaseProvider . MySql ) )
if ( IsDatabaseProvider ( builder , EfCoreDatabaseProvider . MySql ) )
{
ClientRedirectUriConsts . RedirectUriMaxLengthValue = 3 0 0 ;
}
@ -100,13 +91,13 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ClientPostLogoutRedirectUri > ( b = >
{
b . ToTable ( options . TablePrefix + "ClientPostLogoutRedirectUris" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ClientPostLogoutRedirectUris" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
b . HasKey ( x = > new { x . ClientId , x . PostLogoutRedirectUri } ) ;
if ( IsDatabaseProvider ( builder , options , EfCoreDatabaseProvider . MySql ) )
if ( IsDatabaseProvider ( builder , EfCoreDatabaseProvider . MySql ) )
{
ClientPostLogoutRedirectUriConsts . PostLogoutRedirectUriMaxLengthValue = 3 0 0 ;
}
@ -120,7 +111,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ClientScope > ( b = >
{
b . ToTable ( options . TablePrefix + "ClientScopes" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ClientScopes" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -133,14 +124,14 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ClientSecret > ( b = >
{
b . ToTable ( options . TablePrefix + "ClientSecrets" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ClientSecrets" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
b . HasKey ( x = > new { x . ClientId , x . Type , x . Value } ) ;
b . Property ( x = > x . Type ) . HasMaxLength ( ClientSecretConsts . TypeMaxLength ) . IsRequired ( ) ;
if ( IsDatabaseProvider ( builder , options , EfCoreDatabaseProvider . MySql , EfCoreDatabaseProvider . Oracle ) )
if ( IsDatabaseProvider ( builder , EfCoreDatabaseProvider . MySql , EfCoreDatabaseProvider . Oracle ) )
{
ClientSecretConsts . ValueMaxLength = 3 0 0 ;
}
@ -152,7 +143,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ClientClaim > ( b = >
{
b . ToTable ( options . TablePrefix + "ClientClaims" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ClientClaims" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -166,7 +157,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ClientIdPRestriction > ( b = >
{
b . ToTable ( options . TablePrefix + "ClientIdPRestrictions" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ClientIdPRestrictions" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -179,7 +170,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ClientCorsOrigin > ( b = >
{
b . ToTable ( options . TablePrefix + "ClientCorsOrigins" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ClientCorsOrigins" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -192,14 +183,14 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ClientProperty > ( b = >
{
b . ToTable ( options . TablePrefix + "ClientProperties" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ClientProperties" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
b . HasKey ( x = > new { x . ClientId , x . Key , x . Value } ) ;
b . Property ( x = > x . Key ) . HasMaxLength ( ClientPropertyConsts . KeyMaxLength ) . IsRequired ( ) ;
if ( IsDatabaseProvider ( builder , options , EfCoreDatabaseProvider . MySql ) )
if ( IsDatabaseProvider ( builder , EfCoreDatabaseProvider . MySql ) )
{
ClientPropertyConsts . ValueMaxLength = 3 0 0 ;
}
@ -214,7 +205,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < IdentityResource > ( b = >
{
b . ToTable ( options . TablePrefix + "IdentityResources" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "IdentityResources" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -230,7 +221,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < IdentityResourceClaim > ( b = >
{
b . ToTable ( options . TablePrefix + "IdentityResourceClaims" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "IdentityResourceClaims" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -243,14 +234,14 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < IdentityResourceProperty > ( b = >
{
b . ToTable ( options . TablePrefix + "IdentityResourceProperties" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "IdentityResourceProperties" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
b . HasKey ( x = > new { x . IdentityResourceId , x . Key , x . Value } ) ;
b . Property ( x = > x . Key ) . HasMaxLength ( IdentityResourcePropertyConsts . KeyMaxLength ) . IsRequired ( ) ;
if ( IsDatabaseProvider ( builder , options , EfCoreDatabaseProvider . MySql , EfCoreDatabaseProvider . Oracle ) )
if ( IsDatabaseProvider ( builder , EfCoreDatabaseProvider . MySql , EfCoreDatabaseProvider . Oracle ) )
{
IdentityResourcePropertyConsts . ValueMaxLength = 3 0 0 ;
}
@ -265,7 +256,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ApiResource > ( b = >
{
b . ToTable ( options . TablePrefix + "ApiResources" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ApiResources" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -284,7 +275,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ApiResourceSecret > ( b = >
{
b . ToTable ( options . TablePrefix + "ApiResourceSecrets" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ApiResourceSecrets" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -292,7 +283,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
b . Property ( x = > x . Type ) . HasMaxLength ( ApiResourceSecretConsts . TypeMaxLength ) . IsRequired ( ) ;
if ( IsDatabaseProvider ( builder , options , EfCoreDatabaseProvider . MySql , EfCoreDatabaseProvider . Oracle ) )
if ( IsDatabaseProvider ( builder , EfCoreDatabaseProvider . MySql , EfCoreDatabaseProvider . Oracle ) )
{
ApiResourceSecretConsts . ValueMaxLength = 3 0 0 ;
}
@ -305,7 +296,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ApiResourceClaim > ( b = >
{
b . ToTable ( options . TablePrefix + "ApiResourceClaims" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ApiResourceClaims" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -318,7 +309,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ApiResourceScope > ( b = >
{
b . ToTable ( options . TablePrefix + "ApiResourceScopes" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ApiResourceScopes" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -331,14 +322,14 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ApiResourceProperty > ( b = >
{
b . ToTable ( options . TablePrefix + "ApiResourceProperties" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ApiResourceProperties" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
b . HasKey ( x = > new { x . ApiResourceId , x . Key , x . Value } ) ;
b . Property ( x = > x . Key ) . HasMaxLength ( ApiResourcePropertyConsts . KeyMaxLength ) . IsRequired ( ) ;
if ( IsDatabaseProvider ( builder , options , EfCoreDatabaseProvider . MySql , EfCoreDatabaseProvider . Oracle ) )
if ( IsDatabaseProvider ( builder , EfCoreDatabaseProvider . MySql , EfCoreDatabaseProvider . Oracle ) )
{
ApiResourcePropertyConsts . ValueMaxLength = 3 0 0 ;
}
@ -353,7 +344,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ApiScope > ( b = >
{
b . ToTable ( options . TablePrefix + "ApiScopes" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ApiScopes" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -369,7 +360,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ApiScopeClaim > ( b = >
{
b . ToTable ( options . TablePrefix + "ApiScopeClaims" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ApiScopeClaims" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -382,14 +373,14 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < ApiScopeProperty > ( b = >
{
b . ToTable ( options . TablePrefix + "ApiScopeProperties" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "ApiScopeProperties" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
b . HasKey ( x = > new { x . ApiScopeId , x . Key , x . Value } ) ;
b . Property ( x = > x . Key ) . HasMaxLength ( ApiScopePropertyConsts . KeyMaxLength ) . IsRequired ( ) ;
if ( IsDatabaseProvider ( builder , options , EfCoreDatabaseProvider . MySql , EfCoreDatabaseProvider . Oracle ) )
if ( IsDatabaseProvider ( builder , EfCoreDatabaseProvider . MySql , EfCoreDatabaseProvider . Oracle ) )
{
ApiScopePropertyConsts . ValueMaxLength = 3 0 0 ;
}
@ -404,7 +395,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < PersistedGrant > ( b = >
{
b . ToTable ( options . TablePrefix + "PersistedGrants" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "PersistedGrants" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -416,7 +407,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
b . Property ( x = > x . Description ) . HasMaxLength ( PersistedGrantConsts . DescriptionMaxLength ) ;
b . Property ( x = > x . CreationTime ) . IsRequired ( ) ;
if ( IsDatabaseProvider ( builder , options , EfCoreDatabaseProvider . MySql ) )
if ( IsDatabaseProvider ( builder , EfCoreDatabaseProvider . MySql ) )
{
PersistedGrantConsts . DataMaxLengthValue = 1 0 0 0 0 ; //TODO: MySQL accepts 20.000. We can consider to change in v3.0.
}
@ -438,7 +429,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
builder . Entity < DeviceFlowCodes > ( b = >
{
b . ToTable ( options . TablePrefix + "DeviceFlowCodes" , options . Schema ) ;
b . ToTable ( AbpIdentityServerDbProperties . Db TablePrefix + "DeviceFlowCodes" , AbpIdentityServerDbProperties . Db Schema) ;
b . ConfigureByConvention ( ) ;
@ -451,7 +442,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
b . Property ( x = > x . CreationTime ) . IsRequired ( ) ;
b . Property ( x = > x . Expiration ) . IsRequired ( ) ;
if ( IsDatabaseProvider ( builder , options , EfCoreDatabaseProvider . MySql ) )
if ( IsDatabaseProvider ( builder , EfCoreDatabaseProvider . MySql ) )
{
DeviceFlowCodesConsts . DataMaxLength = 1 0 0 0 0 ; //TODO: MySQL accepts 20.000. We can consider to change in v3.0.
}
@ -471,13 +462,11 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore
private static bool IsDatabaseProvider (
ModelBuilder modelBuilder ,
IdentityServerModelBuilderConfigurationOptions options ,
params EfCoreDatabaseProvider [ ] providers )
{
foreach ( var provider in providers )
{
if ( options . DatabaseProvider = = EfCoreDatabaseProvider . MySql | |
modelBuilder . GetDatabaseProvider ( ) = = provider )
if ( modelBuilder . GetDatabaseProvider ( ) = = provider )
{
return true ;
}