using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Services.OperationStatus; namespace Umbraco.Cms.Core.Services; /// internal class MemberTwoFactorLoginService : TwoFactorLoginServiceBase, IMemberTwoFactorLoginService { private readonly IMemberService _memberService; public MemberTwoFactorLoginService( ITwoFactorLoginService twoFactorLoginService, IEnumerable twoFactorSetupGenerators, IMemberService memberService, ICoreScopeProvider scopeProvider) : base(twoFactorLoginService, twoFactorSetupGenerators, scopeProvider) => _memberService = memberService; /// public override async Task> DisableAsync(Guid memberKey, string providerName) { IMember? member = _memberService.GetByKey(memberKey); if (member is null) { return Attempt.Fail(TwoFactorOperationStatus.UserNotFound); } return await base.DisableAsync(memberKey, providerName); } /// public override async Task, TwoFactorOperationStatus>> GetProviderNamesAsync(Guid memberKey) { IMember? member = _memberService.GetByKey(memberKey); if (member is null) { return Attempt.FailWithStatus(TwoFactorOperationStatus.UserNotFound, Enumerable.Empty()); } return await base.GetProviderNamesAsync(memberKey); } /// public override async Task> GetSetupInfoAsync(Guid memberKey, string providerName) { IMember? member = _memberService.GetByKey(memberKey); if (member is null) { return Attempt.FailWithStatus(TwoFactorOperationStatus.UserNotFound, new NoopSetupTwoFactorModel()); } return await base.GetSetupInfoAsync(memberKey, providerName); } /// public override async Task> ValidateAndSaveAsync(string providerName, Guid memberKey, string secret, string code) { IMember? member = _memberService.GetByKey(memberKey); if (member is null) { return Attempt.Fail(TwoFactorOperationStatus.UserNotFound); } return await base.ValidateAndSaveAsync(providerName, memberKey, secret, code); } }