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