def authenticate(self, **kwargs): """Authenticate the user based on an OpenID response.""" # Require that the OpenID response be passed in as a keyword # argument, to make sure we don't match the username/password # calling conventions of authenticate. openid_response = kwargs.get('openid_response') if openid_response is None: return None if openid_response.status != SUCCESS: return None user = None try: user_openid = UserOpenID.objects.get( claimed_id__exact=openid_response.identity_url) except UserOpenID.DoesNotExist: if getattr(settings, 'OPENID_CREATE_USERS', False): user = self.openid_backend.create_user_from_openid( openid_response) else: user = user_openid.user if user is None: return None #if getattr(settings, 'OPENID_UPDATE_DETAILS_FROM_SREG', False): details = self.openid_backend._extract_user_details(openid_response) self.openid_backend.update_user_details(user, details, openid_response) if getattr(settings, 'OPENID_PHYSICAL_MULTIFACTOR_REQUIRED', False): pape_response = pape.Response.fromSuccessResponse(openid_response) if pape_response is None or \ pape.AUTH_MULTI_FACTOR_PHYSICAL not in pape_response.auth_policies: raise MissingPhysicalMultiFactor() teams_response = teams.TeamsResponse.fromSuccessResponse( openid_response) if teams_response: self.openid_backend.update_groups_from_teams(user, teams_response) self.openid_backend.update_staff_status_from_teams( user, teams_response) LOG.debug("email %s:", details['email']) try: user = super(OpenIDKeystoneBackend, self).authenticate( password=settings.TUKEY_PASSWORD, username='******' % details['email'], auth_url=settings.OPENSTACK_KEYSTONE_URL, request=kwargs.get('request')) user.identifier = details['email'] except KeystoneAuthException: return UnregisteredUser('OpenID', details['email']) return user
def authenticate(self, **kwargs): """Authenticate the user based on an OpenID response.""" # Require that the OpenID response be passed in as a keyword # argument, to make sure we don't match the username/password # calling conventions of authenticate. openid_response = kwargs.get('openid_response') if openid_response is None: return None if openid_response.status != SUCCESS: return None user = None try: user_openid = UserOpenID.objects.get( claimed_id__exact=openid_response.identity_url) except UserOpenID.DoesNotExist: if getattr(settings, 'OPENID_CREATE_USERS', False): user = self.create_user_from_openid(openid_response) else: user = user_openid.user if user is None: return None if getattr(settings, 'OPENID_UPDATE_DETAILS_FROM_SREG', False): details = self._extract_user_details(openid_response) self.update_user_details(user, details, openid_response) if getattr(settings, 'OPENID_PHYSICAL_MULTIFACTOR_REQUIRED', False): pape_response = pape.Response.fromSuccessResponse(openid_response) if pape_response is None or \ pape.AUTH_MULTI_FACTOR_PHYSICAL not in pape_response.auth_policies: raise MissingPhysicalMultiFactor() teams_response = teams.TeamsResponse.fromSuccessResponse( openid_response) if teams_response: self.update_groups_from_teams(user, teams_response) self.update_staff_status_from_teams(user, teams_response) return user
def authenticate(self, **kwargs): """Authenticate the user based on an OpenID response.""" # Require that the OpenID response be passed in as a keyword # argument, to make sure we don't match the username/password # calling conventions of authenticate. openid_response = kwargs.get('openid_response') if openid_response is None: return None if openid_response.status != SUCCESS: return None user = None try: user_openid = UserOpenID.objects.get( claimed_id__exact=openid_response.identity_url) except UserOpenID.DoesNotExist: if getattr(settings, 'OPENID_CREATE_USERS', False): user = self.create_user_from_openid(openid_response) else: user = user_openid.user if user is None: return None if getattr(settings, 'OPENID_UPDATE_DETAILS_FROM_SREG', False): details = self._extract_user_details(openid_response) self.update_user_details(user, details, openid_response) if getattr(settings, 'OPENID_PHYSICAL_MULTIFACTOR_REQUIRED', False): pape_response = pape.Response.fromSuccessResponse(openid_response) key = pape.AUTH_MULTI_FACTOR_PHYSICAL if (pape_response is None or key not in pape_response.auth_policies): raise MissingPhysicalMultiFactor() teams_response = teams.TeamsResponse.fromSuccessResponse( openid_response) if teams_response: self.update_groups_from_teams(user, teams_response) self.update_staff_status_from_teams(user, teams_response) teams_required = getattr(settings, 'OPENID_LAUNCHPAD_TEAMS_REQUIRED', []) if teams_required: teams_mapping = self.get_teams_mapping() groups_required = [ group for team, group in teams_mapping.items() if team in teams_required ] matches = set(groups_required).intersection( user.groups.values_list('name', flat=True)) if not matches: name = 'OPENID_EMAIL_WHITELIST_REGEXP_LIST' whitelist_regexp_list = getattr(settings, name, []) for pattern in whitelist_regexp_list: if re.match(pattern, user.email): return user return None return user