Kavita/Kavita.Server/Attributes/KPlusAttribute.cs
Fesaa c62b20f54b
BE Tech Debt (#4497)
Co-authored-by: Joseph Milazzo <joseph.v.milazzo@gmail.com>
Co-authored-by: Joe Milazzo <josephmajora@gmail.com>
2026-03-07 10:04:08 -08:00

36 lines
1.3 KiB
C#

using System;
using System.Threading.Tasks;
using Kavita.API.Services;
using Kavita.API.Services.Plus;
using Kavita.API.Store;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.DependencyInjection;
namespace Kavita.Server.Attributes;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class KPlusAttribute : Attribute, IAsyncAuthorizationFilter
{
public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
var userContext = context.HttpContext.RequestServices.GetRequiredService<IUserContext>();
if (!userContext.IsAuthenticated)
{
context.Result = new UnauthorizedResult();
return;
}
var licenseService = context.HttpContext.RequestServices.GetRequiredService<ILicenseService>();
if (!await licenseService.HasActiveLicense(ct: context.HttpContext.RequestAborted))
{
var localizationService = context.HttpContext.RequestServices.GetRequiredService<ILocalizationService>();
var message = localizationService.Translate(userContext.GetUserIdOrThrow(), "kavitaplus-restricted");
context.Result = new BadRequestObjectResult(new {Message = message});
}
}
}