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
1=== modified file 'django_openid_auth/auth.py'
2--- django_openid_auth/auth.py 2010-08-10 08:58:07 +0000
3+++ django_openid_auth/auth.py 2010-10-16 19:58:41 +0000
4@@ -87,6 +87,7 @@
5 openid_response)
6 if teams_response:
7 self.update_groups_from_teams(user, teams_response)
8+ self.update_staff_status_from_teams(user, teams_response)
9
10 return user
11
12@@ -219,3 +220,18 @@
13 user.groups.remove(group)
14 for group in desired_groups - current_groups:
15 user.groups.add(group)
16+
17+ def update_staff_status_from_teams(self, user, teams_response):
18+ if not hasattr(settings, 'OPENID_LAUNCHPAD_STAFF_TEAMS'):
19+ return
20+
21+ staff_teams = getattr(settings, 'OPENID_LAUNCHPAD_STAFF_TEAMS', [])
22+ user.is_staff = False
23+
24+ for lp_team in teams_response.is_member:
25+ if lp_team in staff_teams:
26+ user.is_staff = True
27+ break
28+
29+ user.save()
30+
31
32=== modified file 'django_openid_auth/tests/test_views.py'
33--- django_openid_auth/tests/test_views.py 2010-08-10 08:58:07 +0000
34+++ django_openid_auth/tests/test_views.py 2010-10-16 19:58:41 +0000
35@@ -462,11 +462,63 @@
36 openid_request = self.provider.parseFormPost(response.content)
37 openid_response = openid_request.answer(True)
38 teams_request = teams.TeamsRequest.fromOpenIDRequest(openid_request)
39-
40+
41 self.assertEqual(group1 in user.groups.all(), False)
42 self.assertEqual(group2 in user.groups.all(), False)
43 self.assertTrue(group3 not in user.groups.all())
44
45+ def test_login_teams_staff_not_defined(self):
46+ delattr(settings, 'OPENID_LAUNCHPAD_STAFF_TEAMS')
47+ user = User.objects.create_user('testuser', 'someone@example.com')
48+ user.is_staff = True
49+ user.save()
50+ self.assertTrue(user.is_staff)
51+
52+ user = self.get_openid_authed_user_with_teams(user, 'teamname,some-other-team')
53+ self.assertTrue(user.is_staff)
54+
55+ def test_login_teams_staff_assignment(self):
56+ settings.OPENID_LAUNCHPAD_STAFF_TEAMS = ('teamname',)
57+ user = User.objects.create_user('testuser', 'someone@example.com')
58+ user.is_staff = False
59+ user.save()
60+ self.assertFalse(user.is_staff)
61+
62+ user = self.get_openid_authed_user_with_teams(user, 'teamname,some-other-team')
63+ self.assertTrue(user.is_staff)
64+
65+ def test_login_teams_staff_unassignment(self):
66+ settings.OPENID_LAUNCHPAD_STAFF_TEAMS = ('different-teamname',)
67+ user = User.objects.create_user('testuser', 'someone@example.com')
68+ user.is_staff = True
69+ user.save()
70+ self.assertTrue(user.is_staff)
71+
72+ user = self.get_openid_authed_user_with_teams(user, 'teamname,some-other-team')
73+ self.assertFalse(user.is_staff)
74+
75+ def get_openid_authed_user_with_teams(self, user, teams_str):
76+ useropenid = UserOpenID(
77+ user=user,
78+ claimed_id='http://example.com/identity',
79+ display_id='http://example.com/identity')
80+ useropenid.save()
81+
82+ # Posting in an identity URL begins the authentication request:
83+ response = self.client.post('/openid/login/',
84+ {'openid_identifier': 'http://example.com/identity'})
85+
86+ # Complete the request
87+ openid_request = self.provider.parseFormPost(response.content)
88+ openid_response = openid_request.answer(True)
89+ teams_request = teams.TeamsRequest.fromOpenIDRequest(openid_request)
90+ teams_response = teams.TeamsResponse.extractResponse(
91+ teams_request, teams_str)
92+ openid_response.addExtension(teams_response)
93+ response = self.complete(openid_response)
94+ return User.objects.get(username=user.username)
95+
96+
97 class HelperFunctionsTest(TestCase):
98 def test_sanitise_redirect_url(self):
99 settings.ALLOWED_EXTERNAL_OPENID_REDIRECT_DOMAINS = [
100@@ -492,6 +544,6 @@
101 self.assertEqual(url, sanitised)
102 else:
103 self.assertEqual(settings.LOGIN_REDIRECT_URL, sanitised)
104-
105+
106 def suite():
107 return unittest.TestLoader().loadTestsFromName(__name__)

Subscribers

People subscribed via source and target branches