* Bugfix - Take ufprt from form data if the request has form content type, otherwise fallback to use the query * External linking for members * Changed migration to reuse old table * removed unnecessary web.config files * Cleanup * Extracted class to own file * Clean up * Rollback changes to Umbraco.Web.UI.csproj * Fixed migration for SqlCE * Added 2fa for members * Change notification handler to be on deleted * Update src/Umbraco.Infrastructure/Security/MemberUserStore.cs Co-authored-by: Mole <nikolajlauridsen@protonmail.ch> * updated snippets * Fixed issue with errors not shown on member linking * fixed issue with errors * clean up * Fix issue where external logins could not be used to upgrade Umbraco, because the externalLogin table was expected to look different. (Like after the migration) * Fixed issue in Ignore legacy column now using result column. * Updated 2fa for members + publish notification when 2fa is requested. * Changed so only Members out of box supports 2fa * Cleanup * rollback of csproj file, that should not have been changed * Removed confirmed flag from db. It was not used. Handle case where a user is signed up for 2fa, but the provider do not exist anymore. Then it is just ignored until it shows up again Reintroduced ProviderName on interface, to ensure the class can be renamed safely * Bugfix * Registering DeleteTwoFactorLoginsOnMemberDeletedHandler * Rollback nuget packages added by mistake * Update src/Umbraco.Infrastructure/Services/Implement/TwoFactorLoginService.cs Co-authored-by: Mole <nikolajlauridsen@protonmail.ch> * Update src/Umbraco.Infrastructure/Persistence/Repositories/Implement/TwoFactorLoginRepository.cs Co-authored-by: Mole <nikolajlauridsen@protonmail.ch> * Added providername to snippet Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>
74 lines
3.7 KiB
C#
74 lines
3.7 KiB
C#
using System;
|
|
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
|
|
{
|
|
/// <summary>
|
|
/// Extension methods for <see cref="IdentityBuilder"/>
|
|
/// </summary>
|
|
public static class IdentityBuilderExtensions
|
|
{
|
|
/// <summary>
|
|
/// Adds a <see cref="UserManager{TUser}"/> for the <seealso cref="MemberIdentityUser"/>.
|
|
/// </summary>
|
|
/// <typeparam name="TInterface">The member manager interface</typeparam>
|
|
/// <typeparam name="TUserManager">The member manager type</typeparam>
|
|
/// <returns>The current <see cref="IdentityBuilder"/> instance.</returns>
|
|
public static IdentityBuilder AddMemberManager<TInterface, TUserManager>(this IdentityBuilder identityBuilder)
|
|
where TUserManager : UserManager<MemberIdentityUser>, TInterface
|
|
{
|
|
identityBuilder.AddUserManager<TUserManager>();
|
|
// 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<MemberIdentityUser>), factory => factory.GetRequiredService<TInterface>());
|
|
return identityBuilder;
|
|
}
|
|
|
|
public static IdentityBuilder AddRoleManager<TInterface, TRoleManager>(this IdentityBuilder identityBuilder)
|
|
where TRoleManager : RoleManager<UmbracoIdentityRole>, TInterface
|
|
{
|
|
identityBuilder.AddRoleManager<TRoleManager>();
|
|
identityBuilder.Services.AddScoped(typeof(TInterface), typeof(TRoleManager));
|
|
identityBuilder.Services.AddScoped(typeof(RoleManager<MemberIdentityUser>), factory => factory.GetRequiredService<TInterface>());
|
|
return identityBuilder;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Adds a <see cref="SignInManager{TUser}"/> implementation for <seealso cref="MemberIdentityUser"/>
|
|
/// </summary>
|
|
/// <typeparam name="TInterface">The sign in manager interface</typeparam>
|
|
/// <typeparam name="TSignInManager">The sign in manager type</typeparam>
|
|
/// <param name="identityBuilder">The <see cref="IdentityBuilder"/></param>
|
|
/// <returns>The current <see cref="IdentityBuilder"/> instance.</returns>
|
|
public static IdentityBuilder AddSignInManager<TInterface, TSignInManager>(this IdentityBuilder identityBuilder)
|
|
where TSignInManager : SignInManager<MemberIdentityUser>, TInterface
|
|
{
|
|
identityBuilder.AddSignInManager<TSignInManager>();
|
|
identityBuilder.Services.AddScoped(typeof(TInterface), typeof(TSignInManager));
|
|
return identityBuilder;
|
|
}
|
|
|
|
|
|
public static IdentityBuilder AddUserStore<TInterface, TStore>(this IdentityBuilder identityBuilder, Func<IServiceProvider, TStore> implementationFactory)
|
|
where TStore : class, TInterface
|
|
{
|
|
identityBuilder.Services.AddScoped(typeof(TInterface), implementationFactory);
|
|
return identityBuilder;
|
|
}
|
|
|
|
public static MemberIdentityBuilder AddTwoFactorProvider<T>(this MemberIdentityBuilder identityBuilder, string providerName) where T : class, ITwoFactorProvider
|
|
{
|
|
identityBuilder.Services.AddSingleton<ITwoFactorProvider, T>();
|
|
identityBuilder.Services.AddSingleton<T>();
|
|
identityBuilder.AddTokenProvider<TwoFactorMemberValidationProvider<T>>(providerName);
|
|
|
|
return identityBuilder;
|
|
}
|
|
}
|
|
}
|