|
|
|
@ -6,10 +6,16 @@ using Volo.Abp.EntityFrameworkCore.Modeling; |
|
|
|
using Volo.Abp.EntityFrameworkCore.ValueComparers; |
|
|
|
using Volo.Abp.EntityFrameworkCore.ValueConverters; |
|
|
|
using Volo.Abp.IdentityServer.ApiResources; |
|
|
|
using Volo.Abp.IdentityServer.ApiScopes; |
|
|
|
using Volo.Abp.IdentityServer.Clients; |
|
|
|
using Volo.Abp.IdentityServer.Devices; |
|
|
|
using Volo.Abp.IdentityServer.Grants; |
|
|
|
using Volo.Abp.IdentityServer.IdentityResources; |
|
|
|
using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; |
|
|
|
using Client = Volo.Abp.IdentityServer.Clients.Client; |
|
|
|
using ClientClaim = Volo.Abp.IdentityServer.Clients.ClientClaim; |
|
|
|
using IdentityResource = Volo.Abp.IdentityServer.IdentityResources.IdentityResource; |
|
|
|
using PersistedGrant = Volo.Abp.IdentityServer.Grants.PersistedGrant; |
|
|
|
|
|
|
|
namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
{ |
|
|
|
@ -28,6 +34,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
|
|
|
|
optionsAction?.Invoke(options); |
|
|
|
|
|
|
|
#region Client
|
|
|
|
|
|
|
|
builder.Entity<Client>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "Clients", options.Schema); |
|
|
|
@ -123,16 +131,16 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
|
|
|
|
b.HasKey(x => new {x.ClientId, x.Type, x.Value}); |
|
|
|
|
|
|
|
b.Property(x => x.Type).HasMaxLength(SecretConsts.TypeMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Type).HasMaxLength(ApiResourceSecretConsts.TypeMaxLength).IsRequired(); |
|
|
|
|
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) |
|
|
|
{ |
|
|
|
SecretConsts.ValueMaxLengthValue = 300; |
|
|
|
ApiResourceSecretConsts.ValueMaxLengthValue = 300; |
|
|
|
} |
|
|
|
|
|
|
|
b.Property(x => x.Value).HasMaxLength(SecretConsts.ValueMaxLengthValue).IsRequired(); |
|
|
|
b.Property(x => x.Value).HasMaxLength(ApiResourceSecretConsts.ValueMaxLengthValue).IsRequired(); |
|
|
|
|
|
|
|
b.Property(x => x.Description).HasMaxLength(SecretConsts.DescriptionMaxLength); |
|
|
|
b.Property(x => x.Description).HasMaxLength(ApiResourceSecretConsts.DescriptionMaxLength); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<ClientClaim>(b => |
|
|
|
@ -206,6 +214,10 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
b.HasIndex(x => x.Expiration); |
|
|
|
}); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region IdentityResource
|
|
|
|
|
|
|
|
builder.Entity<IdentityResource>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "IdentityResources", options.Schema); |
|
|
|
@ -216,6 +228,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
b.Property(x => x.DisplayName).HasMaxLength(IdentityResourceConsts.DisplayNameMaxLength); |
|
|
|
b.Property(x => x.Description).HasMaxLength(IdentityResourceConsts.DescriptionMaxLength); |
|
|
|
|
|
|
|
b.HasIndex(x => x.Name).IsUnique(); |
|
|
|
|
|
|
|
b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); |
|
|
|
b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); |
|
|
|
}); |
|
|
|
@ -239,11 +253,19 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
|
|
|
|
b.HasKey(x => new {x.IdentityResourceId, x.Key}); |
|
|
|
|
|
|
|
b.Property(x => x.Key).HasMaxLength(250).IsRequired(); |
|
|
|
b.Property(x => x.Value).HasMaxLength(2000).IsRequired(); |
|
|
|
b.Property(x => x.Key).HasMaxLength(IdentityResourcePropertyConsts.KeyMaxLength).IsRequired(); |
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) |
|
|
|
{ |
|
|
|
IdentityResourcePropertyConsts.ValueMaxLengthValue = 300; |
|
|
|
} |
|
|
|
b.Property(x => x.Value).HasMaxLength(IdentityResourcePropertyConsts.ValueMaxLengthValue).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<ApiResource>(b => |
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region ApiResource
|
|
|
|
|
|
|
|
builder.Entity<ApiResource>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "ApiResources", options.Schema); |
|
|
|
|
|
|
|
@ -269,15 +291,15 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
|
|
|
|
b.HasKey(x => new {x.ApiResourceId, x.Type, x.Value}); |
|
|
|
|
|
|
|
b.Property(x => x.Type).HasMaxLength(SecretConsts.TypeMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Description).HasMaxLength(SecretConsts.DescriptionMaxLength); |
|
|
|
b.Property(x => x.Type).HasMaxLength(ApiResourceSecretConsts.TypeMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Description).HasMaxLength(ApiResourceSecretConsts.DescriptionMaxLength); |
|
|
|
|
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) |
|
|
|
{ |
|
|
|
SecretConsts.ValueMaxLengthValue = 300; |
|
|
|
ApiResourceSecretConsts.ValueMaxLengthValue = 300; |
|
|
|
} |
|
|
|
|
|
|
|
b.Property(x => x.Value).HasMaxLength(SecretConsts.ValueMaxLengthValue).IsRequired(); |
|
|
|
b.Property(x => x.Value).HasMaxLength(ApiResourceSecretConsts.ValueMaxLengthValue).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<ApiResourceClaim>(b => |
|
|
|
@ -299,24 +321,28 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
|
|
|
|
b.HasKey(x => new {x.ApiResourceId, x.Scope}); |
|
|
|
|
|
|
|
b.Property(x => x.Scope).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Scope).HasMaxLength(ApiResourceScopeConsts.ScopeMaxLength).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region ApiScope
|
|
|
|
|
|
|
|
builder.Entity<ApiScope>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "ApiScopes", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.Property(x => x.Name).HasMaxLength(200).IsRequired(); |
|
|
|
b.Property(x => x.DisplayName).HasMaxLength(200); |
|
|
|
b.Property(x => x.Description).HasMaxLength(1000); |
|
|
|
b.Property(x => x.Name).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.DisplayName).HasMaxLength(ApiScopeConsts.DisplayNameMaxLength); |
|
|
|
b.Property(x => x.Description).HasMaxLength(ApiScopeConsts.DescriptionMaxLength); |
|
|
|
|
|
|
|
b.HasIndex(x => x.Name).IsUnique(); |
|
|
|
|
|
|
|
b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.ApiScopeId).IsRequired(); |
|
|
|
|
|
|
|
//Identity Server does not configure the relationship of Properties
|
|
|
|
//TODO: Identity Server does not configure the relationship of Properties
|
|
|
|
//b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ApiScopeId).IsRequired();
|
|
|
|
}); |
|
|
|
|
|
|
|
@ -329,7 +355,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
b.HasKey(x => new {x.ApiScopeId, x.Name, x.Type}); |
|
|
|
|
|
|
|
b.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Name).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Name).HasMaxLength(ApiScopeClaimConsts.NameMaxLength).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
builder.Entity<ApiScopeProperty>(b => |
|
|
|
@ -340,28 +366,42 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore |
|
|
|
|
|
|
|
b.HasKey(x => new {x.ApiScopeId, x.Key}); |
|
|
|
|
|
|
|
b.Property(x => x.Key).HasMaxLength(250).IsRequired(); |
|
|
|
//oracle?
|
|
|
|
b.Property(x => x.Value).HasMaxLength(2000).IsRequired(); |
|
|
|
b.Property(x => x.Key).HasMaxLength(ApiScopePropertyConsts.KeyMaxLength).IsRequired(); |
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) |
|
|
|
{ |
|
|
|
ApiScopePropertyConsts.ValueMaxLengthValue = 300; |
|
|
|
} |
|
|
|
b.Property(x => x.Value).HasMaxLength(ApiScopePropertyConsts.ValueMaxLengthValue).IsRequired(); |
|
|
|
}); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region DeviceFlowCodes
|
|
|
|
|
|
|
|
builder.Entity<DeviceFlowCodes>(b => |
|
|
|
{ |
|
|
|
b.ToTable(options.TablePrefix + "DeviceFlowCodes", options.Schema); |
|
|
|
|
|
|
|
b.ConfigureByConvention(); |
|
|
|
|
|
|
|
b.Property(x => x.DeviceCode).HasMaxLength(200).IsRequired(); |
|
|
|
b.Property(x => x.UserCode).HasMaxLength(200).IsRequired(); |
|
|
|
b.Property(x => x.SubjectId).HasMaxLength(200); |
|
|
|
b.Property(x => x.ClientId).HasMaxLength(200).IsRequired(); |
|
|
|
b.Property(x => x.DeviceCode).HasMaxLength(DeviceFlowCodesConsts.DeviceCodeMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.UserCode).HasMaxLength(DeviceFlowCodesConsts.UserCodeMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.SubjectId).HasMaxLength(DeviceFlowCodesConsts.SubjectIdMaxLength); |
|
|
|
b.Property(x => x.ClientId).HasMaxLength(DeviceFlowCodesConsts.ClientIdMaxLength).IsRequired(); |
|
|
|
b.Property(x => x.Expiration).IsRequired(); |
|
|
|
b.Property(x => x.Data).HasMaxLength(50000).IsRequired(); |
|
|
|
|
|
|
|
if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql)) |
|
|
|
{ |
|
|
|
DeviceFlowCodesConsts.DataMaxLengthValue = 10000; //TODO: MySQL accepts 20.000. We can consider to change in v3.0.
|
|
|
|
} |
|
|
|
b.Property(x => x.Data).HasMaxLength(DeviceFlowCodesConsts.DataMaxLengthValue).IsRequired(); |
|
|
|
|
|
|
|
b.HasIndex(x => new {x.UserCode}).IsUnique(); |
|
|
|
b.HasIndex(x => x.DeviceCode).IsUnique(); |
|
|
|
b.HasIndex(x => x.Expiration); |
|
|
|
}); |
|
|
|
|
|
|
|
#endregion
|
|
|
|
} |
|
|
|
|
|
|
|
private static bool IsDatabaseProvider( |
|
|
|
|