"""HTML sanitization for the Mail plugin using nh3. Extracted from services.py as part of the God-object split (BUG-018 pilot). Re-exported by ``app.plugins.builtins.mail.services``. """ from __future__ import annotations import nh3 def sanitize_html(raw_html: str) -> str: """Sanitize HTML using nh3 — removes script tags and dangerous attributes.""" if not raw_html: return "" return nh3.clean( raw_html, tags={ "a", "b", "br", "div", "em", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "i", "img", "li", "ol", "p", "span", "strong", "table", "tbody", "td", "th", "thead", "tr", "u", "ul", "blockquote", "code", "pre", "font", "center", }, attributes={ "a": {"href", "title", "target"}, "img": {"src", "alt", "width", "height"}, "span": {"style"}, "div": {"style"}, "font": {"color", "size", "face"}, "p": {"style"}, "td": {"style"}, "th": {"style"}, }, )