mirror of
https://github.com/Radarr/Radarr
synced 2025-12-29 11:48:51 +01:00
48 lines
1.8 KiB
C#
48 lines
1.8 KiB
C#
using System.Net;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Http;
|
|
using NzbDrone.Common.Extensions;
|
|
using NzbDrone.Core.Authentication;
|
|
using NzbDrone.Core.Configuration;
|
|
using NzbDrone.Core.Configuration.Events;
|
|
using NzbDrone.Core.Messaging.Events;
|
|
using Radarr.Http.Extensions;
|
|
|
|
namespace NzbDrone.Http.Authentication
|
|
{
|
|
public class UiAuthorizationHandler : AuthorizationHandler<BypassableDenyAnonymousAuthorizationRequirement>, IAuthorizationRequirement, IHandle<ConfigSavedEvent>
|
|
{
|
|
private readonly IConfigFileProvider _configService;
|
|
private static AuthenticationRequiredType _authenticationRequired;
|
|
|
|
public UiAuthorizationHandler(IConfigFileProvider configService)
|
|
{
|
|
_configService = configService;
|
|
_authenticationRequired = configService.AuthenticationRequired;
|
|
}
|
|
|
|
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, BypassableDenyAnonymousAuthorizationRequirement requirement)
|
|
{
|
|
if (_authenticationRequired == AuthenticationRequiredType.DisabledForLocalAddresses)
|
|
{
|
|
if (context.Resource is HttpContext httpContext &&
|
|
IPAddress.TryParse(httpContext.GetRemoteIP(), out var ipAddress))
|
|
{
|
|
if (ipAddress.IsLocalAddress() ||
|
|
(_configService.TrustCgnatIpAddresses && ipAddress.IsCgnatIpAddress()))
|
|
{
|
|
context.Succeed(requirement);
|
|
}
|
|
}
|
|
}
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public void Handle(ConfigSavedEvent message)
|
|
{
|
|
_authenticationRequired = _configService.AuthenticationRequired;
|
|
}
|
|
}
|
|
}
|