using Microsoft.AspNetCore.Authentication;

namespace Dpz.Core.Auth.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();
            await context.SignOutAsync(ConstValues.DefaultScheme);
            await context.ChallengeAsync(ConstValues.DefaultScheme);
        }
    }
}

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