From 8786cb4781bd04a86dd4e195cfe4fa8b7b7deb69 Mon Sep 17 00:00:00 2001 From: trisua Date: Mon, 21 Jul 2025 22:29:16 -0400 Subject: [PATCH] add: render_markdown_dirty --- Cargo.lock | 2 +- crates/shared/Cargo.toml | 2 +- crates/shared/src/markdown.rs | 36 ++++++++++++++++++++++------------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e389280..ecaa2f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3353,7 +3353,7 @@ dependencies = [ [[package]] name = "tetratto-shared" -version = "12.0.4" +version = "12.0.5" dependencies = [ "ammonia", "chrono", diff --git a/crates/shared/Cargo.toml b/crates/shared/Cargo.toml index 158c99b..6ad2260 100644 --- a/crates/shared/Cargo.toml +++ b/crates/shared/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "tetratto-shared" description = "Shared stuff for Tetratto" -version = "12.0.4" +version = "12.0.5" edition = "2024" authors.workspace = true repository.workspace = true diff --git a/crates/shared/src/markdown.rs b/crates/shared/src/markdown.rs index 1d1626a..6e574a8 100644 --- a/crates/shared/src/markdown.rs +++ b/crates/shared/src/markdown.rs @@ -2,8 +2,7 @@ use ammonia::Builder; use pulldown_cmark::{Parser, Options, html::push_html}; use std::collections::HashSet; -/// Render markdown input into HTML -pub fn render_markdown(input: &str, proxy_images: bool) -> String { +pub fn render_markdown_dirty(input: &str) -> String { let input = &autolinks(&parse_alignment(input)); let mut options = Options::empty(); @@ -20,6 +19,27 @@ pub fn render_markdown(input: &str, proxy_images: bool) -> String { let mut html = String::new(); push_html(&mut html, parser); + html +} + +pub fn clean_html(html: String, allowed_attributes: HashSet<&str>) -> String { + Builder::default() + .generic_attributes(allowed_attributes) + .add_tags(&[ + "video", "source", "img", "b", "span", "p", "i", "strong", "em", "a", "align", + ]) + .rm_tags(&["script", "style", "link", "canvas"]) + .add_tag_attributes("a", &["href", "target"]) + .add_url_schemes(&["atto"]) + .clean(&html) + .to_string() + .replace("