Added IdentityResourceStore

pull/190/head
Alper Ebicoglu 8 years ago
parent a3796a7190
commit 127ac4f617

@ -18,7 +18,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="AutoMapper" Version="6.1.1" />
<PackageReference Include="AutoMapper" Version="6.2.2" />
</ItemGroup>
</Project>

@ -0,0 +1,24 @@
using System.Threading.Tasks;
using Volo.Abp.IdentityServer.IdentityResources;
namespace Volo.Abp.IdentityServer.ApiResources
{
public class ApiResources
{
public Task<IdentityResource[]> Resources { get; set; }
public Task<ApiResource[]> IdentityResources { get; set; }
public ApiResources()
{
}
public ApiResources(Task<IdentityResource[]> resources, Task<ApiResource[]> identityResources)
{
Resources = resources;
IdentityResources = identityResources;
}
}
}

@ -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<IdentityResource>
{
Task<List<IdentityResource>> FindIdentityResourcesByScopeAsync(string[] scopeNames);
Task<List<ApiResource>> FindApiResourcesByScopeAsync(string[] scopeNames);
Task<ApiResource> FindApiResourceAsync(string name);
Task<ApiResources.ApiResources> GetAllResourcesAsync();
}
}

@ -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<IEnumerable<IdentityServer4.Models.IdentityResource>> FindIdentityResourcesByScopeAsync(IEnumerable<string> scopeNames)
{
var results = await _identityResourceRepository.FindIdentityResourcesByScopeAsync(scopeNames.ToArray());
return _objectMapper.Map<List<IdentityResource>, List<IdentityServer4.Models.IdentityResource>>(results);
}
public virtual async Task<IEnumerable<ApiResource>> FindApiResourcesByScopeAsync(IEnumerable<string> scopeNames)
{
var results = await _identityResourceRepository.FindApiResourcesByScopeAsync(scopeNames.ToArray());
return results?.Select(x => _objectMapper.Map<ApiResources.ApiResource, ApiResource>(x));
}
public virtual async Task<ApiResource> FindApiResourceAsync(string name)
{
var result = await _identityResourceRepository.FindApiResourceAsync(name);
return _objectMapper.Map<ApiResources.ApiResource, ApiResource>(result);
}
public virtual async Task<Resources> GetAllResourcesAsync()
{
var result = await _identityResourceRepository.GetAllResourcesAsync();
return new Resources
(
result.Resources.Result.Select(y => _objectMapper.Map<IdentityResource, IdentityServer4.Models.IdentityResource>(y)),
result.IdentityResources.Result.Select(x => _objectMapper.Map<ApiResources.ApiResource, ApiResource>(x))
);
}
}
}

@ -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<IdentityServerDbContext, IdentityResource>, IIdentityResourceRepository
{
public IdentityResourceRepository(IDbContextProvider<IdentityServerDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public Task<List<IdentityResource>> 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<List<ApiResource>> 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<ApiResource> 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<ApiResources.ApiResources> 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()));
}
}
}
Loading…
Cancel
Save