Merge lp:~stuartmetcalfe/django-openid-auth/staff-assignment into lp:~django-openid-auth/django-openid-auth/trunk

Proposed by Stuart Metcalfe
Status: Merged
Approved by: James Henstridge
Approved revision: 77
Merged at revision: 75
Proposed branch: lp:~stuartmetcalfe/django-openid-auth/staff-assignment
Merge into: lp:~django-openid-auth/django-openid-auth/trunk
Diff against target: 107 lines (+70/-2)
2 files modified
django_openid_auth/auth.py (+16/-0)
django_openid_auth/tests/test_views.py (+54/-2)
To merge this branch: bzr merge lp:~stuartmetcalfe/django-openid-auth/staff-assignment
Reviewer Review Type Date Requested Status
James Henstridge Approve
Anthony Lenton Approve
Review via email: mp+38469@code.launchpad.net

Description of the change

This branch adds functionality to set staff status for specified teams, as requested in bug #388414. If the user is in any of the teams named in settings.OPENID_LAUNCHPAD_STAFF_TEAMS on openid login, staff status is assigned. If not in those teams, staff status is unassigned.

To post a comment you must log in.
76. By Stuart Metcalfe

Prevented staff status from being changed if OPENID_LAUNCHPAD_STAFF_TEAMS is not defined. Refactored tests to reduce repetition

Revision history for this message
Stuart Metcalfe (stuartmetcalfe) wrote :

Folowing some additional thought, I've prevented altering staff status if OPENID_LAUNCHPAD_STAFF_TEAMS isn't defined and refactored my tests slightly to reduce repetition (in rev.76). This is now definitely ready for review.

77. By Stuart Metcalfe

Moved updated user instantiation and now return it as originally planned

Revision history for this message
Anthony Lenton (elachuni) :
review: Approve
Revision history for this message
James Henstridge (jamesh) wrote :

This looks good.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'django_openid_auth/auth.py'
--- django_openid_auth/auth.py 2010-08-10 08:58:07 +0000
+++ django_openid_auth/auth.py 2010-10-16 19:58:41 +0000
@@ -87,6 +87,7 @@
87 openid_response)87 openid_response)
88 if teams_response:88 if teams_response:
89 self.update_groups_from_teams(user, teams_response)89 self.update_groups_from_teams(user, teams_response)
90 self.update_staff_status_from_teams(user, teams_response)
9091
91 return user92 return user
9293
@@ -219,3 +220,18 @@
219 user.groups.remove(group)220 user.groups.remove(group)
220 for group in desired_groups - current_groups:221 for group in desired_groups - current_groups:
221 user.groups.add(group)222 user.groups.add(group)
223
224 def update_staff_status_from_teams(self, user, teams_response):
225 if not hasattr(settings, 'OPENID_LAUNCHPAD_STAFF_TEAMS'):
226 return
227
228 staff_teams = getattr(settings, 'OPENID_LAUNCHPAD_STAFF_TEAMS', [])
229 user.is_staff = False
230
231 for lp_team in teams_response.is_member:
232 if lp_team in staff_teams:
233 user.is_staff = True
234 break
235
236 user.save()
237
222238
=== modified file 'django_openid_auth/tests/test_views.py'
--- django_openid_auth/tests/test_views.py 2010-08-10 08:58:07 +0000
+++ django_openid_auth/tests/test_views.py 2010-10-16 19:58:41 +0000
@@ -462,11 +462,63 @@
462 openid_request = self.provider.parseFormPost(response.content)462 openid_request = self.provider.parseFormPost(response.content)
463 openid_response = openid_request.answer(True)463 openid_response = openid_request.answer(True)
464 teams_request = teams.TeamsRequest.fromOpenIDRequest(openid_request)464 teams_request = teams.TeamsRequest.fromOpenIDRequest(openid_request)
465 465
466 self.assertEqual(group1 in user.groups.all(), False)466 self.assertEqual(group1 in user.groups.all(), False)
467 self.assertEqual(group2 in user.groups.all(), False)467 self.assertEqual(group2 in user.groups.all(), False)
468 self.assertTrue(group3 not in user.groups.all())468 self.assertTrue(group3 not in user.groups.all())
469469
470 def test_login_teams_staff_not_defined(self):
471 delattr(settings, 'OPENID_LAUNCHPAD_STAFF_TEAMS')
472 user = User.objects.create_user('testuser', 'someone@example.com')
473 user.is_staff = True
474 user.save()
475 self.assertTrue(user.is_staff)
476
477 user = self.get_openid_authed_user_with_teams(user, 'teamname,some-other-team')
478 self.assertTrue(user.is_staff)
479
480 def test_login_teams_staff_assignment(self):
481 settings.OPENID_LAUNCHPAD_STAFF_TEAMS = ('teamname',)
482 user = User.objects.create_user('testuser', 'someone@example.com')
483 user.is_staff = False
484 user.save()
485 self.assertFalse(user.is_staff)
486
487 user = self.get_openid_authed_user_with_teams(user, 'teamname,some-other-team')
488 self.assertTrue(user.is_staff)
489
490 def test_login_teams_staff_unassignment(self):
491 settings.OPENID_LAUNCHPAD_STAFF_TEAMS = ('different-teamname',)
492 user = User.objects.create_user('testuser', 'someone@example.com')
493 user.is_staff = True
494 user.save()
495 self.assertTrue(user.is_staff)
496
497 user = self.get_openid_authed_user_with_teams(user, 'teamname,some-other-team')
498 self.assertFalse(user.is_staff)
499
500 def get_openid_authed_user_with_teams(self, user, teams_str):
501 useropenid = UserOpenID(
502 user=user,
503 claimed_id='http://example.com/identity',
504 display_id='http://example.com/identity')
505 useropenid.save()
506
507 # Posting in an identity URL begins the authentication request:
508 response = self.client.post('/openid/login/',
509 {'openid_identifier': 'http://example.com/identity'})
510
511 # Complete the request
512 openid_request = self.provider.parseFormPost(response.content)
513 openid_response = openid_request.answer(True)
514 teams_request = teams.TeamsRequest.fromOpenIDRequest(openid_request)
515 teams_response = teams.TeamsResponse.extractResponse(
516 teams_request, teams_str)
517 openid_response.addExtension(teams_response)
518 response = self.complete(openid_response)
519 return User.objects.get(username=user.username)
520
521
470class HelperFunctionsTest(TestCase):522class HelperFunctionsTest(TestCase):
471 def test_sanitise_redirect_url(self):523 def test_sanitise_redirect_url(self):
472 settings.ALLOWED_EXTERNAL_OPENID_REDIRECT_DOMAINS = [524 settings.ALLOWED_EXTERNAL_OPENID_REDIRECT_DOMAINS = [
@@ -492,6 +544,6 @@
492 self.assertEqual(url, sanitised)544 self.assertEqual(url, sanitised)
493 else:545 else:
494 self.assertEqual(settings.LOGIN_REDIRECT_URL, sanitised)546 self.assertEqual(settings.LOGIN_REDIRECT_URL, sanitised)
495 547
496def suite():548def suite():
497 return unittest.TestLoader().loadTestsFromName(__name__)549 return unittest.TestLoader().loadTestsFromName(__name__)

Subscribers

People subscribed via source and target branches