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