diff --git a/src/Frontend/Plugins/FluentCMS.Web.Plugins.TextHTML/FluentCMS.Web.Plugins.TextHTML.csproj b/src/Frontend/Plugins/FluentCMS.Web.Plugins.TextHTML/FluentCMS.Web.Plugins.TextHTML.csproj index e1cfd29dc..9fc7a293d 100644 --- a/src/Frontend/Plugins/FluentCMS.Web.Plugins.TextHTML/FluentCMS.Web.Plugins.TextHTML.csproj +++ b/src/Frontend/Plugins/FluentCMS.Web.Plugins.TextHTML/FluentCMS.Web.Plugins.TextHTML.csproj @@ -27,4 +27,8 @@ + + + + diff --git a/src/Frontend/Plugins/FluentCMS.Web.Plugins.TextHTML/TextHTMLViewPlugin.razor b/src/Frontend/Plugins/FluentCMS.Web.Plugins.TextHTML/TextHTMLViewPlugin.razor index eb73b6e32..33f35c177 100644 --- a/src/Frontend/Plugins/FluentCMS.Web.Plugins.TextHTML/TextHTMLViewPlugin.razor +++ b/src/Frontend/Plugins/FluentCMS.Web.Plugins.TextHTML/TextHTMLViewPlugin.razor @@ -10,7 +10,7 @@ else {
- @((MarkupString)Item.Content) + @((MarkupString)_sanitizedContent)
} } diff --git a/src/Frontend/Plugins/FluentCMS.Web.Plugins.TextHTML/TextHTMLViewPlugin.razor.cs b/src/Frontend/Plugins/FluentCMS.Web.Plugins.TextHTML/TextHTMLViewPlugin.razor.cs index e1be86e55..a18041209 100644 --- a/src/Frontend/Plugins/FluentCMS.Web.Plugins.TextHTML/TextHTMLViewPlugin.razor.cs +++ b/src/Frontend/Plugins/FluentCMS.Web.Plugins.TextHTML/TextHTMLViewPlugin.razor.cs @@ -1,9 +1,14 @@ +using Ganss.Xss; + namespace FluentCMS.Web.Plugins.TextHTML; public partial class TextHTMLViewPlugin { private const string CONTENT_TYPE_NAME = nameof(TextHTMLContent); private TextHTMLContent? Item { get; set; } + private static readonly HtmlSanitizer Sanitizer = new(); + + private string _sanitizedContent = string.Empty; private async Task UpdateContent(string content) { @@ -11,6 +16,7 @@ private async Task UpdateContent(string content) return; Item.Content = content; + _sanitizedContent = Sanitizer.Sanitize(Item.Content); await ApiClient.PluginContent.UpdateAsync(CONTENT_TYPE_NAME, Plugin.Id, Item.Id, Item.ToDictionary()); } @@ -27,7 +33,10 @@ protected override async Task OnInitializedAsync() var response = await ApiClient.PluginContent.GetAllAsync(CONTENT_TYPE_NAME, Plugin.Id); if (response?.Data != null && response.Data.ToContentList().Count != 0) + { Item = response.Data.ToContentList().FirstOrDefault() ?? default!; + _sanitizedContent = Item is not null ? Sanitizer.Sanitize(Item.Content) : string.Empty; + } } } }