Enabling an Umbraco admin user to disable 2FA for a member (#13369)

* Fix Invalid authentication code bug

* Add translation keys for 2fa

* Display toggle for 2FA on member

* Add TwoFactorEnabled prop when saving member

* Handle disabling of 2FA

* Fix tests

* Changing obsolete msg

(cherry picked from commit af6b8fc5cb)
This commit is contained in:
Elitsa Marinovska
2022-11-28 13:42:38 +01:00
committed by Sebastiaan Janssen
parent d6d4421a37
commit dabc7bed9b
8 changed files with 170 additions and 40 deletions

View File

@@ -75,7 +75,8 @@ public class MemberControllerUnitTests
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
IPasswordChanger<MemberIdentityUser> passwordChanger,
IOptions<GlobalSettings> globalSettings,
IUser user)
IUser user,
ITwoFactorLoginService twoFactorLoginService)
{
// arrange
SetupMemberTestData(out var fakeMemberData, out _, ContentSaveAction.SaveNew);
@@ -87,7 +88,8 @@ public class MemberControllerUnitTests
dataTypeService,
backOfficeSecurityAccessor,
passwordChanger,
globalSettings);
globalSettings,
twoFactorLoginService);
sut.ModelState.AddModelError("key", "Invalid model state");
Mock.Get(umbracoMembersUserManager)
@@ -119,7 +121,8 @@ public class MemberControllerUnitTests
IBackOfficeSecurity backOfficeSecurity,
IPasswordChanger<MemberIdentityUser> passwordChanger,
IOptions<GlobalSettings> globalSettings,
IUser user)
IUser user,
ITwoFactorLoginService twoFactorLoginService)
{
// arrange
var member = SetupMemberTestData(out var fakeMemberData, out var memberDisplay, ContentSaveAction.SaveNew);
@@ -148,7 +151,8 @@ public class MemberControllerUnitTests
dataTypeService,
backOfficeSecurityAccessor,
passwordChanger,
globalSettings);
globalSettings,
twoFactorLoginService);
// act
var result = await sut.PostSave(fakeMemberData);
@@ -171,7 +175,8 @@ public class MemberControllerUnitTests
IBackOfficeSecurity backOfficeSecurity,
IPasswordChanger<MemberIdentityUser> passwordChanger,
IOptions<GlobalSettings> globalSettings,
IUser user)
IUser user,
ITwoFactorLoginService twoFactorLoginService)
{
// arrange
var member = SetupMemberTestData(out var fakeMemberData, out var memberDisplay, ContentSaveAction.SaveNew);
@@ -200,7 +205,8 @@ public class MemberControllerUnitTests
dataTypeService,
backOfficeSecurityAccessor,
passwordChanger,
globalSettings);
globalSettings,
twoFactorLoginService);
// act
var result = await sut.PostSave(fakeMemberData);
@@ -223,7 +229,8 @@ public class MemberControllerUnitTests
IBackOfficeSecurity backOfficeSecurity,
IPasswordChanger<MemberIdentityUser> passwordChanger,
IOptions<GlobalSettings> globalSettings,
IUser user)
IUser user,
ITwoFactorLoginService twoFactorLoginService)
{
// arrange
var member = SetupMemberTestData(out var fakeMemberData, out var memberDisplay, ContentSaveAction.Save);
@@ -262,7 +269,8 @@ public class MemberControllerUnitTests
dataTypeService,
backOfficeSecurityAccessor,
passwordChanger,
globalSettings);
globalSettings,
twoFactorLoginService);
// act
var result = await sut.PostSave(fakeMemberData);
@@ -285,7 +293,8 @@ public class MemberControllerUnitTests
IBackOfficeSecurity backOfficeSecurity,
IPasswordChanger<MemberIdentityUser> passwordChanger,
IOptions<GlobalSettings> globalSettings,
IUser user)
IUser user,
ITwoFactorLoginService twoFactorLoginService)
{
// arrange
var member = SetupMemberTestData(out var fakeMemberData, out _, ContentSaveAction.Save);
@@ -320,7 +329,8 @@ public class MemberControllerUnitTests
dataTypeService,
backOfficeSecurityAccessor,
passwordChanger,
globalSettings);
globalSettings,
twoFactorLoginService);
// act
var result = await sut.PostSave(fakeMemberData);
@@ -375,7 +385,8 @@ public class MemberControllerUnitTests
IBackOfficeSecurity backOfficeSecurity,
IPasswordChanger<MemberIdentityUser> passwordChanger,
IOptions<GlobalSettings> globalSettings,
IUser user)
IUser user,
ITwoFactorLoginService twoFactorLoginService)
{
// arrange
var member = SetupMemberTestData(out var fakeMemberData, out _, ContentSaveAction.SaveNew);
@@ -403,7 +414,8 @@ public class MemberControllerUnitTests
dataTypeService,
backOfficeSecurityAccessor,
passwordChanger,
globalSettings);
globalSettings,
twoFactorLoginService);
// act
var result = sut.PostSave(fakeMemberData).Result;
@@ -427,7 +439,8 @@ public class MemberControllerUnitTests
IBackOfficeSecurity backOfficeSecurity,
IPasswordChanger<MemberIdentityUser> passwordChanger,
IOptions<GlobalSettings> globalSettings,
IUser user)
IUser user,
ITwoFactorLoginService twoFactorLoginService)
{
// arrange
var roleName = "anyrole";
@@ -470,7 +483,8 @@ public class MemberControllerUnitTests
dataTypeService,
backOfficeSecurityAccessor,
passwordChanger,
globalSettings);
globalSettings,
twoFactorLoginService);
// act
var result = await sut.PostSave(fakeMemberData);
@@ -509,7 +523,8 @@ public class MemberControllerUnitTests
IDataTypeService dataTypeService,
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
IPasswordChanger<MemberIdentityUser> passwordChanger,
IOptions<GlobalSettings> globalSettings)
IOptions<GlobalSettings> globalSettings,
ITwoFactorLoginService twoFactorLoginService)
{
var httpContextAccessor = new HttpContextAccessor();
@@ -559,7 +574,8 @@ public class MemberControllerUnitTests
memberGroupService,
mockPasswordConfig.Object,
contentTypeBaseServiceProvider.Object,
propertyEditorCollection));
propertyEditorCollection,
twoFactorLoginService));
var map = new MapDefinitionCollection(() => new List<IMapDefinition>
{
@@ -608,7 +624,8 @@ public class MemberControllerUnitTests
backOfficeSecurityAccessor,
new ConfigurationEditorJsonSerializer(),
passwordChanger,
scopeProvider);
scopeProvider,
twoFactorLoginService);
}
/// <summary>
@@ -699,6 +716,11 @@ public class MemberControllerUnitTests
$"{Constants.PropertyEditors.InternalGenericPropertiesPrefix}lockedOut",
},
new()
{
Alias =
$"{Constants.PropertyEditors.InternalGenericPropertiesPrefix}twoFactorEnabled",
},
new()
{
Alias =
$"{Constants.PropertyEditors.InternalGenericPropertiesPrefix}lastLockoutDate",