Remotely/Server/Auth/TwoFactorRequiredHandler.cs
2023-07-26 15:56:24 -07:00

37 lines
1.1 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Remotely.Server.Services;
using Remotely.Shared.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Remotely.Server.Auth;
public class TwoFactorRequiredHandler : AuthorizationHandler<TwoFactorRequiredRequirement>
{
private readonly UserManager<RemotelyUser> _userManager;
private readonly IApplicationConfig _appConfig;
public TwoFactorRequiredHandler(UserManager<RemotelyUser> userManager, IApplicationConfig appConfig)
{
_userManager = userManager;
_appConfig = appConfig;
}
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, TwoFactorRequiredRequirement requirement)
{
if (context.User.Identity?.IsAuthenticated == true && _appConfig.Require2FA)
{
var user = await _userManager.GetUserAsync(context.User);
if (user?.TwoFactorEnabled != true)
{
context.Fail();
return;
}
}
context.Succeed(requirement);
}
}