Files
edx-platform/openedx/core/djangolib/markup.py
Adeel Khan 5773001f75 Fix certificate's course title for xss tags injection.
This fix would enable course author to selectively add
basic html tags to course title, while removing any
other injected tags that could execute javascript.

LEARNER-3491
2017-12-18 14:08:22 +05:00

57 lines
1.6 KiB
Python

"""
Utilities for use in Mako markup.
"""
import markupsafe
import bleach
from mako.filters import decode
# Text() can be used to declare a string as plain text, as HTML() is used
# for HTML. It simply wraps markupsafe's escape, which will HTML-escape if
# it isn't already escaped.
Text = markupsafe.escape # pylint: disable=invalid-name
def HTML(html): # pylint: disable=invalid-name
"""
Mark a string as already HTML, so that it won't be escaped before output.
Use this function when formatting HTML into other strings. It must be
used in conjunction with ``Text()``, and both ``HTML()`` and ``Text()``
must be closed before any calls to ``format()``::
<%page expression_filter="h"/>
<%!
from django.utils.translation import ugettext as _
from openedx.core.djangolib.markup import HTML, Text
%>
${Text(_("Write & send {start}email{end}")).format(
start=HTML("<a href='mailto:{}'>").format(user.email),
end=HTML("</a>"),
)}
"""
return markupsafe.Markup(html)
def strip_all_tags_but_br(string_to_strip):
"""
Strips all tags from a string except <br/>
Usage:
<%page expression_filter="h"/>
<%!
from openedx.core.djangolib.markup import strip_all_tags_but_br
%>
${accomplishment_course_title | n, strip_all_tags_but_br}
"""
if string_to_strip is None:
string_to_strip = ""
string_to_strip = decode.utf8(string_to_strip)
string_to_strip = bleach.clean(string_to_strip, tags=['br'], strip=True)
return string_to_strip