diff options
-rw-r--r-- | apioforum/mdrender.py | 23 | ||||
-rw-r--r-- | apioforum/thread.py | 8 | ||||
-rw-r--r-- | setup.py | 2 |
3 files changed, 27 insertions, 6 deletions
diff --git a/apioforum/mdrender.py b/apioforum/mdrender.py new file mode 100644 index 0000000..20e86bb --- /dev/null +++ b/apioforum/mdrender.py @@ -0,0 +1,23 @@ +import bleach + +allowed_tags = [ + 'p', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'pre', + 'del', +] +allowed_tags.extend(bleach.sanitizer.ALLOWED_TAGS) + +cleaner = bleach.sanitizer.Cleaner(tags=allowed_tags) + +import markdown +md = markdown.Markdown(extensions=['pymdownx.tilde']) + +def render(text): + text = md.reset().convert(text) + text = cleaner.clean(text) + return text diff --git a/apioforum/thread.py b/apioforum/thread.py index b9697ce..3378982 100644 --- a/apioforum/thread.py +++ b/apioforum/thread.py @@ -5,11 +5,7 @@ from flask import ( url_for, flash ) from .db import get_db - -def render_md(md): - from markdown import markdown - from markupsafe import escape - return markdown(escape(md)) +from .mdrender import render bp = Blueprint("thread", __name__, url_prefix="/thread") @@ -24,7 +20,7 @@ def view_thread(thread_id): "SELECT * FROM posts WHERE thread = ? ORDER BY created ASC;", (thread_id,) ).fetchall() - rendered_posts = [render_md(q['content']) for q in posts] + rendered_posts = [render(q['content']) for q in posts] return render_template("view_thread.html",posts=posts,thread=thread,thread_id=thread_id,rendered_posts=rendered_posts) @bp.route("/<int:thread_id>/create_post", methods=("POST",)) @@ -8,5 +8,7 @@ setup( install_requires = [ 'flask', 'markdown', + 'bleach', + 'pymdown-extensions', ], ) |