From 11ecd162d4038a4cb52f0268d9e922a42f07dee6 Mon Sep 17 00:00:00 2001 From: Jason Bau Date: Fri, 20 Sep 2013 09:59:21 -0700 Subject: [PATCH 1/2] fix _flatten_to_ascii for str inputs --- common/djangoapps/external_auth/tests/test_shib.py | 10 +++++++++- common/djangoapps/external_auth/views.py | 9 ++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/common/djangoapps/external_auth/tests/test_shib.py b/common/djangoapps/external_auth/tests/test_shib.py index 2b6e2a4acf..80aabcb8f9 100644 --- a/common/djangoapps/external_auth/tests/test_shib.py +++ b/common/djangoapps/external_auth/tests/test_shib.py @@ -514,8 +514,16 @@ class ShibUtilFnTest(TestCase): """ def test__flatten_to_ascii(self): DIACRITIC = u"àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸåÅçÇ" # pylint: disable=C0103 + STR_DIACRI = "àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸåÅçÇ" # pylint: disable=C0103 FLATTENED = u"aeiouAEIOUaeiouyAEIOUYaeiouAEIOUanoANOaeiouyAEIOUYaAcC" # pylint: disable=C0103 self.assertEqual(_flatten_to_ascii(u'jas\xf6n'), u'jason') # umlaut self.assertEqual(_flatten_to_ascii(u'Jason\u5305'), u'Jason') # mandarin, so it just gets dropped self.assertEqual(_flatten_to_ascii(u'abc'), u'abc') # pass through - self.assertEqual(_flatten_to_ascii(DIACRITIC), FLATTENED) + + unicode_test = _flatten_to_ascii(DIACRITIC) + self.assertEqual(unicode_test, FLATTENED) + self.assertIsInstance(unicode_test, unicode) + + str_test = _flatten_to_ascii(STR_DIACRI) + self.assertEqual(str_test, FLATTENED) + self.assertIsInstance(str_test, str) diff --git a/common/djangoapps/external_auth/views.py b/common/djangoapps/external_auth/views.py index cef3ed7206..5ab5855a63 100644 --- a/common/djangoapps/external_auth/views.py +++ b/common/djangoapps/external_auth/views.py @@ -233,10 +233,13 @@ def _flatten_to_ascii(txt): """ Flattens possibly unicode txt to ascii (django username limitation) @param name: - @return: + @return: the flattened txt (in the same type as was originally passed in) """ - return unicodedata.normalize('NFKD', txt).encode('ASCII', 'ignore') - + if isinstance(txt, str): + txt = txt.decode('utf-8') + return unicodedata.normalize('NFKD', txt).encode('ASCII', 'ignore') + else: + return unicode(unicodedata.normalize('NFKD', txt).encode('ASCII', 'ignore')) @ensure_csrf_cookie @cache_if_anonymous From b48e3a9661f1da569065613875a8e8bac69090b5 Mon Sep 17 00:00:00 2001 From: Jason Bau Date: Fri, 20 Sep 2013 11:46:22 -0700 Subject: [PATCH 2/2] fix some shib signup session related bugs --- common/djangoapps/external_auth/views.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/common/djangoapps/external_auth/views.py b/common/djangoapps/external_auth/views.py index 5ab5855a63..4d0b7eeb2b 100644 --- a/common/djangoapps/external_auth/views.py +++ b/common/djangoapps/external_auth/views.py @@ -34,7 +34,6 @@ try: except ImportError: from django.contrib.csrf.middleware import csrf_exempt from django_future.csrf import ensure_csrf_cookie -from util.cache import cache_if_anonymous import django_openid_auth.views as openid_views from django_openid_auth import auth as openid_auth @@ -137,8 +136,6 @@ def _external_login_or_signup(request, fullname, retfun=None): """Generic external auth login or signup""" - logout(request) - # see if we have a map from this external_id to an edX username try: eamap = ExternalAuthMap.objects.get(external_id=external_id, @@ -242,7 +239,6 @@ def _flatten_to_ascii(txt): return unicode(unicodedata.normalize('NFKD', txt).encode('ASCII', 'ignore')) @ensure_csrf_cookie -@cache_if_anonymous def _signup(request, eamap): """ Present form to complete for signup via external authentication.