Commit 6eec5ac4 by Nimisha Asthagiri

XSS Safe Default - dashboard

parent 15e5a7db
...@@ -249,11 +249,14 @@ class DashboardTest(ModuleStoreTestCase): ...@@ -249,11 +249,14 @@ class DashboardTest(ModuleStoreTestCase):
Test that the certificate verification status for courses is visible on the dashboard. Test that the certificate verification status for courses is visible on the dashboard.
""" """
self.client.login(username="jack", password="test") self.client.login(username="jack", password="test")
self._check_verification_status_on('verified', 'You\'re enrolled as a verified student') self._check_verification_status_on('verified', 'You're enrolled as a verified student')
self._check_verification_status_on('honor', 'You\'re enrolled as an honor code student') self._check_verification_status_on('honor', 'You're enrolled as an honor code student')
self._check_verification_status_off('audit', '') self._check_verification_status_off('audit', '')
self._check_verification_status_on('professional', 'You\'re enrolled as a professional education student') self._check_verification_status_on('professional', 'You're enrolled as a professional education student')
self._check_verification_status_on('no-id-professional', 'You\'re enrolled as a professional education student') self._check_verification_status_on(
'no-id-professional',
'You're enrolled as a professional education student',
)
@unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms') @unittest.skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in lms')
def _check_verification_status_off(self, mode, value): def _check_verification_status_off(self, mode, value):
......
<%page expression_filter="h"/>
<%inherit file="main.html" /> <%inherit file="main.html" />
<%namespace name='static' file='static_content.html'/> <%namespace name='static' file='static_content.html'/>
<%! <%!
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.template import RequestContext from django.template import RequestContext
import third_party_auth import third_party_auth
from third_party_auth import pipeline from third_party_auth import pipeline
from django.core.urlresolvers import reverse from openedx.core.djangolib.js_utils import dump_js_escaped_json, js_escaped_string
import json
%> %>
<% <%
...@@ -39,9 +40,9 @@ import json ...@@ -39,9 +40,9 @@ import json
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
edx.dashboard.legacy.init({ edx.dashboard.legacy.init({
dashboard: "${reverse('dashboard')}", dashboard: "${reverse('dashboard') | n, js_escaped_string}",
signInUser: "${reverse('signin_user')}", signInUser: "${reverse('signin_user') | n, js_escaped_string}",
changeEmailSettings: "${reverse('change_email_settings')}" changeEmailSettings: "${reverse('change_email_settings') | n, js_escaped_string}"
}); });
}); });
</script> </script>
...@@ -54,7 +55,7 @@ import json ...@@ -54,7 +55,7 @@ import json
<%static:require_module module_name="js/views/message_banner" class_name="MessageBannerView"> <%static:require_module module_name="js/views/message_banner" class_name="MessageBannerView">
var banner = new MessageBannerView({urgency: 'low', type: 'warning'}); var banner = new MessageBannerView({urgency: 'low', type: 'warning'});
$('#content').prepend(banner.$el); $('#content').prepend(banner.$el);
banner.showMessage(${json.dumps(redirect_message)}) banner.showMessage(${redirect_message | n, dump_js_escaped_json})
</%static:require_module> </%static:require_module>
% endif % endif
</%block> </%block>
...@@ -117,7 +118,7 @@ import json ...@@ -117,7 +118,7 @@ import json
<h2>${_("Course-loading errors")}</h2> <h2>${_("Course-loading errors")}</h2>
% for course_dir, errors in errored_courses.items(): % for course_dir, errors in errored_courses.items():
<h3>${course_dir | h}</h3> <h3>${course_dir}</h3>
<ul> <ul>
% for (msg, err) in errors: % for (msg, err) in errors:
<li>${msg} <li>${msg}
......
<%page expression_filter="h"/>
<%namespace name='static' file='../static_content.html'/> <%namespace name='static' file='../static_content.html'/>
<%! <%!
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
......
<%page expression_filter="h"/>
<%inherit file="main.html" /> <%inherit file="main.html" />
<%namespace name='static' file='static_content.html'/> <%namespace name='static' file='static_content.html'/>
<%! <%!
...@@ -8,6 +9,7 @@ from third_party_auth import pipeline ...@@ -8,6 +9,7 @@ from third_party_auth import pipeline
from microsite_configuration import microsite from microsite_configuration import microsite
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
import json import json
from openedx.core.djangolib.js_utils import dump_js_escaped_json, js_escaped_string
%> %>
<% <%
...@@ -40,9 +42,9 @@ import json ...@@ -40,9 +42,9 @@ import json
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
edx.dashboard.legacy.init({ edx.dashboard.legacy.init({
dashboard: "${reverse('dashboard')}", dashboard: "${reverse('dashboard') | n, js_escaped_string}",
signInUser: "${reverse('signin_user')}", signInUser: "${reverse('signin_user') | n, js_escaped_string}",
changeEmailSettings: "${reverse('change_email_settings')}" changeEmailSettings: "${reverse('change_email_settings') | n, js_escaped_string}"
}); });
}); });
</script> </script>
...@@ -55,7 +57,7 @@ import json ...@@ -55,7 +57,7 @@ import json
<%static:require_module module_name="js/views/message_banner" class_name="MessageBannerView"> <%static:require_module module_name="js/views/message_banner" class_name="MessageBannerView">
var banner = new MessageBannerView({urgency: 'low', type: 'warning'}); var banner = new MessageBannerView({urgency: 'low', type: 'warning'});
$('#content').prepend(banner.$el); $('#content').prepend(banner.$el);
banner.showMessage(${json.dumps(redirect_message)}) banner.showMessage(${redirect_message | n, dump_js_escaped_json})
</%static:require_module> </%static:require_module>
% endif % endif
</%block> </%block>
...@@ -118,7 +120,7 @@ import json ...@@ -118,7 +120,7 @@ import json
<h2>${_("Course-loading errors")}</h2> <h2>${_("Course-loading errors")}</h2>
% for course_dir, errors in errored_courses.items(): % for course_dir, errors in errored_courses.items():
<h3>${course_dir | h}</h3> <h3>${course_dir}</h3>
<ul> <ul>
% for (msg, err) in errors: % for (msg, err) in errors:
<li>${msg} <li>${msg}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment