monograph: fix json content serialized as html

This commit is contained in:
Abdullah Atta
2025-09-15 12:30:28 +05:00
parent 97fbd3226d
commit 4a0aee1c44
2 changed files with 69 additions and 19 deletions

View File

@@ -330,32 +330,47 @@ namespace Notesnook.API.Controllers
private async Task<string> 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<MonographContent>(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<MonographContent>(new MonographContent
{
Type = json.Type,
Data = html
});
}
catch (Exception ex)
{
await Slogger<MonographsController>.Error("CleanupContentAsync", ex.ToString());
return content;
}
return content;
}
}
}