using BotSharp.Abstraction.Users;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.DependencyInjection;
namespace BotSharp.Abstraction.Infrastructures.Attributes;
///
/// BotSharp authorization: check whether the request user is admin or root role.
///
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class BotSharpAuthAttribute : Attribute, IAsyncAuthorizationFilter
{
public BotSharpAuthAttribute()
{
}
public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
var services = context.HttpContext.RequestServices;
var userIdentity = services.GetRequiredService();
var userService = services.GetRequiredService();
var (isAdmin, user) = await userService.IsAdminUser(userIdentity.Id);
if (!isAdmin || user == null)
{
context.Result = new BadRequestResult();
}
}
}