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;
}
}