Commit 4da68a58 by Anthony Lenton

Merged in lp:~stuartmetcalfe/django-openid-auth/staff-assignment

parents 7069378a 95dbda13
...@@ -87,6 +87,7 @@ class OpenIDBackend: ...@@ -87,6 +87,7 @@ class OpenIDBackend:
openid_response) openid_response)
if teams_response: if teams_response:
self.update_groups_from_teams(user, teams_response) self.update_groups_from_teams(user, teams_response)
self.update_staff_status_from_teams(user, teams_response)
return user return user
...@@ -219,3 +220,18 @@ class OpenIDBackend: ...@@ -219,3 +220,18 @@ class OpenIDBackend:
user.groups.remove(group) user.groups.remove(group)
for group in desired_groups - current_groups: for group in desired_groups - current_groups:
user.groups.add(group) user.groups.add(group)
def update_staff_status_from_teams(self, user, teams_response):
if not hasattr(settings, 'OPENID_LAUNCHPAD_STAFF_TEAMS'):
return
staff_teams = getattr(settings, 'OPENID_LAUNCHPAD_STAFF_TEAMS', [])
user.is_staff = False
for lp_team in teams_response.is_member:
if lp_team in staff_teams:
user.is_staff = True
break
user.save()
...@@ -462,11 +462,63 @@ class RelyingPartyTests(TestCase): ...@@ -462,11 +462,63 @@ class RelyingPartyTests(TestCase):
openid_request = self.provider.parseFormPost(response.content) openid_request = self.provider.parseFormPost(response.content)
openid_response = openid_request.answer(True) openid_response = openid_request.answer(True)
teams_request = teams.TeamsRequest.fromOpenIDRequest(openid_request) teams_request = teams.TeamsRequest.fromOpenIDRequest(openid_request)
self.assertEqual(group1 in user.groups.all(), False) self.assertEqual(group1 in user.groups.all(), False)
self.assertEqual(group2 in user.groups.all(), False) self.assertEqual(group2 in user.groups.all(), False)
self.assertTrue(group3 not in user.groups.all()) self.assertTrue(group3 not in user.groups.all())
def test_login_teams_staff_not_defined(self):
delattr(settings, 'OPENID_LAUNCHPAD_STAFF_TEAMS')
user = User.objects.create_user('testuser', 'someone@example.com')
user.is_staff = True
user.save()
self.assertTrue(user.is_staff)
user = self.get_openid_authed_user_with_teams(user, 'teamname,some-other-team')
self.assertTrue(user.is_staff)
def test_login_teams_staff_assignment(self):
settings.OPENID_LAUNCHPAD_STAFF_TEAMS = ('teamname',)
user = User.objects.create_user('testuser', 'someone@example.com')
user.is_staff = False
user.save()
self.assertFalse(user.is_staff)
user = self.get_openid_authed_user_with_teams(user, 'teamname,some-other-team')
self.assertTrue(user.is_staff)
def test_login_teams_staff_unassignment(self):
settings.OPENID_LAUNCHPAD_STAFF_TEAMS = ('different-teamname',)
user = User.objects.create_user('testuser', 'someone@example.com')
user.is_staff = True
user.save()
self.assertTrue(user.is_staff)
user = self.get_openid_authed_user_with_teams(user, 'teamname,some-other-team')
self.assertFalse(user.is_staff)
def get_openid_authed_user_with_teams(self, user, teams_str):
useropenid = UserOpenID(
user=user,
claimed_id='http://example.com/identity',
display_id='http://example.com/identity')
useropenid.save()
# Posting in an identity URL begins the authentication request:
response = self.client.post('/openid/login/',
{'openid_identifier': 'http://example.com/identity'})
# Complete the request
openid_request = self.provider.parseFormPost(response.content)
openid_response = openid_request.answer(True)
teams_request = teams.TeamsRequest.fromOpenIDRequest(openid_request)
teams_response = teams.TeamsResponse.extractResponse(
teams_request, teams_str)
openid_response.addExtension(teams_response)
response = self.complete(openid_response)
return User.objects.get(username=user.username)
class HelperFunctionsTest(TestCase): class HelperFunctionsTest(TestCase):
def test_sanitise_redirect_url(self): def test_sanitise_redirect_url(self):
settings.ALLOWED_EXTERNAL_OPENID_REDIRECT_DOMAINS = [ settings.ALLOWED_EXTERNAL_OPENID_REDIRECT_DOMAINS = [
...@@ -492,6 +544,6 @@ class HelperFunctionsTest(TestCase): ...@@ -492,6 +544,6 @@ class HelperFunctionsTest(TestCase):
self.assertEqual(url, sanitised) self.assertEqual(url, sanitised)
else: else:
self.assertEqual(settings.LOGIN_REDIRECT_URL, sanitised) self.assertEqual(settings.LOGIN_REDIRECT_URL, sanitised)
def suite(): def suite():
return unittest.TestLoader().loadTestsFromName(__name__) return unittest.TestLoader().loadTestsFromName(__name__)
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