diff --git a/Iceshrimp.Backend/Core/Extensions/ServiceExtensions.cs b/Iceshrimp.Backend/Core/Extensions/ServiceExtensions.cs index 88d5019d..2d178650 100644 --- a/Iceshrimp.Backend/Core/Extensions/ServiceExtensions.cs +++ b/Iceshrimp.Backend/Core/Extensions/ServiceExtensions.cs @@ -2,6 +2,7 @@ using Iceshrimp.Backend.Controllers.Renderers.ActivityPub; using Iceshrimp.Backend.Core.Configuration; using Iceshrimp.Backend.Core.Federation.ActivityPub; using Iceshrimp.Backend.Core.Federation.WebFinger; +using Iceshrimp.Backend.Core.Middleware; using Iceshrimp.Backend.Core.Services; namespace Iceshrimp.Backend.Core.Extensions; @@ -18,11 +19,14 @@ public static class ServiceExtensions { services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); // Singleton = instantiated once across application lifetime services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); } public static void ConfigureServices(this IServiceCollection services, IConfiguration configuration) { diff --git a/Iceshrimp.Backend/Core/Middleware/AuthorizedFetchMiddleware.cs b/Iceshrimp.Backend/Core/Middleware/AuthorizedFetchMiddleware.cs index 36003f00..4555e33b 100644 --- a/Iceshrimp.Backend/Core/Middleware/AuthorizedFetchMiddleware.cs +++ b/Iceshrimp.Backend/Core/Middleware/AuthorizedFetchMiddleware.cs @@ -9,15 +9,17 @@ using Microsoft.Extensions.Options; namespace Iceshrimp.Backend.Core.Middleware; -public class AuthorizedFetchMiddleware(RequestDelegate next) { - public async Task InvokeAsync(HttpContext context, IOptionsSnapshot config, - DatabaseContext db, UserResolver userResolver, - ILogger logger) { - var endpoint = context.Features.Get()?.Endpoint; +public class AuthorizedFetchMiddleware( + IOptionsSnapshot config, + DatabaseContext db, + UserResolver userResolver, + ILogger logger) : IMiddleware { + public async Task InvokeAsync(HttpContext ctx, RequestDelegate next) { + var endpoint = ctx.Features.Get()?.Endpoint; var attribute = endpoint?.Metadata.GetMetadata(); if (attribute != null && config.Value.AuthorizedFetch) { - var request = context.Request; + var request = ctx.Request; if (!request.Headers.TryGetValue("signature", out var sigHeader)) throw new CustomException(HttpStatusCode.Unauthorized, "Request is missing the signature header"); @@ -41,13 +43,13 @@ public class AuthorizedFetchMiddleware(RequestDelegate next) { ? ["(request-target)", "digest", "host", "date"] : ["(request-target)", "host", "date"]; - var verified = await HttpSignature.Verify(context.Request, sig, headers, key.KeyPem); + var verified = await HttpSignature.Verify(ctx.Request, sig, headers, key.KeyPem); logger.LogDebug("HttpSignature.Verify returned {result} for key {keyId}", verified, sig.KeyId); if (!verified) throw new CustomException(HttpStatusCode.Forbidden, "Request signature validation failed"); } - await next(context); + await next(ctx); } } diff --git a/Iceshrimp.Backend/Core/Middleware/ErrorHandlerMiddleware.cs b/Iceshrimp.Backend/Core/Middleware/ErrorHandlerMiddleware.cs index 4accfd0b..4aa5fb0e 100644 --- a/Iceshrimp.Backend/Core/Middleware/ErrorHandlerMiddleware.cs +++ b/Iceshrimp.Backend/Core/Middleware/ErrorHandlerMiddleware.cs @@ -3,8 +3,8 @@ using Iceshrimp.Backend.Controllers.Schemas; namespace Iceshrimp.Backend.Core.Middleware; -public class ErrorHandlerMiddleware(RequestDelegate next) { - public async Task InvokeAsync(HttpContext ctx, ILoggerFactory loggerFactory) { +public class ErrorHandlerMiddleware(ILoggerFactory loggerFactory) : IMiddleware { + public async Task InvokeAsync(HttpContext ctx, RequestDelegate next) { try { await next(ctx); } diff --git a/Iceshrimp.Backend/Core/Middleware/RequestBufferingMiddleware.cs b/Iceshrimp.Backend/Core/Middleware/RequestBufferingMiddleware.cs index efc70219..06ef583a 100644 --- a/Iceshrimp.Backend/Core/Middleware/RequestBufferingMiddleware.cs +++ b/Iceshrimp.Backend/Core/Middleware/RequestBufferingMiddleware.cs @@ -2,14 +2,14 @@ using Microsoft.AspNetCore.Http.Features; namespace Iceshrimp.Backend.Core.Middleware; -public class RequestBufferingMiddleware(RequestDelegate next) { - public async Task InvokeAsync(HttpContext context) { - var endpoint = context.Features.Get()?.Endpoint; +public class RequestBufferingMiddleware : IMiddleware { + public async Task InvokeAsync(HttpContext ctx, RequestDelegate next) { + var endpoint = ctx.Features.Get()?.Endpoint; var attribute = endpoint?.Metadata.GetMetadata(); - if (attribute != null) context.Request.EnableBuffering(attribute.MaxLength); + if (attribute != null) ctx.Request.EnableBuffering(attribute.MaxLength); - await next(context); + await next(ctx); } }