| | | 1 | | using Kestrun.TBuilder; |
| | | 2 | | using Microsoft.AspNetCore.ResponseCompression; |
| | | 3 | | using Microsoft.Extensions.Options; |
| | | 4 | | |
| | | 5 | | namespace Kestrun.Hosting.Compression; |
| | | 6 | | |
| | | 7 | | /// <summary> |
| | | 8 | | /// A response compression provider that respects endpoint metadata to disable compression. |
| | | 9 | | /// Wraps the built-in <see cref="ResponseCompressionProvider"/>. |
| | | 10 | | /// </summary> |
| | | 11 | | /// <remarks> |
| | | 12 | | /// Creates a new <see cref="KestrunResponseCompressionProvider"/>. |
| | | 13 | | /// </remarks> |
| | | 14 | | /// <param name="services">The service provider.</param> |
| | | 15 | | /// <param name="options">The response compression options.</param> |
| | 3 | 16 | | public sealed class KestrunResponseCompressionProvider( |
| | 3 | 17 | | IServiceProvider services, |
| | 3 | 18 | | IOptions<ResponseCompressionOptions> options) : IResponseCompressionProvider |
| | | 19 | | { |
| | 3 | 20 | | private readonly ResponseCompressionProvider _inner = ActivatorUtilities.CreateInstance<ResponseCompressionProvider> |
| | | 21 | | |
| | | 22 | | private static bool DisabledFor(HttpContext ctx) => |
| | 6 | 23 | | ctx.GetEndpoint()?.Metadata.Contains(EndpointDisablingCompressionExtensions.DisableResponseCompressionKey) == tr |
| | | 24 | | |
| | | 25 | | /// <summary> |
| | | 26 | | /// Determines if the request accepts compression, taking into account endpoint metadata. |
| | | 27 | | /// </summary> |
| | | 28 | | /// <param name="context">The HTTP context.</param> |
| | | 29 | | /// <returns>True if the request accepts compression; otherwise, false.</returns> |
| | | 30 | | public bool CheckRequestAcceptsCompression(HttpContext context) |
| | 2 | 31 | | => !DisabledFor(context) && _inner.CheckRequestAcceptsCompression(context); |
| | | 32 | | |
| | | 33 | | /// <summary> |
| | | 34 | | /// Gets the compression provider for the given HTTP context, taking into account endpoint metadata. |
| | | 35 | | /// </summary> |
| | | 36 | | /// <param name="context">The HTTP context.</param> |
| | | 37 | | /// <returns>The compression provider, or null if compression is disabled.</returns> |
| | | 38 | | public ICompressionProvider? GetCompressionProvider(HttpContext context) |
| | 2 | 39 | | => !DisabledFor(context) ? _inner.GetCompressionProvider(context) : null; |
| | | 40 | | |
| | | 41 | | /// <summary> |
| | | 42 | | /// Determines if the response should be compressed, taking into account endpoint metadata. |
| | | 43 | | /// </summary> |
| | | 44 | | /// <param name="context">The HTTP context.</param> |
| | | 45 | | /// <returns>True if the response should be compressed; otherwise, false.</returns> |
| | | 46 | | public bool ShouldCompressResponse(HttpContext context) |
| | 2 | 47 | | => !DisabledFor(context) && _inner.ShouldCompressResponse(context); |
| | | 48 | | } |