using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Options; using NzbDrone.Core.Configuration; namespace NzbDrone.Http.Authentication { public class UiAuthorizationPolicyProvider : IAuthorizationPolicyProvider { private const string POLICY_NAME = "UI"; private readonly IConfigFileProvider _config; public DefaultAuthorizationPolicyProvider FallbackPolicyProvider { get; } public UiAuthorizationPolicyProvider(IOptions options, IConfigFileProvider config) { FallbackPolicyProvider = new DefaultAuthorizationPolicyProvider(options); _config = config; } public Task GetDefaultPolicyAsync() => FallbackPolicyProvider.GetDefaultPolicyAsync(); public Task GetFallbackPolicyAsync() => FallbackPolicyProvider.GetFallbackPolicyAsync(); public Task GetPolicyAsync(string policyName) { if (policyName.Equals(POLICY_NAME, StringComparison.OrdinalIgnoreCase)) { var policy = new AuthorizationPolicyBuilder(_config.AuthenticationMethod.ToString()) .AddRequirements(new BypassableDenyAnonymousAuthorizationRequirement()); return Task.FromResult(policy.Build()); } return FallbackPolicyProvider.GetPolicyAsync(policyName); } } }