made teams optional

parent ebca5288
...@@ -6,7 +6,10 @@ from django.conf import settings ...@@ -6,7 +6,10 @@ from django.conf import settings
from django.contrib.auth.models import User, Group from django.contrib.auth.models import User, Group
from openid.consumer.consumer import SUCCESS from openid.consumer.consumer import SUCCESS
from openid.extensions import sreg from openid.extensions import sreg
from openid.extensions import teams try:
from openid.extensions import teams
except ImportError:
teams = None
from django_openid_auth.models import UserOpenID from django_openid_auth.models import UserOpenID
...@@ -57,11 +60,12 @@ class OpenIDBackend: ...@@ -57,11 +60,12 @@ class OpenIDBackend:
if sreg_response: if sreg_response:
self.update_user_details_from_sreg(user, sreg_response) self.update_user_details_from_sreg(user, sreg_response)
if getattr(settings, 'OPENID_UPDATE_GROUPS_FROM_TEAMS', False): if teams is not None:
teams_response = teams.TeamsResponse.fromSuccessResponse( if getattr(settings, 'OPENID_UPDATE_GROUPS_FROM_LAUNCHPAD_TEAMS', False):
openid_response) teams_response = teams.TeamsResponse.fromSuccessResponse(
if teams_response: openid_response)
self.update_groups_from_teams(user, teams_response) if teams_response:
self.update_groups_from_teams(user, teams_response)
return user return user
...@@ -131,7 +135,7 @@ class OpenIDBackend: ...@@ -131,7 +135,7 @@ class OpenIDBackend:
user.save() user.save()
def update_groups_from_teams(self, user, teams_response): def update_groups_from_teams(self, user, teams_response):
teams_mapping = settings.OPENID_LAUNCHPAD_TEAMS_MAPPING teams_mapping = getattr(settings, 'OPENID_LAUNCHPAD_TEAMS_MAPPING', {})
resp_groups = set(Group.objects.get(name=teams_mapping[i]) resp_groups = set(Group.objects.get(name=teams_mapping[i])
for i in teams_response.is_member) for i in teams_response.is_member)
user_groups = set( user_groups = set(
......
...@@ -7,13 +7,17 @@ from django.conf import settings ...@@ -7,13 +7,17 @@ from django.conf import settings
from django.contrib.auth.models import User, Group from django.contrib.auth.models import User, Group
from django.test import TestCase from django.test import TestCase
from openid.extensions.sreg import SRegRequest, SRegResponse from openid.extensions.sreg import SRegRequest, SRegResponse
from openid.extensions.teams import TeamsRequest, TeamsResponse
from openid.fetchers import ( from openid.fetchers import (
HTTPFetcher, HTTPFetchingError, HTTPResponse, setDefaultFetcher) HTTPFetcher, HTTPFetchingError, HTTPResponse, setDefaultFetcher)
from openid.oidutil import importElementTree from openid.oidutil import importElementTree
from openid.server.server import BROWSER_REQUEST_MODES, Server from openid.server.server import BROWSER_REQUEST_MODES, Server
from openid.store.memstore import MemoryStore from openid.store.memstore import MemoryStore
try:
from openid.extensions import teams
except ImportError:
teams = None
from django_openid_auth.models import UserOpenID from django_openid_auth.models import UserOpenID
...@@ -100,20 +104,20 @@ class RelyingPartyTests(TestCase): ...@@ -100,20 +104,20 @@ class RelyingPartyTests(TestCase):
self.old_create_users = getattr(settings, 'OPENID_CREATE_USERS', False) self.old_create_users = getattr(settings, 'OPENID_CREATE_USERS', False)
self.old_update_details = getattr(settings, 'OPENID_UPDATE_DETAILS_FROM_SREG', False) self.old_update_details = getattr(settings, 'OPENID_UPDATE_DETAILS_FROM_SREG', False)
self.old_sso_server_url = getattr(settings, 'OPENID_SSO_SERVER_URL') self.old_sso_server_url = getattr(settings, 'OPENID_SSO_SERVER_URL')
self.old_update_groups = getattr(settings, 'OPENID_UPDATE_GROUPS_FROM_TEAMS', False) self.old_update_groups = getattr(settings, 'OPENID_UPDATE_GROUPS_FROM_LAUNCHPAD_TEAMS', False)
self.old_teams_map = getattr(settings, 'OPENID_LAUNCHPAD_TEAMS_MAPPING', {}) self.old_teams_map = getattr(settings, 'OPENID_LAUNCHPAD_TEAMS_MAPPING', {})
settings.OPENID_CREATE_USERS = False settings.OPENID_CREATE_USERS = False
settings.OPENID_UPDATE_DETAILS_FROM_SREG = False settings.OPENID_UPDATE_DETAILS_FROM_SREG = False
settings.OPENID_SSO_SERVER_URL = None settings.OPENID_SSO_SERVER_URL = None
settings.OPENID_UPDATE_GROUPS_FROM_TEAMS = False settings.OPENID_UPDATE_GROUPS_FROM_LAUNCHPAD_TEAMS = False
settings.OPENID_LAUNCHPAD_TEAMS_MAPPING = {} settings.OPENID_LAUNCHPAD_TEAMS_MAPPING = {}
def tearDown(self): def tearDown(self):
settings.OPENID_CREATE_USERS = self.old_create_users settings.OPENID_CREATE_USERS = self.old_create_users
settings.OPENID_UPDATE_DETAILS_FROM_SREG = self.old_update_details settings.OPENID_UPDATE_DETAILS_FROM_SREG = self.old_update_details
settings.OPENID_SSO_SERVER_URL = self.old_sso_server_url settings.OPENID_SSO_SERVER_URL = self.old_sso_server_url
settings.OPENID_UPDATE_GROUPS_FROM_TEAMS = self.old_update_groups settings.OPENID_UPDATE_GROUPS_FROM_LAUNCHPAD_TEAMS = self.old_update_groups
settings.OPENID_LAUNCHPAD_TEAMS_MAPPING = self.old_teams_map settings.OPENID_LAUNCHPAD_TEAMS_MAPPING = self.old_teams_map
setDefaultFetcher(None) setDefaultFetcher(None)
...@@ -263,7 +267,9 @@ class RelyingPartyTests(TestCase): ...@@ -263,7 +267,9 @@ class RelyingPartyTests(TestCase):
self.assertEquals(user.email, 'foo@example.com') self.assertEquals(user.email, 'foo@example.com')
def test_login_teams(self): def test_login_teams(self):
settings.OPENID_UPDATE_GROUPS_FROM_TEAMS = True if teams is None:
raise AssertionError, "teams extension is missing!"
settings.OPENID_UPDATE_GROUPS_FROM_LAUNCHPAD_TEAMS = True
settings.OPENID_LAUNCHPAD_TEAMS_MAPPING = {'teamname': 'groupname', settings.OPENID_LAUNCHPAD_TEAMS_MAPPING = {'teamname': 'groupname',
'otherteam': 'othergroup'} 'otherteam': 'othergroup'}
user = User.objects.create_user('testuser', 'someone@example.com') user = User.objects.create_user('testuser', 'someone@example.com')
...@@ -287,10 +293,10 @@ class RelyingPartyTests(TestCase): ...@@ -287,10 +293,10 @@ class RelyingPartyTests(TestCase):
# Complete the request # Complete the request
openid_request = self.provider.parseFormPost(response.content) openid_request = self.provider.parseFormPost(response.content)
teams_request = TeamsRequest.fromOpenIDRequest(openid_request)
openid_response = openid_request.answer(True) openid_response = openid_request.answer(True)
teams_response = TeamsResponse.extractResponse(teams_request, teams_request = teams.TeamsRequest.fromOpenIDRequest(openid_request)
'teamname') teams_response = teams.TeamsResponse.extractResponse(teams_request,
'teamname')
openid_response.addExtension(teams_response) openid_response.addExtension(teams_response)
response = self.complete(openid_response) response = self.complete(openid_response)
self.assertRedirects(response, 'http://testserver/getuser') self.assertRedirects(response, 'http://testserver/getuser')
......
...@@ -14,7 +14,11 @@ from openid.consumer.consumer import ( ...@@ -14,7 +14,11 @@ from openid.consumer.consumer import (
Consumer, SUCCESS, CANCEL, FAILURE) Consumer, SUCCESS, CANCEL, FAILURE)
from openid.consumer.discover import DiscoveryFailure from openid.consumer.discover import DiscoveryFailure
from openid.extensions import sreg from openid.extensions import sreg
from openid.extensions import teams
try:
from openid.extensions import teams
except ImportError:
teams = None
from django_openid_auth.forms import OpenIDLoginForm from django_openid_auth.forms import OpenIDLoginForm
...@@ -111,9 +115,11 @@ def login_begin(request, template_name='openid/login.html', ...@@ -111,9 +115,11 @@ def login_begin(request, template_name='openid/login.html',
openid_request.addExtension( openid_request.addExtension(
sreg.SRegRequest(optional=['email', 'fullname', 'nickname'])) sreg.SRegRequest(optional=['email', 'fullname', 'nickname']))
# Request team info if teams is not None:
launchpad_teams = getattr(settings, 'OPENID_LAUNCHPAD_TEAMS_MAPPING', {}) # Request team info
openid_request.addExtension(teams.TeamsRequest(launchpad_teams.keys())) launchpad_teams = getattr(settings, 'OPENID_LAUNCHPAD_TEAMS_MAPPING',
{})
openid_request.addExtension(teams.TeamsRequest(launchpad_teams.keys()))
# Construct the request completion URL, including the page we # Construct the request completion URL, including the page we
# should redirect to. # should redirect to.
......
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