using Elsa.Http.Contracts;
using Elsa.Http.Models;
using JetBrains.Annotations;
using Microsoft.AspNetCore.Authorization;
namespace Elsa.Http.Handlers;
///
/// An that uses the to authorize an inbound HTTP request.
///
[PublicAPI]
public class AuthenticationBasedHttpEndpointAuthorizationHandler : IHttpEndpointAuthorizationHandler
{
private readonly IAuthorizationService _authorizationService;
///
/// Initializes a new instance of the class.
///
public AuthenticationBasedHttpEndpointAuthorizationHandler(IAuthorizationService authorizationService) => _authorizationService = authorizationService;
///
public async ValueTask AuthorizeAsync(AuthorizeHttpEndpointContext context)
{
var httpContext = context.HttpContext;
var user = httpContext.User;
var identity = user.Identity;
if (identity == null)
return false;
if (identity.IsAuthenticated == false)
return false;
if (string.IsNullOrWhiteSpace(context.Policy))
return identity.IsAuthenticated;
var authorizationResult = await _authorizationService.AuthorizeAsync(user,
new { workflowInstanceId = context.WorkflowInstanceId }, context.Policy!);
return authorizationResult.Succeeded;
}
}