diff --git a/Iceshrimp.Backend/Components/PublicPreview/Renderers/MfmRenderer.cs b/Iceshrimp.Backend/Components/PublicPreview/Renderers/MfmRenderer.cs index 92af4b46..248dbc11 100644 --- a/Iceshrimp.Backend/Components/PublicPreview/Renderers/MfmRenderer.cs +++ b/Iceshrimp.Backend/Components/PublicPreview/Renderers/MfmRenderer.cs @@ -1,24 +1,24 @@ -using Iceshrimp.Backend.Core.Configuration; using Iceshrimp.Backend.Core.Database.Tables; using Iceshrimp.Backend.Core.Extensions; using Iceshrimp.Backend.Core.Helpers.LibMfm.Conversion; using Iceshrimp.Parsing; using Microsoft.AspNetCore.Components; -using Microsoft.Extensions.Options; namespace Iceshrimp.Backend.Components.PublicPreview.Renderers; -public class MfmRenderer(IOptions config) : ISingletonService +public class MfmRenderer(MfmConverter converter) : ISingletonService { - private readonly MfmConverter _converter = new(config); - public async Task RenderAsync( string? text, string? host, List mentions, List emoji, string rootElement ) { if (text is null) return null; var parsed = Mfm.parse(text); - var serialized = await _converter.ToHtmlAsync(parsed, mentions, host, emoji: emoji, rootElement: rootElement); + + // Ensure we are rendering HTML markup (AsyncLocal) + converter.SupportsHtmlFormatting.Value = true; + + var serialized = await converter.ToHtmlAsync(parsed, mentions, host, emoji: emoji, rootElement: rootElement); return new MarkupString(serialized); } } \ No newline at end of file diff --git a/Iceshrimp.Backend/Core/Middleware/AuthorizedFetchMiddleware.cs b/Iceshrimp.Backend/Core/Middleware/AuthorizedFetchMiddleware.cs index f4b47819..4bad65e8 100644 --- a/Iceshrimp.Backend/Core/Middleware/AuthorizedFetchMiddleware.cs +++ b/Iceshrimp.Backend/Core/Middleware/AuthorizedFetchMiddleware.cs @@ -5,6 +5,7 @@ using Iceshrimp.Backend.Core.Database; using Iceshrimp.Backend.Core.Database.Tables; using Iceshrimp.Backend.Core.Extensions; using Iceshrimp.Backend.Core.Federation.Cryptography; +using Iceshrimp.Backend.Core.Helpers.LibMfm.Conversion; using Iceshrimp.Backend.Core.Services; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; @@ -21,13 +22,17 @@ public class AuthorizedFetchMiddleware( SystemUserService systemUserSvc, ActivityPub.FederationControlService fedCtrlSvc, ILogger logger, - IHostApplicationLifetime appLifetime + IHostApplicationLifetime appLifetime, + MfmConverter mfmConverter ) : ConditionalMiddleware, IMiddlewareService { public static ServiceLifetime Lifetime => ServiceLifetime.Scoped; - + public async Task InvokeAsync(HttpContext ctx, RequestDelegate next) { + // Ensure we're rendering HTML markup (AsyncLocal) + mfmConverter.SupportsHtmlFormatting.Value = true; + if (!config.Value.AuthorizedFetch) { await next(ctx); @@ -147,4 +152,4 @@ public static partial class HttpContextExtensions ctx.Items.TryGetValue(ActorKey, out var actor); return actor as User; } -} \ No newline at end of file +}