From 3e38327f7fdfc5fbd76780a76e51fbc8d1575e25 Mon Sep 17 00:00:00 2001 From: Jason Bau Date: Mon, 24 Jun 2013 17:30:25 -0700 Subject: [PATCH] External_auth.views.login_or_signup fix codepath that didn't set uname which caused UnboundLocalError. Added tests for this case --- .../external_auth/tests/test_shib.py | 21 ++++++++++++++++--- common/djangoapps/external_auth/views.py | 1 + 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/common/djangoapps/external_auth/tests/test_shib.py b/common/djangoapps/external_auth/tests/test_shib.py index eb05b59afb..e46c9eda8f 100644 --- a/common/djangoapps/external_auth/tests/test_shib.py +++ b/common/djangoapps/external_auth/tests/test_shib.py @@ -98,7 +98,8 @@ class ShibSPTest(ModuleStoreTestCase): def test_shib_login(self): """ Tests that: - * shib credentials that match an existing ExternalAuthMap with a linked user logs the user in + * shib credentials that match an existing ExternalAuthMap with a linked active user logs the user in + * shib credentials that match an existing ExternalAuthMap with a linked inactive user shows error page * shib credentials that match an existing ExternalAuthMap without a linked user and also match the email of an existing user without an existing ExternalAuthMap links the two and log the user in * shib credentials that match an existing ExternalAuthMap without a linked user and also match the email @@ -117,8 +118,19 @@ class ShibSPTest(ModuleStoreTestCase): user_wo_map.save() extauth.save() + inactive_user = UserFactory.create(email='inactive@stanford.edu') + inactive_user.is_active = False + inactive_extauth = ExternalAuthMap(external_id='inactive@stanford.edu', + external_email='', + external_domain='shib:https://idp.stanford.edu/', + external_credentials="", + user=inactive_user) + inactive_user.save() + inactive_extauth.save() + idps = ['https://idp.stanford.edu/', 'https://someother.idp.com/'] - remote_users = ['withmap@stanford.edu', 'womap@stanford.edu', 'testuser2@someother_idp.com'] + remote_users = ['withmap@stanford.edu', 'womap@stanford.edu', + 'testuser2@someother_idp.com', 'inactive@stanford.edu'] for idp in idps: for remote_user in remote_users: @@ -133,13 +145,16 @@ class ShibSPTest(ModuleStoreTestCase): self.assertIsInstance(response, HttpResponseRedirect) self.assertEqual(request.user, user_w_map) self.assertEqual(response['Location'], '/') + elif idp == "https://idp.stanford.edu/" and remote_user == 'inactive@stanford.edu': + self.assertEqual(response.status_code, 403) + self.assertIn("Account not yet activated: please look for link in your email", response.content) elif idp == "https://idp.stanford.edu/" and remote_user == 'womap@stanford.edu': self.assertIsNotNone(ExternalAuthMap.objects.get(user=user_wo_map)) self.assertIsInstance(response, HttpResponseRedirect) self.assertEqual(request.user, user_wo_map) self.assertEqual(response['Location'], '/') elif idp == "https://someother.idp.com/" and remote_user in \ - ['withmap@stanford.edu', 'womap@stanford.edu']: + ['withmap@stanford.edu', 'womap@stanford.edu', 'inactive@stanford.edu']: self.assertEqual(response.status_code, 403) self.assertIn("You have already created an account using an external login", response.content) else: diff --git a/common/djangoapps/external_auth/views.py b/common/djangoapps/external_auth/views.py index 06709eff9e..b0dfbec6b9 100644 --- a/common/djangoapps/external_auth/views.py +++ b/common/djangoapps/external_auth/views.py @@ -176,6 +176,7 @@ def external_login_or_signup(request, # We trust shib's authentication, so no need to authenticate using the password again if settings.MITX_FEATURES.get('AUTH_USE_SHIB'): + uname = internal_user.username user = internal_user # Assuming this 'AUTHENTICATION_BACKENDS' is set in settings, which I think is safe if settings.AUTHENTICATION_BACKENDS: