using EntrustSettle.Model; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Newtonsoft.Json; using System; using System.Text.Encodings.Web; using System.Threading.Tasks; using EntrustSettle.Common.HttpContextUser; namespace EntrustSettle.AuthHelper { public class ApiResponseHandler : AuthenticationHandler { private readonly IUser _user; public ApiResponseHandler(IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder, IUser user) : base(options, logger, encoder) { _user = user; } protected override Task HandleAuthenticateAsync() { throw new NotImplementedException(); } protected override async Task HandleChallengeAsync(AuthenticationProperties properties) { Response.ContentType = "application/json"; Response.StatusCode = StatusCodes.Status401Unauthorized; await Response.WriteAsync(JsonConvert.SerializeObject((new ApiResponse(StatusCode.CODE401)).MessageModel)); } protected override async Task HandleForbiddenAsync(AuthenticationProperties properties) { Response.ContentType = "application/json"; if (_user.MessageModel != null) { Response.StatusCode = _user.MessageModel.code; await Response.WriteAsync(JsonConvert.SerializeObject(_user.MessageModel)); } else { Response.StatusCode = StatusCodes.Status403Forbidden; await Response.WriteAsync(JsonConvert.SerializeObject((new ApiResponse(StatusCode.CODE403)).MessageModel)); } } } }