mirror of
https://github.com/Kareadita/Kavita.git
synced 2026-03-10 12:05:51 -04:00
Co-authored-by: Joseph Milazzo <joseph.v.milazzo@gmail.com> Co-authored-by: Joe Milazzo <josephmajora@gmail.com>
36 lines
1.3 KiB
C#
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});
|
|
}
|
|
|
|
}
|
|
}
|