From a003d63e1d4e56c1cb74a0cb5d2b32ec8db707f5 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 8 Jan 2018 16:35:43 +0300 Subject: [PATCH] Added IdentityServerDbContext --- .../IdentityServerDbContext.cs | 215 +++++++++++++++++- 1 file changed, 213 insertions(+), 2 deletions(-) diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs index 3c4bc19fc4..84c7311b84 100644 --- a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs @@ -9,6 +9,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore { public class IdentityServerDbContext : AbpDbContext { + public const string TablePrefix = "AbpIds"; + public DbSet Clients { get; set; } public DbSet PersistedGrants { get; set; } @@ -17,12 +19,221 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore public DbSet IdentityResources { get; set; } - //TODO: Add child entity types too... + public DbSet ClientGrantTypes { get; set; } + + public DbSet ClientRedirectUris { get; set; } + + public DbSet ClientPostLogoutRedirectUris { get; set; } + + public DbSet ClientScopes { get; set; } + + public DbSet ClientSecrets { get; set; } + + public DbSet ClientClaims { get; set; } + + public DbSet ClientIdPRestrictions { get; set; } - public IdentityServerDbContext(DbContextOptions options) + public DbSet ClientCorsOrigins { get; set; } + + public DbSet ClientProperties { get; set; } + + public DbSet IdentityClaims { get; set; } + + public DbSet ApiSecrets { get; set; } + + public DbSet ApiResourceClaims { get; set; } + + public DbSet ApiScopes { get; set; } + + public DbSet ApiScopeClaims { get; set; } + + public IdentityServerDbContext(DbContextOptions options) : base(options) { } + + protected override void OnModelCreating(ModelBuilder builder) + { + base.OnModelCreating(builder); + + builder.Entity(client => + { + client.ToTable(TablePrefix + "Clients"); + + client.HasKey(x => x.Id); + + client.Property(x => x.ClientId).HasMaxLength(200).IsRequired(); + client.Property(x => x.ProtocolType).HasMaxLength(200).IsRequired(); + client.Property(x => x.ClientName).HasMaxLength(200); + client.Property(x => x.ClientUri).HasMaxLength(2000); + client.Property(x => x.LogoUri).HasMaxLength(2000); + client.Property(x => x.Description).HasMaxLength(1000); + client.Property(x => x.FrontChannelLogoutUri).HasMaxLength(2000); + client.Property(x => x.BackChannelLogoutUri).HasMaxLength(2000); + client.Property(x => x.ClientClaimsPrefix).HasMaxLength(200); + client.Property(x => x.PairWiseSubjectSalt).HasMaxLength(200); + + client.HasMany(x => x.AllowedGrantTypes).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.RedirectUris).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.PostLogoutRedirectUris).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.AllowedScopes).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.ClientSecrets).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.Claims).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.IdentityProviderRestrictions).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.AllowedCorsOrigins).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + client.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ClientId).IsRequired(); + + client.HasIndex(x => x.ClientId).IsUnique(); + }); + + builder.Entity(grantType => + { + grantType.ToTable(TablePrefix + "ClientGrantTypes"); + grantType.Property(x => x.GrantType).HasMaxLength(250).IsRequired(); + + grantType.Property(x => x.ClientId).IsRequired(); + }); + + builder.Entity(redirectUri => + { + redirectUri.ToTable(TablePrefix + "ClientRedirectUris"); + redirectUri.Property(x => x.RedirectUri).HasMaxLength(2000).IsRequired(); + }); + + builder.Entity(postLogoutRedirectUri => + { + postLogoutRedirectUri.ToTable(TablePrefix + "ClientPostLogoutRedirectUris"); + postLogoutRedirectUri.Property(x => x.PostLogoutRedirectUri).HasMaxLength(2000).IsRequired(); + }); + + builder.Entity(scope => + { + scope.ToTable(TablePrefix + "ClientScopes"); + scope.Property(x => x.Scope).HasMaxLength(200).IsRequired(); + }); + + builder.Entity(secret => + { + secret.ToTable(TablePrefix + "ClientSecrets"); + secret.Property(x => x.Value).HasMaxLength(2000).IsRequired(); + secret.Property(x => x.Type).HasMaxLength(250); + secret.Property(x => x.Description).HasMaxLength(2000); + }); + + builder.Entity(claim => + { + claim.ToTable(TablePrefix + "ClientClaims"); + claim.Property(x => x.Type).HasMaxLength(250).IsRequired(); + claim.Property(x => x.Value).HasMaxLength(250).IsRequired(); + }); + + builder.Entity(idPRestriction => + { + idPRestriction.ToTable(TablePrefix + "ClientIdPRestrictions"); + idPRestriction.Property(x => x.Provider).HasMaxLength(200).IsRequired(); + }); + + builder.Entity(corsOrigin => + { + corsOrigin.ToTable(TablePrefix + "ClientCorsOrigins"); + corsOrigin.Property(x => x.Origin).HasMaxLength(150).IsRequired(); + }); + + builder.Entity(property => + { + property.ToTable(TablePrefix + "ClientProperties"); + property.Property(x => x.Key).HasMaxLength(250).IsRequired(); + property.Property(x => x.Value).HasMaxLength(2000).IsRequired(); + }); + + builder.Entity(grant => + { + grant.ToTable(TablePrefix + "PersistedGrants"); + + grant.Property(x => x.Key).HasMaxLength(200).ValueGeneratedNever(); + grant.Property(x => x.Type).HasMaxLength(50).IsRequired(); + grant.Property(x => x.SubjectId).HasMaxLength(200); + grant.Property(x => x.ClientId).HasMaxLength(200).IsRequired(); + grant.Property(x => x.CreationTime).IsRequired(); + grant.Property(x => x.Data).IsRequired(); + + grant.HasKey(x => x.Key); + + grant.HasIndex(x => new { x.SubjectId, x.ClientId, x.Type }); + }); + + builder.Entity(identityResource => + { + identityResource.ToTable(TablePrefix + "IdentityResources").HasKey(x => x.Id); + + identityResource.Property(x => x.Name).HasMaxLength(200).IsRequired(); + identityResource.Property(x => x.DisplayName).HasMaxLength(200); + identityResource.Property(x => x.Description).HasMaxLength(1000); + + identityResource.HasIndex(x => x.Name).IsUnique(); + + + identityResource.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); + }); + + builder.Entity(claim => + { + claim.ToTable(TablePrefix + "IdentityClaims").HasKey(x => x.Id); + + claim.Property(x => x.Type).HasMaxLength(200).IsRequired(); + }); + + builder.Entity(apiResource => + { + apiResource.ToTable(TablePrefix + "ApiResources").HasKey(x => x.Id); + + apiResource.Property(x => x.Name).HasMaxLength(200).IsRequired(); + apiResource.Property(x => x.DisplayName).HasMaxLength(200); + apiResource.Property(x => x.Description).HasMaxLength(1000); + + apiResource.HasIndex(x => x.Name).IsUnique(); + + apiResource.HasMany(x => x.Secrets).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); + apiResource.HasMany(x => x.Scopes).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); + apiResource.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.ApiResourceId).IsRequired(); + }); + + builder.Entity(apiSecret => + { + apiSecret.ToTable(TablePrefix + "ApiSecrets").HasKey(x => x.Id); + + apiSecret.Property(x => x.Description).HasMaxLength(1000); + apiSecret.Property(x => x.Value).HasMaxLength(2000); + apiSecret.Property(x => x.Type).HasMaxLength(250); + }); + + builder.Entity(apiClaim => + { + apiClaim.ToTable(TablePrefix + "ApiClaims").HasKey(x => x.Id); + + apiClaim.Property(x => x.Type).HasMaxLength(200).IsRequired(); + }); + + builder.Entity(apiScope => + { + apiScope.ToTable(TablePrefix + "ApiScopes").HasKey(x => x.Id); + + apiScope.Property(x => x.Name).HasMaxLength(200).IsRequired(); + apiScope.Property(x => x.DisplayName).HasMaxLength(200); + apiScope.Property(x => x.Description).HasMaxLength(1000); + + apiScope.HasIndex(x => x.Name).IsUnique(); + + apiScope.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.ApiScopeId).IsRequired(); + }); + + builder.Entity(apiScopeClaim => + { + apiScopeClaim.ToTable(TablePrefix + "ApiScopeClaims").HasKey(x => x.Id); + + apiScopeClaim.Property(x => x.Type).HasMaxLength(200).IsRequired(); + }); + } } }