using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using IdentityServer4.Extensions;
using Kyoo.Authentication.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options;
namespace Kyoo.Authentication
{
///
/// The default IAuthorizationHandler implementation.
///
public class AuthorizationValidatorHandler : AuthorizationHandler
{
///
/// The permissions options to retrieve default permissions.
///
private readonly IOptionsMonitor _options;
///
/// Create a new .
///
/// The option containing default values.
public AuthorizationValidatorHandler(IOptionsMonitor options)
{
_options = options;
}
///
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, AuthRequirement requirement)
{
if (context.User.IsAuthenticated())
{
Claim perms = context.User.Claims.FirstOrDefault(x => x.Type == "permissions");
if (perms != null && perms.Value.Split(",").Contains(requirement.Permission.ToLower()))
context.Succeed(requirement);
}
else
{
ICollection defaultPerms = _options.CurrentValue.Default;
if (defaultPerms.Contains(requirement.Permission.ToLower()))
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
}