using Dpz.Core.Entity.Base;

namespace Dpz.Core.WebApi.Middleware;

internal class CurrentUserRequiredExceptionMiddleware(
    RequestDelegate next,
    ILogger<CurrentUserRequiredExceptionMiddleware> logger
)
{
    public async Task InvokeAsync(HttpContext context)
    {
        try
        {
            await next(context);
        }
        catch (CurrentUserRequiredException ex) when (!context.Response.HasStarted)
        {
            logger.LogInformation(ex, "Current user is required");

            context.Response.Clear();
            context.Response.StatusCode = StatusCodes.Status401Unauthorized;
            await context.Response.WriteAsJsonAsync(
                ResponseResult.Fail(ex.Message, StatusCodes.Status401Unauthorized),
                context.RequestAborted
            );
        }
    }
}

internal static class CurrentUserRequiredExceptionMiddlewareExtensions
{
    public static IApplicationBuilder UseCurrentUserRequiredExceptionHandling(
        this IApplicationBuilder builder
    )
    {
        return builder.UseMiddleware<CurrentUserRequiredExceptionMiddleware>();
    }
}
评论加载中...