using Elsa.Extensions; using JetBrains.Annotations; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; namespace Elsa.Requirements; /// /// Represents an authorization requirement for localhost requests, meaning that if a request comes from the localhost, the requirement is met. /// public class LocalHostRequirement : IAuthorizationRequirement { } /// [PublicAPI] public class LocalHostRequirementHandler : AuthorizationHandler { private readonly IHttpContextAccessor _httpContextAccessor; /// public LocalHostRequirementHandler(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } /// protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, LocalHostRequirement requirement) { if (_httpContextAccessor.HttpContext?.Request.IsLocal() == false) context.Fail(new AuthorizationFailureReason(this, "Only requests from localhost are allowed")); context.Succeed(requirement); return Task.CompletedTask; } }