using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.DependencyInjection; using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Infrastructure.Security; namespace Umbraco.Extensions; /// /// Extension methods for /// public static class IdentityBuilderExtensions { /// /// Adds a for the . /// /// The member manager interface /// The member manager type /// The current instance. public static IdentityBuilder AddMemberManager(this IdentityBuilder identityBuilder) where TUserManager : UserManager, TInterface where TInterface : notnull { identityBuilder.AddUserManager(); // use a UniqueServiceDescriptor so we can check if it's already been added var memberManagerDescriptor = new UniqueServiceDescriptor(typeof(TInterface), typeof(TUserManager), ServiceLifetime.Scoped); identityBuilder.Services.Add(memberManagerDescriptor); identityBuilder.Services.AddScoped( typeof(UserManager), factory => factory.GetRequiredService()); return identityBuilder; } public static IdentityBuilder AddRoleManager(this IdentityBuilder identityBuilder) where TRoleManager : RoleManager, TInterface where TInterface : notnull { identityBuilder.AddRoleManager(); identityBuilder.Services.AddScoped(typeof(TInterface), typeof(TRoleManager)); identityBuilder.Services.AddScoped( typeof(RoleManager), factory => factory.GetRequiredService()); return identityBuilder; } /// /// Adds a implementation for /// /// The sign in manager interface /// The sign in manager type /// The /// The current instance. public static IdentityBuilder AddSignInManager(this IdentityBuilder identityBuilder) where TSignInManager : SignInManager, TInterface { identityBuilder.AddSignInManager(); identityBuilder.Services.AddScoped(typeof(TInterface), typeof(TSignInManager)); return identityBuilder; } public static IdentityBuilder AddUserStore( this IdentityBuilder identityBuilder, Func implementationFactory) where TStore : class, TInterface { identityBuilder.Services.AddScoped(typeof(TInterface), implementationFactory); return identityBuilder; } public static MemberIdentityBuilder AddTwoFactorProvider( this MemberIdentityBuilder identityBuilder, string providerName) where T : class, ITwoFactorProvider { identityBuilder.Services.AddSingleton(); identityBuilder.Services.AddSingleton(); identityBuilder.AddTokenProvider>(providerName); return identityBuilder; } }