diff --git a/Notesnook.API/Controllers/MonographsController.cs b/Notesnook.API/Controllers/MonographsController.cs index 8fc3708..6650319 100644 --- a/Notesnook.API/Controllers/MonographsController.cs +++ b/Notesnook.API/Controllers/MonographsController.cs @@ -330,32 +330,47 @@ namespace Notesnook.API.Controllers private async Task CleanupContentAsync(string content) { - if (!Constants.IS_SELF_HOSTED && !ProUserRequirement.IsUserPro(User)) + try { - var config = Configuration.Default.WithDefaultLoader(); - var context = BrowsingContext.New(config); - var document = await context.OpenAsync(r => r.Content(content)); - foreach (var element in document.QuerySelectorAll("a,iframe,img,object,svg,button,link")) + var json = JsonSerializer.Deserialize(content); + var html = json.Data; + if (!Constants.IS_SELF_HOSTED && !ProUserRequirement.IsUserPro(User)) { - element.Remove(); + var config = Configuration.Default.WithDefaultLoader(); + var context = BrowsingContext.New(config); + var document = await context.OpenAsync(r => r.Content(html)); + foreach (var element in document.QuerySelectorAll("a,iframe,img,object,svg,button,link")) + { + element.Remove(); + } + html = document.ToHtml(); } - return document.ToHtml(); - } - if (ProUserRequirement.IsUserPro(User)) - { - var config = Configuration.Default.WithDefaultLoader(); - var context = BrowsingContext.New(config); - var document = await context.OpenAsync(r => r.Content(content)); - foreach (var element in document.QuerySelectorAll("a")) + if (ProUserRequirement.IsUserPro(User)) { - var href = element.GetAttribute("href"); - if (string.IsNullOrEmpty(href)) continue; - if (!await urlAnalyzer.IsURLSafeAsync(href)) element.RemoveAttribute("href"); + var config = Configuration.Default.WithDefaultLoader(); + var context = BrowsingContext.New(config); + var document = await context.OpenAsync(r => r.Content(html)); + foreach (var element in document.QuerySelectorAll("a")) + { + var href = element.GetAttribute("href"); + if (string.IsNullOrEmpty(href)) continue; + if (!await urlAnalyzer.IsURLSafeAsync(href)) element.RemoveAttribute("href"); + } + html = document.ToHtml(); } - return document.ToHtml(); + + return JsonSerializer.Serialize(new MonographContent + { + Type = json.Type, + Data = html + }); + } + catch (Exception ex) + { + await Slogger.Error("CleanupContentAsync", ex.ToString()); + return content; } - return content; } } } \ No newline at end of file diff --git a/Notesnook.API/Models/MonographContent.cs b/Notesnook.API/Models/MonographContent.cs new file mode 100644 index 0000000..aedcd14 --- /dev/null +++ b/Notesnook.API/Models/MonographContent.cs @@ -0,0 +1,35 @@ +/* +This file is part of the Notesnook Sync Server project (https://notesnook.com/) + +Copyright (C) 2023 Streetwriters (Private) Limited + +This program is free software: you can redistribute it and/or modify +it under the terms of the Affero GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +Affero GNU General Public License for more details. + +You should have received a copy of the Affero GNU General Public License +along with this program. If not, see . +*/ + +using System.Text.Json.Serialization; +using MongoDB.Bson; +using MongoDB.Bson.Serialization.Attributes; +using System.Runtime.Serialization; + +namespace Notesnook.API.Models +{ + + public class MonographContent + { + [JsonPropertyName("data")] + public string Data { get; set; } + [JsonPropertyName("type")] + public string Type { get; set; } + } +} \ No newline at end of file