// // Copyright (c) alveus.dev. All rights reserved. Licensed under the MIT License. // using Astral.ApiServer.Core; using Astral.ApiServer.Models.Common; using Astral.Core.Constants; namespace Astral.ApiServer.Middleware; /// /// Handle status code responses. /// public class StatusCodeMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; /// /// Initializes a new instance of the class. /// /// Instance of . /// Instance of . public StatusCodeMiddleware( RequestDelegate next, ILogger logger) { _next = next; _logger = logger; } /// /// Invoke middleware. /// /// Instance of . public Task Invoke(HttpContext context) { return InvokeAsync(context); } private async Task InvokeAsync(HttpContext context) { await _next(context); switch (context.Response.StatusCode) { case 401: context.Response.Headers.Clear(); context.Response.ContentType = "text/json"; await context.Response.WriteAsJsonAsync(new ErrorResponseModel { Error = CoreErrorCodes.Unauthorized, Message = "You're not authorized to do that" }); break; case 404: context.Response.Headers.Clear(); context.Response.ContentType = "text/json"; _logger.LogWarning("Request to non-existing endpoint: {endpoint}", context.Request.Path); await context.Response.WriteAsJsonAsync(new ErrorResponseModel { Error = ApiErrorCodes.UnknownMethod, Message = "Unknown method" }); break; case 405: context.Response.Headers.Clear(); context.Response.ContentType = "text/json"; await context.Response.WriteAsJsonAsync(new ErrorResponseModel { Error = ApiErrorCodes.IllegalMethod, Message = "Illegal method" }); break; case 415: context.Response.Headers.Clear(); context.Response.ContentType = "text/json"; await context.Response.WriteAsJsonAsync(new ErrorResponseModel { Error = ApiErrorCodes.UnsupportedBody, Message = "Unsupported body/media type" }); break; case 500: context.Response.Headers.Clear(); context.Response.ContentType = "text/json"; await context.Response.WriteAsJsonAsync(new ErrorResponseModel { Error = ApiErrorCodes.UnknownError, Message = "Unknown error" }); break; } } }