63 lines
1.4 KiB
Python
63 lines
1.4 KiB
Python
|
|
"""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"},
|
||
|
|
},
|
||
|
|
)
|