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