Open Source Web Application Framework for ASP.NET Core
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

139 lines
5.5 KiB

using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
using OpenIddict.Abstractions;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Caching;
using Volo.Abp.DistributedLocking;
using Volo.Abp.Domain;
using Volo.Abp.Guids;
using Volo.Abp.Identity;
using Volo.Abp.Modularity;
using Volo.Abp.ObjectExtending;
using Volo.Abp.ObjectExtending.Modularity;
using Volo.Abp.OpenIddict.Applications;
using Volo.Abp.OpenIddict.Authorizations;
using Volo.Abp.OpenIddict.Scopes;
using Volo.Abp.OpenIddict.Tokens;
using Volo.Abp.Threading;
namespace Volo.Abp.OpenIddict;
[DependsOn(
typeof(AbpDddDomainModule),
typeof(AbpIdentityDomainModule),
typeof(AbpOpenIddictDomainSharedModule),
typeof(AbpDistributedLockingAbstractionsModule),
typeof(AbpCachingModule),
typeof(AbpGuidsModule)
)]
public class AbpOpenIddictDomainModule : AbpModule
{
private readonly static OneTimeRunner OneTimeRunner = new OneTimeRunner();
public override void ConfigureServices(ServiceConfigurationContext context)
{
AddOpenIddictCore(context.Services);
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
AsyncHelper.RunSync(() => OnApplicationInitializationAsync(context));
}
public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context)
{
var options = context.ServiceProvider.GetRequiredService<IOptions<TokenCleanupOptions>>().Value;
if (options.IsCleanupEnabled)
{
await context.ServiceProvider
.GetRequiredService<IBackgroundWorkerManager>()
.AddAsync(context.ServiceProvider.GetRequiredService<TokenCleanupBackgroundWorker>());
}
}
private void AddOpenIddictCore(IServiceCollection services)
{
var openIddictBuilder = services.AddOpenIddict()
.AddCore(builder =>
{
builder
.SetDefaultApplicationEntity<OpenIddictApplicationModel>()
.SetDefaultAuthorizationEntity<OpenIddictAuthorizationModel>()
.SetDefaultScopeEntity<OpenIddictScopeModel>()
.SetDefaultTokenEntity<OpenIddictTokenModel>();
builder
.AddApplicationStore<AbpOpenIddictApplicationStore>()
.AddAuthorizationStore<AbpOpenIddictAuthorizationStore>()
.AddScopeStore<AbpOpenIddictScopeStore>()
.AddTokenStore<AbpOpenIddictTokenStore>();
builder.ReplaceApplicationManager(typeof(AbpApplicationManager));
builder.ReplaceAuthorizationManager(typeof(AbpAuthorizationManager));
builder.ReplaceScopeManager(typeof(AbpScopeManager));
builder.ReplaceTokenManager(typeof(AbpTokenManager));
builder.Services.TryAddScoped(provider => (IAbpApplicationManager)provider.GetRequiredService<IOpenIddictApplicationManager>());
services.ExecutePreConfiguredActions(builder);
});
services.ExecutePreConfiguredActions(openIddictBuilder);
}
public override void PostConfigureServices(ServiceConfigurationContext context)
{
OneTimeRunner.Run(() =>
{
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
OpenIddictModuleExtensionConsts.ModuleName,
OpenIddictModuleExtensionConsts.EntityNames.Application,
typeof(OpenIddictApplication)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
OpenIddictModuleExtensionConsts.ModuleName,
OpenIddictModuleExtensionConsts.EntityNames.Application,
typeof(OpenIddictApplicationModel)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
OpenIddictModuleExtensionConsts.ModuleName,
OpenIddictModuleExtensionConsts.EntityNames.Authorization,
typeof(OpenIddictAuthorization)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
OpenIddictModuleExtensionConsts.ModuleName,
OpenIddictModuleExtensionConsts.EntityNames.Authorization,
typeof(OpenIddictAuthorizationModel)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
OpenIddictModuleExtensionConsts.ModuleName,
OpenIddictModuleExtensionConsts.EntityNames.Scope,
typeof(OpenIddictScope)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
OpenIddictModuleExtensionConsts.ModuleName,
OpenIddictModuleExtensionConsts.EntityNames.Scope,
typeof(OpenIddictScopeModel)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
OpenIddictModuleExtensionConsts.ModuleName,
OpenIddictModuleExtensionConsts.EntityNames.Token,
typeof(OpenIddictToken)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
OpenIddictModuleExtensionConsts.ModuleName,
OpenIddictModuleExtensionConsts.EntityNames.Token,
typeof(OpenIddictTokenModel)
);
});
}
}