From dcebf60ea1531802241cbc01e3dd17867b5734b0 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Thu, 4 Jan 2018 16:48:12 +0300 Subject: [PATCH 01/12] Added mappings --- .../AbpIdentityServerDomainModule.cs | 2 +- .../Clients/ClientAutoMapperProfile.cs | 65 ++++++++++++++++++- 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs index 87cd39e4c8..ef4c7cd76e 100644 --- a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs @@ -14,7 +14,7 @@ namespace Volo.Abp.IdentityServer { services.Configure(options => { - options.AddProfile(/*TODO: validate: true*/); + options.AddProfile(validate: true); }); services.AddAssemblyOf(); diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientAutoMapperProfile.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientAutoMapperProfile.cs index fbec0430b8..0280ed4bda 100644 --- a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientAutoMapperProfile.cs +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientAutoMapperProfile.cs @@ -1,4 +1,9 @@ -using AutoMapper; +using System.Collections.Generic; +using System.Security.Claims; +using AutoMapper; +using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.Grants; +using Volo.Abp.IdentityServer.IdentityResources; namespace Volo.Abp.IdentityServer.Clients { @@ -12,6 +17,64 @@ namespace Volo.Abp.IdentityServer.Clients .ConstructUsing(src => src.Origin) .ReverseMap() .ForMember(dest => dest.Origin, opt => opt.MapFrom(src => src)); + + + CreateMap() + .ForMember(dest => dest.ApiSecrets, opt => opt.MapFrom(src => src.Secrets)); + + + CreateMap(); + + CreateMap(); + + CreateMap(); + + CreateMap(); + + CreateMap>() + .ReverseMap(); + + CreateMap() + .ForMember(dest => dest.ProtocolType, opt => opt.Condition(srs => srs != null)) + .ReverseMap(); + + CreateMap() + .ConstructUsing(src => src.Origin) + .ReverseMap() + .ForMember(dest => dest.Origin, opt => opt.MapFrom(src => src)); + + CreateMap() + .ConstructUsing(src => src.Provider) + .ReverseMap() + .ForMember(dest => dest.Provider, opt => opt.MapFrom(src => src)); + + CreateMap(MemberList.None) + .ConstructUsing(src => new Claim(src.Type, src.Value)) + .ReverseMap(); + + CreateMap() + .ConstructUsing(src => src.Scope) + .ReverseMap() + .ForMember(dest => dest.Scope, opt => opt.MapFrom(src => src)); + + CreateMap() + .ConstructUsing(src => src.PostLogoutRedirectUri) + .ReverseMap() + .ForMember(dest => dest.PostLogoutRedirectUri, opt => opt.MapFrom(src => src)); + + CreateMap() + .ConstructUsing(src => src.RedirectUri) + .ReverseMap() + .ForMember(dest => dest.RedirectUri, opt => opt.MapFrom(src => src)); + + CreateMap() + .ConstructUsing(src => src.GrantType) + .ReverseMap() + .ForMember(dest => dest.GrantType, opt => opt.MapFrom(src => src)); + + CreateMap(MemberList.Destination) + .ForMember(dest => dest.Type, opt => opt.Condition(srs => srs != null)) + .ReverseMap(); } } } From 487b4860c997e632f72c76a300c6f369b2d9d69b Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 5 Jan 2018 15:43:59 +0300 Subject: [PATCH 02/12] Added PersistedGrantStore --- .../AbpIdentityServerTestDataBuilder.cs | 21 +++++++++- .../Clients/PersistentGrant_Tests.cs | 39 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index 6fc4153dc8..53d082bcc4 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -2,25 +2,30 @@ using Volo.Abp.DependencyInjection; using Volo.Abp.Guids; using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Grants; namespace Volo.Abp.IdentityServer { public class AbpIdentityServerTestDataBuilder : ITransientDependency { private readonly IClientRepository _clientRepository; + private readonly IPersistentGrantRepository _persistentGrantRepository; private readonly IGuidGenerator _guidGenerator; public AbpIdentityServerTestDataBuilder( IClientRepository clientRepository, - IGuidGenerator guidGenerator) + IGuidGenerator guidGenerator, + IPersistentGrantRepository persistentGrantRepository) { _clientRepository = clientRepository; _guidGenerator = guidGenerator; + _persistentGrantRepository = persistentGrantRepository; } public void Build() { AddClients(); + AddPersistentGrants(); } private void AddClients() @@ -40,5 +45,19 @@ namespace Volo.Abp.IdentityServer _clientRepository.Insert(client42); } + + private void AddPersistentGrants() + { + var persistentGrant38 = new PersistedGrant(_guidGenerator.Create()) + { + Key = "38", + ClientId = "TestClientId-38", + Type = "TestType-38", + SubjectId = "TestSubject-38", + Data = "TestData-38" + }; + + _persistentGrantRepository.Insert(persistentGrant38); + } } } diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs new file mode 100644 index 0000000000..b59936fef2 --- /dev/null +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs @@ -0,0 +1,39 @@ +using System.Threading.Tasks; +using IdentityServer4.Stores; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Xunit; + +namespace Volo.Abp.IdentityServer.Clients +{ + public class PersistentGrantStore_Tests : AbpIdentityServerTestBase + { + private readonly IPersistedGrantStore _persistedGrantStore; + + public PersistentGrantStore_Tests() + { + _persistedGrantStore = ServiceProvider.GetRequiredService(); + } + + [Fact] + public async Task FindClientByIdAsync_Should_Return_Null_If_Not_Found() + { + var persistentGrant = await _persistedGrantStore.GetAsync("not-existing-id"); + persistentGrant.ShouldBeNull(); + } + + [Fact] + public async Task FindPersistentGrantByIdAsync_Should_Return_The_PersistentGrant_If_Found() + { + //Act + var client = await _persistedGrantStore.GetAsync("38"); + + //Assert + client.ShouldNotBeNull(); + client.ClientId.ShouldBe("TestClientId-38"); + client.SubjectId.ShouldBe("TestSubject-38"); + client.Data.ShouldContain("TestData-38"); + client.Type.ShouldContain("TestType-38"); + } + } +} From a3796a7190c3e86e76e15469b6d36a8d136c82d8 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 5 Jan 2018 15:44:12 +0300 Subject: [PATCH 03/12] Added PersistentGrantStore --- .../Grants/IPersistentGrantRepository.cs | 17 +++++ .../Grants/PersistedGrantStore.cs | 70 +++++++++++++++++++ .../PersistedGrantRepository.cs | 50 +++++++++++++ 3 files changed, 137 insertions(+) create mode 100644 src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/IPersistentGrantRepository.cs create mode 100644 src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs create mode 100644 src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/PersistedGrantRepository.cs diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/IPersistentGrantRepository.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/IPersistentGrantRepository.cs new file mode 100644 index 0000000000..709fe00d62 --- /dev/null +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/IPersistentGrantRepository.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; + +namespace Volo.Abp.IdentityServer.Grants +{ + public interface IPersistentGrantRepository : IRepository + { + Task FindByKeyAsync(string key); + + Task> GetListBySubjectIdAsync(string key); + + Task DeleteAsync(string subjectId, string clientId); + + Task DeleteAsync(string subjectId, string clientId, string type); + } +} \ No newline at end of file diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs new file mode 100644 index 0000000000..409353167e --- /dev/null +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs @@ -0,0 +1,70 @@ +using System.Collections.Generic; +using System.Linq; +using System.Linq.Dynamic.Core; +using System.Threading.Tasks; +using IdentityServer4.Stores; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.ObjectMapping; + +namespace Volo.Abp.IdentityServer.Grants +{ + public class PersistedGrantStore : IPersistedGrantStore, ITransientDependency + { + private readonly IPersistentGrantRepository _persistentGrantRepository; + private readonly IObjectMapper _objectMapper; + + public PersistedGrantStore(IPersistentGrantRepository persistentGrantRepository, IObjectMapper objectMapper) + { + _persistentGrantRepository = persistentGrantRepository; + _objectMapper = objectMapper; + } + + public virtual async Task StoreAsync(IdentityServer4.Models.PersistedGrant grant) + { + var entity = _objectMapper.Map(grant); + var existing = _persistentGrantRepository.FindByKeyAsync(grant.Key); + if (existing == null) + { + await _persistentGrantRepository.InsertAsync(entity); + } + else + { + await _persistentGrantRepository.UpdateAsync(entity); + } + } + + public virtual async Task GetAsync(string key) + { + var persistedGrant = await _persistentGrantRepository.FindByKeyAsync(key); + return _objectMapper.Map(persistedGrant); + } + + public virtual async Task> GetAllAsync(string subjectId) + { + var persistedGrants = await _persistentGrantRepository.GetListBySubjectIdAsync(subjectId); + return persistedGrants.Select(x => _objectMapper.Map(x)); + } + + public virtual async Task RemoveAsync(string key) + { + var persistedGrant = await _persistentGrantRepository.FindByKeyAsync(key); + if (persistedGrant == null) + { + return; + } + + await _persistentGrantRepository.DeleteAsync(persistedGrant); + } + + public virtual async Task RemoveAllAsync(string subjectId, string clientId) + { + await _persistentGrantRepository.DeleteAsync(subjectId, clientId); + } + + public virtual async Task RemoveAllAsync(string subjectId, string clientId, string type) + { + await _persistentGrantRepository.DeleteAsync(subjectId, clientId, type); + } + } +} diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/PersistedGrantRepository.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/PersistedGrantRepository.cs new file mode 100644 index 0000000000..0b1011992c --- /dev/null +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/PersistedGrantRepository.cs @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.IdentityServer.EntityFrameworkCore; +using Volo.Abp.IdentityServer.Grants; + +namespace Volo.Abp.IdentityServer +{ + public class PersistentGrantRepository : EfCoreRepository, IPersistentGrantRepository + { + public PersistentGrantRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + + } + + public Task FindByKeyAsync(string key) + { + return DbSet.FirstOrDefaultAsync(x => x.Key == key); + } + + public Task> GetListBySubjectIdAsync(string subjectId) + { + return DbSet.Where(x => x.SubjectId == subjectId).ToListAsync(); + } + + public Task DeleteAsync(string subjectId, string clientId) + { + DbSet.RemoveRange( + DbSet.Where(x => x.SubjectId == subjectId && x.ClientId == clientId) + ); + + return Task.FromResult(0); + } + + public Task DeleteAsync(string subjectId, string clientId, string type) + { + DbSet.RemoveRange( + DbSet.Where(x => + x.SubjectId == subjectId && + x.ClientId == clientId && + x.Type == type) + ); + + return Task.FromResult(0); + } + } +} From 127ac4f6170e8a4266394aca88179c6a426583f1 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Sat, 6 Jan 2018 00:51:13 +0300 Subject: [PATCH 04/12] Added IdentityResourceStore --- .../Volo.Abp.AutoMapper.csproj | 2 +- .../ApiResources/ApiResources.cs | 24 ++++++ .../IIdentityResourceRepository.cs | 19 +++++ .../IdentityResourceStore.cs | 50 ++++++++++++ .../IdentityResourceRepository.cs | 77 +++++++++++++++++++ 5 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResources.cs create mode 100644 src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs create mode 100644 src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceStore.cs create mode 100644 src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs diff --git a/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj b/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj index c7021e85f0..b522899251 100644 --- a/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj +++ b/src/Volo.Abp.AutoMapper/Volo.Abp.AutoMapper.csproj @@ -18,7 +18,7 @@ - + \ No newline at end of file diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResources.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResources.cs new file mode 100644 index 0000000000..32b32251ad --- /dev/null +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResources.cs @@ -0,0 +1,24 @@ +using System.Threading.Tasks; +using Volo.Abp.IdentityServer.IdentityResources; + +namespace Volo.Abp.IdentityServer.ApiResources +{ + public class ApiResources + { + public Task Resources { get; set; } + + public Task IdentityResources { get; set; } + + public ApiResources() + { + + } + + public ApiResources(Task resources, Task identityResources) + { + Resources = resources; + IdentityResources = identityResources; + } + + } +} \ No newline at end of file diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs new file mode 100644 index 0000000000..1d9bbffd15 --- /dev/null +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using IdentityServer4.Models; +using Volo.Abp.Domain.Repositories; +using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; + +namespace Volo.Abp.IdentityServer.IdentityResources +{ + public interface IIdentityResourceRepository : IRepository + { + Task> FindIdentityResourcesByScopeAsync(string[] scopeNames); + + Task> FindApiResourcesByScopeAsync(string[] scopeNames); + + Task FindApiResourceAsync(string name); + + Task GetAllResourcesAsync(); + } +} \ No newline at end of file diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceStore.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceStore.cs new file mode 100644 index 0000000000..e1f15844b8 --- /dev/null +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceStore.cs @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using IdentityServer4.Models; +using IdentityServer4.Stores; +using Volo.Abp.DependencyInjection; +using Volo.Abp.ObjectMapping; + +namespace Volo.Abp.IdentityServer.IdentityResources +{ + public class IdentityResourceStore : IResourceStore, ITransientDependency + { + private readonly IIdentityResourceRepository _identityResourceRepository; + private readonly IObjectMapper _objectMapper; + + public IdentityResourceStore(IIdentityResourceRepository identityResourceRepository, IObjectMapper objectMapper) + { + _identityResourceRepository = identityResourceRepository; + _objectMapper = objectMapper; + } + + public virtual async Task> FindIdentityResourcesByScopeAsync(IEnumerable scopeNames) + { + var results = await _identityResourceRepository.FindIdentityResourcesByScopeAsync(scopeNames.ToArray()); + return _objectMapper.Map, List>(results); + } + + public virtual async Task> FindApiResourcesByScopeAsync(IEnumerable scopeNames) + { + var results = await _identityResourceRepository.FindApiResourcesByScopeAsync(scopeNames.ToArray()); + return results?.Select(x => _objectMapper.Map(x)); + } + + public virtual async Task FindApiResourceAsync(string name) + { + var result = await _identityResourceRepository.FindApiResourceAsync(name); + return _objectMapper.Map(result); + } + + public virtual async Task GetAllResourcesAsync() + { + var result = await _identityResourceRepository.GetAllResourcesAsync(); + return new Resources + ( + result.Resources.Result.Select(y => _objectMapper.Map(y)), + result.IdentityResources.Result.Select(x => _objectMapper.Map(x)) + ); + } + } +} diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs new file mode 100644 index 0000000000..02897dcd99 --- /dev/null +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using IdentityServer4.Models; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.IdentityServer.EntityFrameworkCore; +using Volo.Abp.IdentityServer.IdentityResources; +using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; +using IdentityResource = Volo.Abp.IdentityServer.IdentityResources.IdentityResource; + +namespace Volo.Abp.IdentityServer +{ + public class IdentityResourceRepository : EfCoreRepository, IIdentityResourceRepository + { + public IdentityResourceRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + + } + + public Task> FindIdentityResourcesByScopeAsync(string[] scopeNames) + { + var query = from identityResource in DbSet.Include(x => x.UserClaims) + where scopeNames.Contains(identityResource.Name) + select identityResource; + + return query.ToListAsync(); + } + + public Task> FindApiResourcesByScopeAsync(string[] scopeNames) + { + var names = scopeNames.ToArray(); + + var query = from api in DbContext.ApiResources + where api.Scopes.Any(x => names.Contains(x.Name)) + select api; + + var apis = query + .Include(x => x.Secrets) + .Include(x => x.Scopes) + .ThenInclude(s => s.UserClaims) + .Include(x => x.UserClaims); + + return apis.ToListAsync(); + } + + public Task FindApiResourceAsync(string name) + { + var query = from apiResource in DbContext.ApiResources + where apiResource.Name == name + select apiResource; + + var apis = query + .Include(x => x.Secrets) + .Include(x => x.Scopes) + .ThenInclude(s => s.UserClaims) + .Include(x => x.UserClaims); + + return apis.FirstOrDefaultAsync(); + } + + public Task GetAllResourcesAsync() + { + var identity = DbContext.IdentityResources + .Include(x => x.UserClaims); + + var apis = DbContext.ApiResources + .Include(x => x.Secrets) + .Include(x => x.Scopes) + .ThenInclude(s => s.UserClaims) + .Include(x => x.UserClaims); + + return Task.FromResult(new ApiResources.ApiResources(identity.ToArrayAsync(), apis.ToArrayAsync())); + } + } +} From d2ff43dc6ef9dd4662a2c4075d473d50e040c037 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Sat, 6 Jan 2018 22:29:58 +0300 Subject: [PATCH 05/12] Added new test : StoreAsync_Should_Store_PersistedGrant --- .../Clients/ClientAutoMapperProfile.cs | 2 +- .../Grants/PersistedGrantStore.cs | 2 +- .../AbpIdentityServerTestDataBuilder.cs | 6 +-- .../Clients/IdentityResourceStore_Tests.cs | 20 ++++++++ .../Clients/PersistentGrant_Tests.cs | 51 ++++++++++++++++++- 5 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientAutoMapperProfile.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientAutoMapperProfile.cs index 0280ed4bda..b76f22e5af 100644 --- a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientAutoMapperProfile.cs +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientAutoMapperProfile.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.IdentityServer.Clients .ForMember(dest => dest.ApiSecrets, opt => opt.MapFrom(src => src.Secrets)); - CreateMap(); + CreateMap().ReverseMap(); CreateMap(); diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs index 409353167e..f312132900 100644 --- a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.IdentityServer.Grants public virtual async Task StoreAsync(IdentityServer4.Models.PersistedGrant grant) { var entity = _objectMapper.Map(grant); - var existing = _persistentGrantRepository.FindByKeyAsync(grant.Key); + var existing = await _persistentGrantRepository.FindByKeyAsync(grant.Key); if (existing == null) { await _persistentGrantRepository.InsertAsync(entity); diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index 53d082bcc4..f5936a7552 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -48,16 +48,14 @@ namespace Volo.Abp.IdentityServer private void AddPersistentGrants() { - var persistentGrant38 = new PersistedGrant(_guidGenerator.Create()) + _persistentGrantRepository.Insert(new PersistedGrant(_guidGenerator.Create()) { Key = "38", ClientId = "TestClientId-38", Type = "TestType-38", SubjectId = "TestSubject-38", Data = "TestData-38" - }; - - _persistentGrantRepository.Insert(persistentGrant38); + }); } } } diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs new file mode 100644 index 0000000000..1c8c3fe310 --- /dev/null +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs @@ -0,0 +1,20 @@ +using System.Threading.Tasks; +using IdentityServer4.Stores; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Xunit; + +namespace Volo.Abp.IdentityServer.Clients +{ + public class IdentityResourceStore_Tests : AbpIdentityServerTestBase + { + private readonly IResourceStore _persistedGrantStore; + + public IdentityResourceStore_Tests() + { + _persistedGrantStore = ServiceProvider.GetRequiredService(); + } + + //too:WRITE TESTS + } +} diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs index b59936fef2..46b8f9af45 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs @@ -1,4 +1,6 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; +using IdentityServer4.Models; using IdentityServer4.Stores; using Microsoft.Extensions.DependencyInjection; using Shouldly; @@ -35,5 +37,52 @@ namespace Volo.Abp.IdentityServer.Clients client.Data.ShouldContain("TestData-38"); client.Type.ShouldContain("TestType-38"); } + + [Fact] + public async Task StoreAsync_Should_Store_PersistedGrant() + { + //Act + await _persistedGrantStore.StoreAsync(new PersistedGrant + { + Key = "39", + ClientId = "TestClientId-39", + Type = "TestType-39", + SubjectId = "TestSubject-39", + Data = "TestData-39", + Expiration = new DateTime(2018, 1, 6, 21, 22, 23), + CreationTime = new DateTime(2018, 1, 5, 19, 20, 21) + }); + + //Assert + var persistedGrant = await _persistedGrantStore.GetAsync("39"); + persistedGrant.Key.ShouldBe("39"); + persistedGrant.ClientId.ShouldBe("TestClientId-39"); + persistedGrant.Type.ShouldBe("TestType-39"); + persistedGrant.SubjectId.ShouldBe("TestSubject-39"); + persistedGrant.Data.ShouldBe("TestData-39"); + + persistedGrant.Expiration.HasValue.ShouldBe(true); + persistedGrant.Expiration.Value.Year.ShouldBe(2018); + persistedGrant.Expiration.Value.Month.ShouldBe(1); + persistedGrant.Expiration.Value.Day.ShouldBe(6); + persistedGrant.Expiration.Value.Hour.ShouldBe(21); + persistedGrant.Expiration.Value.Minute.ShouldBe(22); + persistedGrant.Expiration.Value.Second.ShouldBe(23); + + persistedGrant.CreationTime.Year.ShouldBe(2018); + persistedGrant.CreationTime.Month.ShouldBe(1); + persistedGrant.CreationTime.Day.ShouldBe(5); + persistedGrant.CreationTime.Hour.ShouldBe(19); + persistedGrant.CreationTime.Minute.ShouldBe(20); + persistedGrant.CreationTime.Second.ShouldBe(21); + } + + [Fact] + public async Task FindClientByIdAsync_Should_Return_Null_If_Not_Found() + { + var persistentGrant = await _persistedGrantStore.GetAllAsync("not-existing-id"); + persistentGrant.ShouldBeNull(); + } + } } From 06b846c92943efb9755485b68d0ecf32c0a7099f Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Sat, 6 Jan 2018 23:09:57 +0300 Subject: [PATCH 06/12] Added new PersistentGrant tests --- .../AbpIdentityServerTestDataBuilder.cs | 31 +++++++++- .../Clients/PersistentGrant_Tests.cs | 58 +++++++++++++++++-- 2 files changed, 82 insertions(+), 7 deletions(-) diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index f5936a7552..4e6f69c33b 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -53,9 +53,38 @@ namespace Volo.Abp.IdentityServer Key = "38", ClientId = "TestClientId-38", Type = "TestType-38", - SubjectId = "TestSubject-38", + SubjectId = "TestSubject", Data = "TestData-38" }); + + + _persistentGrantRepository.Insert(new PersistedGrant(_guidGenerator.Create()) + { + Key = "37", + ClientId = "TestClientId-37", + Type = "TestType-37", + SubjectId = "TestSubject", + Data = "TestData-37" + }); + + _persistentGrantRepository.Insert(new PersistedGrant(_guidGenerator.Create()) + { + Key = "36", + ClientId = "TestClientId-X", + Type = "TestType-36", + SubjectId = "TestSubject-X", + Data = "TestData-36" + }); + + _persistentGrantRepository.Insert(new PersistedGrant(_guidGenerator.Create()) + { + Key = "35", + ClientId = "TestClientId-X", + Type = "TestType-35", + SubjectId = "TestSubject-X", + Data = "TestData-35" + }); + } } } diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs index 46b8f9af45..452f67f5d0 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs @@ -1,9 +1,11 @@ using System; +using System.Linq; using System.Threading.Tasks; using IdentityServer4.Models; using IdentityServer4.Stores; using Microsoft.Extensions.DependencyInjection; using Shouldly; +using Volo.Abp.Uow; using Xunit; namespace Volo.Abp.IdentityServer.Clients @@ -11,10 +13,12 @@ namespace Volo.Abp.IdentityServer.Clients public class PersistentGrantStore_Tests : AbpIdentityServerTestBase { private readonly IPersistedGrantStore _persistedGrantStore; + private readonly IUnitOfWorkManager _unitOfWorkManager; public PersistentGrantStore_Tests() { _persistedGrantStore = ServiceProvider.GetRequiredService(); + _unitOfWorkManager = ServiceProvider.GetRequiredService(); } [Fact] @@ -33,7 +37,7 @@ namespace Volo.Abp.IdentityServer.Clients //Assert client.ShouldNotBeNull(); client.ClientId.ShouldBe("TestClientId-38"); - client.SubjectId.ShouldBe("TestSubject-38"); + client.SubjectId.ShouldBe("TestSubject"); client.Data.ShouldContain("TestData-38"); client.Type.ShouldContain("TestType-38"); } @@ -47,7 +51,7 @@ namespace Volo.Abp.IdentityServer.Clients Key = "39", ClientId = "TestClientId-39", Type = "TestType-39", - SubjectId = "TestSubject-39", + SubjectId = "TestSubject", Data = "TestData-39", Expiration = new DateTime(2018, 1, 6, 21, 22, 23), CreationTime = new DateTime(2018, 1, 5, 19, 20, 21) @@ -58,7 +62,7 @@ namespace Volo.Abp.IdentityServer.Clients persistedGrant.Key.ShouldBe("39"); persistedGrant.ClientId.ShouldBe("TestClientId-39"); persistedGrant.Type.ShouldBe("TestType-39"); - persistedGrant.SubjectId.ShouldBe("TestSubject-39"); + persistedGrant.SubjectId.ShouldBe("TestSubject"); persistedGrant.Data.ShouldBe("TestData-39"); persistedGrant.Expiration.HasValue.ShouldBe(true); @@ -78,10 +82,52 @@ namespace Volo.Abp.IdentityServer.Clients } [Fact] - public async Task FindClientByIdAsync_Should_Return_Null_If_Not_Found() + public async Task GetAllAsync_Should_Get_All_PersistedGrants_For_A_Given_SubjectId() { - var persistentGrant = await _persistedGrantStore.GetAllAsync("not-existing-id"); - persistentGrant.ShouldBeNull(); + //Act + var persistentGrants = await _persistedGrantStore.GetAllAsync("TestSubject"); + + //Assert + var persistedGrants = persistentGrants as PersistedGrant[] ?? persistentGrants.ToArray(); + persistedGrants.ShouldNotBe(null); + persistedGrants.Length.ShouldBe(2); + persistedGrants[0].SubjectId.ShouldBe("TestSubject"); + persistedGrants[1].SubjectId.ShouldBe("TestSubject"); + } + + [Fact] + public async Task RemoveAsync_Should_Remove_PeristedGrant() + { + //Arrange + await _persistedGrantStore.StoreAsync(new PersistedGrant + { + Key = "#1P3R" + }); + + //Act + await _persistedGrantStore.RemoveAsync("#1P3R"); + + //Assert + var persistedGrant = await _persistedGrantStore.GetAsync("#1P3R"); + persistedGrant.ShouldBe(null); + } + + [Fact] + public async Task RemoveAllAsync_Should_RemoveAll_PeristedGrants_For_A_Given_Subject_And_ClientId() + { + //Arrange + var persistedGrantsWithTestSubjectX = await _persistedGrantStore.GetAllAsync("TestSubject-X"); + var persistedGrantsWithTestSubjectXBeforeLength = persistedGrantsWithTestSubjectX.ToArray().Length; + + //Act + await _persistedGrantStore.RemoveAllAsync("TestSubject-X", "TestClientId-X"); + + //Assert + persistedGrantsWithTestSubjectXBeforeLength.ShouldBe(2); + + var persistedGrants = (await _persistedGrantStore.GetAllAsync("TestClientId-37")).ToArray(); + persistedGrants.ShouldNotBe(null); + persistedGrants.Length.ShouldBe(0); } } From b4460f7613910021558335270cd226071d10c2b6 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Sat, 6 Jan 2018 23:11:27 +0300 Subject: [PATCH 07/12] Refactored. --- .../Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs | 4 ++-- .../Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs index 1c8c3fe310..1191d6d7fc 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs @@ -8,11 +8,11 @@ namespace Volo.Abp.IdentityServer.Clients { public class IdentityResourceStore_Tests : AbpIdentityServerTestBase { - private readonly IResourceStore _persistedGrantStore; + private readonly IResourceStore _resourceStore; public IdentityResourceStore_Tests() { - _persistedGrantStore = ServiceProvider.GetRequiredService(); + _resourceStore = ServiceProvider.GetRequiredService(); } //too:WRITE TESTS diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs index 452f67f5d0..3dfa2c3154 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs @@ -5,7 +5,6 @@ using IdentityServer4.Models; using IdentityServer4.Stores; using Microsoft.Extensions.DependencyInjection; using Shouldly; -using Volo.Abp.Uow; using Xunit; namespace Volo.Abp.IdentityServer.Clients @@ -13,12 +12,10 @@ namespace Volo.Abp.IdentityServer.Clients public class PersistentGrantStore_Tests : AbpIdentityServerTestBase { private readonly IPersistedGrantStore _persistedGrantStore; - private readonly IUnitOfWorkManager _unitOfWorkManager; public PersistentGrantStore_Tests() { _persistedGrantStore = ServiceProvider.GetRequiredService(); - _unitOfWorkManager = ServiceProvider.GetRequiredService(); } [Fact] From 0d69dd94dd8d3dd7d4d5a5c0a65192fbb1711fd4 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Sat, 6 Jan 2018 23:24:39 +0300 Subject: [PATCH 08/12] Added identity resource test --- .../IIdentityResourceRepository.cs | 1 - .../AbpIdentityServerTestDataBuilder.cs | 39 +++++++++++++++---- .../Clients/IdentityResourceStore_Tests.cs | 10 ++++- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs index 1d9bbffd15..277e917375 100644 --- a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using System.Threading.Tasks; -using IdentityServer4.Models; using Volo.Abp.Domain.Repositories; using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index 4e6f69c33b..26013d58c0 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -3,29 +3,34 @@ using Volo.Abp.DependencyInjection; using Volo.Abp.Guids; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Grants; +using Volo.Abp.IdentityServer.IdentityResources; namespace Volo.Abp.IdentityServer { public class AbpIdentityServerTestDataBuilder : ITransientDependency { + private readonly IGuidGenerator _guidGenerator; private readonly IClientRepository _clientRepository; private readonly IPersistentGrantRepository _persistentGrantRepository; - private readonly IGuidGenerator _guidGenerator; + private readonly IIdentityResourceRepository _identityResourceRepository; public AbpIdentityServerTestDataBuilder( - IClientRepository clientRepository, - IGuidGenerator guidGenerator, - IPersistentGrantRepository persistentGrantRepository) + IClientRepository clientRepository, + IGuidGenerator guidGenerator, + IPersistentGrantRepository persistentGrantRepository, + IIdentityResourceRepository identityResourceRepository) { _clientRepository = clientRepository; _guidGenerator = guidGenerator; _persistentGrantRepository = persistentGrantRepository; + _identityResourceRepository = identityResourceRepository; } public void Build() { AddClients(); AddPersistentGrants(); + //AddIdentityResources(); } private void AddClients() @@ -42,7 +47,7 @@ namespace Volo.Abp.IdentityServer Origin = "Origin1" } ); - + _clientRepository.Insert(client42); } @@ -57,7 +62,6 @@ namespace Volo.Abp.IdentityServer Data = "TestData-38" }); - _persistentGrantRepository.Insert(new PersistedGrant(_guidGenerator.Create()) { Key = "37", @@ -84,7 +88,28 @@ namespace Volo.Abp.IdentityServer SubjectId = "TestSubject-X", Data = "TestData-35" }); - } + + //private void AddIdentityResources() + //{ + // _identityResourceRepository.Insert(new IdentityResource(_guidGenerator.Create()) + // { + // Enabled = true, + // Description = "Test-Identity-Resource-Description-1", + // DisplayName = "Test-Identity-Resource-DisplayName-1", + // Name = "Test-Identity-Resource-Name-1", + // Required = true, + // ShowInDiscoveryDocument = true, + // Emphasize = true, + // UserClaims = new List + // { + // new IdentityClaim(_guidGenerator.Create()) + // { + // Type = "Test-Identity-Resource-1-IdentityClaim-Type-1", + // IdentityResourceId = _guidGenerator.Create(), + // } + // } + // }); + //} } } diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs index 1191d6d7fc..f0551a3c0e 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs @@ -14,7 +14,13 @@ namespace Volo.Abp.IdentityServer.Clients { _resourceStore = ServiceProvider.GetRequiredService(); } - - //too:WRITE TESTS + + [Fact] + public async Task FindApiResourceAsync_Should_Return_Null_If_Not_Found() + { + var resource = await _resourceStore.FindApiResourceAsync("non-existing-name"); + resource.ShouldBeNull(); + } + } } From 56d6abe7c4778fafbcbafdf58c53f442468845af Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Sat, 6 Jan 2018 23:45:49 +0300 Subject: [PATCH 09/12] Added new IdenityResourceStore Test: FindApiResourcesByScopeAsync --- .../ApiResources/IApiResourceRepository.cs | 9 +++++ .../IdentityServer/ApiResourceRepository.cs | 15 +++++++ .../IdentityResourceRepository.cs | 1 - .../AbpIdentityServerTestDataBuilder.cs | 37 +++++++++++++++++- .../Clients/IdentityResourceStore_Tests.cs | 39 ++++++++++++++++++- 5 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs create mode 100644 src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResourceRepository.cs diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs new file mode 100644 index 0000000000..759bbbdf02 --- /dev/null +++ b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiResourceRepository.cs @@ -0,0 +1,9 @@ +using Volo.Abp.Domain.Repositories; + +namespace Volo.Abp.IdentityServer.ApiResources +{ + public interface IApiResourceRepository : IRepository + { + + } +} \ No newline at end of file diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResourceRepository.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResourceRepository.cs new file mode 100644 index 0000000000..bd62b96b6b --- /dev/null +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResourceRepository.cs @@ -0,0 +1,15 @@ +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.EntityFrameworkCore; + +namespace Volo.Abp.IdentityServer +{ + public class ApiResourceRepository : EfCoreRepository, IApiResourceRepository + { + public ApiResourceRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs index 02897dcd99..91326dd523 100644 --- a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs +++ b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using IdentityServer4.Models; using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index 26013d58c0..288ceea3d0 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using Volo.Abp.DependencyInjection; using Volo.Abp.Guids; +using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Grants; using Volo.Abp.IdentityServer.IdentityResources; @@ -13,17 +14,20 @@ namespace Volo.Abp.IdentityServer private readonly IClientRepository _clientRepository; private readonly IPersistentGrantRepository _persistentGrantRepository; private readonly IIdentityResourceRepository _identityResourceRepository; + private readonly IApiResourceRepository _apiResourceRepository; public AbpIdentityServerTestDataBuilder( IClientRepository clientRepository, IGuidGenerator guidGenerator, IPersistentGrantRepository persistentGrantRepository, - IIdentityResourceRepository identityResourceRepository) + IIdentityResourceRepository identityResourceRepository, + IApiResourceRepository apiResourceRepository) { _clientRepository = clientRepository; _guidGenerator = guidGenerator; _persistentGrantRepository = persistentGrantRepository; _identityResourceRepository = identityResourceRepository; + _apiResourceRepository = apiResourceRepository; } public void Build() @@ -31,6 +35,7 @@ namespace Volo.Abp.IdentityServer AddClients(); AddPersistentGrants(); //AddIdentityResources(); + AddApiResources(); } private void AddClients() @@ -90,6 +95,36 @@ namespace Volo.Abp.IdentityServer }); } + private void AddApiResources() + { + _apiResourceRepository.Insert(new ApiResource(_guidGenerator.Create()) + { + Name = "Test-ApiResource-Name-1", + Enabled = true, + Description = "Test-ApiResource-Description-1", + DisplayName = "Test-ApiResource-DisplayName-1", + Secrets = new List + { + new ApiSecret(_guidGenerator.Create()) + }, + UserClaims = new List + { + new ApiResourceClaim(_guidGenerator.Create()) + { + Type = "Test-ApiResource-Claim-Type-1" + } + }, + Scopes = new List + { + new ApiScope(_guidGenerator.Create()) + { + Name = "Test-ApiResource-ApiScope-Name-1", + DisplayName = "Test-ApiResource-ApiScope-DisplayName-1" + } + } + }); + } + //private void AddIdentityResources() //{ // _identityResourceRepository.Insert(new IdentityResource(_guidGenerator.Create()) diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs index f0551a3c0e..b6450f68b2 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs @@ -1,4 +1,7 @@ -using System.Threading.Tasks; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using IdentityServer4.Models; using IdentityServer4.Stores; using Microsoft.Extensions.DependencyInjection; using Shouldly; @@ -18,9 +21,41 @@ namespace Volo.Abp.IdentityServer.Clients [Fact] public async Task FindApiResourceAsync_Should_Return_Null_If_Not_Found() { + //Act var resource = await _resourceStore.FindApiResourceAsync("non-existing-name"); + + //Assert resource.ShouldBeNull(); } - + + [Fact] + public async Task FindApiResourceAsync_Should_Return_If_Found() + { + //Act + var apiResource = await _resourceStore.FindApiResourceAsync("Test-ApiResource-Name-1"); + + //Assert + apiResource.ShouldNotBe(null); + apiResource.Name.ShouldBe("Test-ApiResource-Name-1"); + apiResource.Description.ShouldBe("Test-ApiResource-Description-1"); + apiResource.DisplayName.ShouldBe("Test-ApiResource-DisplayName-1"); + } + + [Fact] + public async Task FindApiResourcesByScopeAsync_Should_Return_If_Found() + { + //Act + var apiResourcesByScope = await _resourceStore.FindApiResourcesByScopeAsync(new List + { + "Test-ApiResource-ApiScope-Name-1" + }); + + //Assert + var apiResources = apiResourcesByScope as ApiResource[] ?? apiResourcesByScope.ToArray(); + apiResources.ShouldNotBe(null); + + apiResources[0].Scopes.GroupBy(x=>x.Name).Count().ShouldBe(1); + apiResources[0].Scopes.GroupBy(x=>x.Name).First().Key.ShouldBe("Test-ApiResource-ApiScope-Name-1"); + } } } From bce5fa63d8efb6b6e2df7b5544c4fb449612f423 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Sat, 6 Jan 2018 23:57:56 +0300 Subject: [PATCH 10/12] Added new IdentityResource Test --- .../AbpIdentityServerTestDataBuilder.cs | 43 +++++++++---------- .../Clients/IdentityResourceStore_Tests.cs | 17 ++++++++ 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index 288ceea3d0..3fdb765086 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -34,8 +34,8 @@ namespace Volo.Abp.IdentityServer { AddClients(); AddPersistentGrants(); - //AddIdentityResources(); AddApiResources(); + AddIdentityResources(); } private void AddClients() @@ -125,26 +125,25 @@ namespace Volo.Abp.IdentityServer }); } - //private void AddIdentityResources() - //{ - // _identityResourceRepository.Insert(new IdentityResource(_guidGenerator.Create()) - // { - // Enabled = true, - // Description = "Test-Identity-Resource-Description-1", - // DisplayName = "Test-Identity-Resource-DisplayName-1", - // Name = "Test-Identity-Resource-Name-1", - // Required = true, - // ShowInDiscoveryDocument = true, - // Emphasize = true, - // UserClaims = new List - // { - // new IdentityClaim(_guidGenerator.Create()) - // { - // Type = "Test-Identity-Resource-1-IdentityClaim-Type-1", - // IdentityResourceId = _guidGenerator.Create(), - // } - // } - // }); - //} + private void AddIdentityResources() + { + _identityResourceRepository.Insert(new IdentityResource(_guidGenerator.Create()) + { + Enabled = true, + Description = "Test-Identity-Resource-Description-1", + DisplayName = "Test-Identity-Resource-DisplayName-1", + Name = "Test-Identity-Resource-Name-1", + Required = true, + ShowInDiscoveryDocument = true, + Emphasize = true, + UserClaims = new List + { + new IdentityClaim(_guidGenerator.Create()) + { + Type = "Test-Identity-Resource-1-IdentityClaim-Type-1" + } + } + }); + } } } diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs index b6450f68b2..90b9397e8e 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs @@ -57,5 +57,22 @@ namespace Volo.Abp.IdentityServer.Clients apiResources[0].Scopes.GroupBy(x=>x.Name).Count().ShouldBe(1); apiResources[0].Scopes.GroupBy(x=>x.Name).First().Key.ShouldBe("Test-ApiResource-ApiScope-Name-1"); } + + [Fact] + public async Task FindIdentityResourcesByScopeAsync_Should_Return_For_Given_Scopes() + { + //Act + var identityResourcesByScope = await _resourceStore.FindIdentityResourcesByScopeAsync(new List + { + "Test-Identity-Resource-Name-1" + }); + + //Assert + var resourcesByScope = identityResourcesByScope as IdentityResource[] ?? identityResourcesByScope.ToArray(); + resourcesByScope.Length.ShouldBe(1); + resourcesByScope.First().DisplayName.ShouldBe("Test-Identity-Resource-DisplayName-1"); + resourcesByScope.First().Description.ShouldBe("Test-Identity-Resource-Description-1"); + resourcesByScope.First().Required.ShouldBe(true); + } } } From faa4b1451ba000dd991bde9dd8d6b282e9b6c8fa Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Sun, 7 Jan 2018 00:13:33 +0300 Subject: [PATCH 11/12] Added IdentityResourceStore new test: GetAllResourcesAsync_Should_Return --- .../Clients/IdentityResourceStore_Tests.cs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs index 90b9397e8e..bd15fed89b 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/IdentityResourceStore_Tests.cs @@ -54,8 +54,8 @@ namespace Volo.Abp.IdentityServer.Clients var apiResources = apiResourcesByScope as ApiResource[] ?? apiResourcesByScope.ToArray(); apiResources.ShouldNotBe(null); - apiResources[0].Scopes.GroupBy(x=>x.Name).Count().ShouldBe(1); - apiResources[0].Scopes.GroupBy(x=>x.Name).First().Key.ShouldBe("Test-ApiResource-ApiScope-Name-1"); + apiResources[0].Scopes.GroupBy(x => x.Name).Count().ShouldBe(1); + apiResources[0].Scopes.GroupBy(x => x.Name).First().Key.ShouldBe("Test-ApiResource-ApiScope-Name-1"); } [Fact] @@ -74,5 +74,19 @@ namespace Volo.Abp.IdentityServer.Clients resourcesByScope.First().Description.ShouldBe("Test-Identity-Resource-Description-1"); resourcesByScope.First().Required.ShouldBe(true); } + + [Fact] + public async Task GetAllResourcesAsync_Should_Return() + { + //Act + var resources = await _resourceStore.GetAllResourcesAsync(); + + //Assert + resources.ShouldNotBe(null); + resources.ApiResources.Count.ShouldBe(1); + resources.ApiResources.First().Name.ShouldBe("Test-ApiResource-Name-1"); + resources.IdentityResources.First().Name.ShouldBe("Test-Identity-Resource-Name-1"); + resources.IdentityResources.First().Required.ShouldBe(true); + } } } From f097e2a6f200092f9089feb4024dbf4504573d13 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 8 Jan 2018 10:27:44 +0300 Subject: [PATCH 12/12] Removed IdentityResourceStore (not needed!) --- .../ApiResources/ApiResources.cs | 24 ------ .../IIdentityResourceRepository.cs | 18 ----- .../IdentityResourceStore.cs | 50 ------------ .../IdentityResourceRepository.cs | 76 ------------------- .../AbpIdentityServerTestDataBuilder.cs | 26 ------- .../Clients/PersistentGrant_Tests.cs | 1 - 6 files changed, 195 deletions(-) delete mode 100644 src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResources.cs delete mode 100644 src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs delete mode 100644 src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceStore.cs delete mode 100644 src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResources.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResources.cs deleted file mode 100644 index 32b32251ad..0000000000 --- a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiResources.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.IdentityServer.IdentityResources; - -namespace Volo.Abp.IdentityServer.ApiResources -{ - public class ApiResources - { - public Task Resources { get; set; } - - public Task IdentityResources { get; set; } - - public ApiResources() - { - - } - - public ApiResources(Task resources, Task identityResources) - { - Resources = resources; - IdentityResources = identityResources; - } - - } -} \ No newline at end of file diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs deleted file mode 100644 index 277e917375..0000000000 --- a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IIdentityResourceRepository.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp.Domain.Repositories; -using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; - -namespace Volo.Abp.IdentityServer.IdentityResources -{ - public interface IIdentityResourceRepository : IRepository - { - Task> FindIdentityResourcesByScopeAsync(string[] scopeNames); - - Task> FindApiResourcesByScopeAsync(string[] scopeNames); - - Task FindApiResourceAsync(string name); - - Task GetAllResourcesAsync(); - } -} \ No newline at end of file diff --git a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceStore.cs b/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceStore.cs deleted file mode 100644 index e1f15844b8..0000000000 --- a/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceStore.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using IdentityServer4.Models; -using IdentityServer4.Stores; -using Volo.Abp.DependencyInjection; -using Volo.Abp.ObjectMapping; - -namespace Volo.Abp.IdentityServer.IdentityResources -{ - public class IdentityResourceStore : IResourceStore, ITransientDependency - { - private readonly IIdentityResourceRepository _identityResourceRepository; - private readonly IObjectMapper _objectMapper; - - public IdentityResourceStore(IIdentityResourceRepository identityResourceRepository, IObjectMapper objectMapper) - { - _identityResourceRepository = identityResourceRepository; - _objectMapper = objectMapper; - } - - public virtual async Task> FindIdentityResourcesByScopeAsync(IEnumerable scopeNames) - { - var results = await _identityResourceRepository.FindIdentityResourcesByScopeAsync(scopeNames.ToArray()); - return _objectMapper.Map, List>(results); - } - - public virtual async Task> FindApiResourcesByScopeAsync(IEnumerable scopeNames) - { - var results = await _identityResourceRepository.FindApiResourcesByScopeAsync(scopeNames.ToArray()); - return results?.Select(x => _objectMapper.Map(x)); - } - - public virtual async Task FindApiResourceAsync(string name) - { - var result = await _identityResourceRepository.FindApiResourceAsync(name); - return _objectMapper.Map(result); - } - - public virtual async Task GetAllResourcesAsync() - { - var result = await _identityResourceRepository.GetAllResourcesAsync(); - return new Resources - ( - result.Resources.Result.Select(y => _objectMapper.Map(y)), - result.IdentityResources.Result.Select(x => _objectMapper.Map(x)) - ); - } - } -} diff --git a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs b/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs deleted file mode 100644 index 91326dd523..0000000000 --- a/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResourceRepository.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; -using Volo.Abp.Domain.Repositories.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.IdentityServer.EntityFrameworkCore; -using Volo.Abp.IdentityServer.IdentityResources; -using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; -using IdentityResource = Volo.Abp.IdentityServer.IdentityResources.IdentityResource; - -namespace Volo.Abp.IdentityServer -{ - public class IdentityResourceRepository : EfCoreRepository, IIdentityResourceRepository - { - public IdentityResourceRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) - { - - } - - public Task> FindIdentityResourcesByScopeAsync(string[] scopeNames) - { - var query = from identityResource in DbSet.Include(x => x.UserClaims) - where scopeNames.Contains(identityResource.Name) - select identityResource; - - return query.ToListAsync(); - } - - public Task> FindApiResourcesByScopeAsync(string[] scopeNames) - { - var names = scopeNames.ToArray(); - - var query = from api in DbContext.ApiResources - where api.Scopes.Any(x => names.Contains(x.Name)) - select api; - - var apis = query - .Include(x => x.Secrets) - .Include(x => x.Scopes) - .ThenInclude(s => s.UserClaims) - .Include(x => x.UserClaims); - - return apis.ToListAsync(); - } - - public Task FindApiResourceAsync(string name) - { - var query = from apiResource in DbContext.ApiResources - where apiResource.Name == name - select apiResource; - - var apis = query - .Include(x => x.Secrets) - .Include(x => x.Scopes) - .ThenInclude(s => s.UserClaims) - .Include(x => x.UserClaims); - - return apis.FirstOrDefaultAsync(); - } - - public Task GetAllResourcesAsync() - { - var identity = DbContext.IdentityResources - .Include(x => x.UserClaims); - - var apis = DbContext.ApiResources - .Include(x => x.Secrets) - .Include(x => x.Scopes) - .ThenInclude(s => s.UserClaims) - .Include(x => x.UserClaims); - - return Task.FromResult(new ApiResources.ApiResources(identity.ToArrayAsync(), apis.ToArrayAsync())); - } - } -} diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs index 3fdb765086..b3f1fa420b 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -4,7 +4,6 @@ using Volo.Abp.Guids; using Volo.Abp.IdentityServer.ApiResources; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Grants; -using Volo.Abp.IdentityServer.IdentityResources; namespace Volo.Abp.IdentityServer { @@ -13,20 +12,17 @@ namespace Volo.Abp.IdentityServer private readonly IGuidGenerator _guidGenerator; private readonly IClientRepository _clientRepository; private readonly IPersistentGrantRepository _persistentGrantRepository; - private readonly IIdentityResourceRepository _identityResourceRepository; private readonly IApiResourceRepository _apiResourceRepository; public AbpIdentityServerTestDataBuilder( IClientRepository clientRepository, IGuidGenerator guidGenerator, IPersistentGrantRepository persistentGrantRepository, - IIdentityResourceRepository identityResourceRepository, IApiResourceRepository apiResourceRepository) { _clientRepository = clientRepository; _guidGenerator = guidGenerator; _persistentGrantRepository = persistentGrantRepository; - _identityResourceRepository = identityResourceRepository; _apiResourceRepository = apiResourceRepository; } @@ -35,7 +31,6 @@ namespace Volo.Abp.IdentityServer AddClients(); AddPersistentGrants(); AddApiResources(); - AddIdentityResources(); } private void AddClients() @@ -124,26 +119,5 @@ namespace Volo.Abp.IdentityServer } }); } - - private void AddIdentityResources() - { - _identityResourceRepository.Insert(new IdentityResource(_guidGenerator.Create()) - { - Enabled = true, - Description = "Test-Identity-Resource-Description-1", - DisplayName = "Test-Identity-Resource-DisplayName-1", - Name = "Test-Identity-Resource-Name-1", - Required = true, - ShowInDiscoveryDocument = true, - Emphasize = true, - UserClaims = new List - { - new IdentityClaim(_guidGenerator.Create()) - { - Type = "Test-Identity-Resource-1-IdentityClaim-Type-1" - } - } - }); - } } } diff --git a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs index 3dfa2c3154..9a87e30d64 100644 --- a/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs +++ b/test/Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/Clients/PersistentGrant_Tests.cs @@ -126,6 +126,5 @@ namespace Volo.Abp.IdentityServer.Clients persistedGrants.ShouldNotBe(null); persistedGrants.Length.ShouldBe(0); } - } }