29 lines
1.2 KiB
C#
29 lines
1.2 KiB
C#
using System.Text.Json;
|
|||
|
|
|
||
|
|
namespace PrivaPub.Api.Mastodon.Infrastructure
|
||
|
|
{
|
||
|
|
public static class MastodonErrors
|
||
|
|
{
|
||
|
|
public static IApplicationBuilder UseMastodonErrorBodies(this IApplicationBuilder app) =>
|
||
|
|
app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), api => api.UseStatusCodePages(async pages =>
|
||
|
|
{
|
||
|
|
var response = pages.HttpContext.Response;
|
||
|
|
response.ContentType = "application/json; charset=utf-8";
|
||
|
|
await response.WriteAsync(JsonSerializer.Serialize(new { error = Message(response.StatusCode) }, MastodonJson.Options));
|
||
|
|
}));
|
||
|
|
|
||
|
|
public static string Message(int status) => status switch
|
||
|
|
{
|
||
|
|
StatusCodes.Status401Unauthorized => "The access token is invalid",
|
||
|
|
StatusCodes.Status403Forbidden => "This action is outside the authorized scopes",
|
||
|
|
StatusCodes.Status404NotFound => "Record not found",
|
||
|
|
StatusCodes.Status405MethodNotAllowed => "Method not allowed",
|
||
|
|
StatusCodes.Status413PayloadTooLarge => "Payload too large",
|
||
|
|
StatusCodes.Status415UnsupportedMediaType => "Unsupported media type",
|
||
|
|
StatusCodes.Status422UnprocessableEntity => "Validation failed",
|
||
|
|
StatusCodes.Status429TooManyRequests => "Too many requests",
|
||
|
|
>= 500 => "Something went wrong.",
|
||
|
|
_ => "Bad request"
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|