def handle_social_data(event): social_data = event.social_data request = event.request if not social_data['user']['id']: request.session.flash( _('No external user id found? Perhaps permissions for ' 'authentication are set incorrectly'), 'error') return False extng_id = ExternalIdentityService.by_external_id_and_provider( social_data['user']['id'], social_data['credentials'].provider_name, db_session=request.dbsession ) update_identity = False # if current token doesn't match what we have in db - remove old one if extng_id and extng_id.access_token != social_data['credentials'].token: extng_id.delete() update_identity = True if not extng_id or update_identity: if not update_identity: request.session.flash({'msg': _('Your external identity is now ' 'connected with your account'), 'level': 'warning'}) ex_identity = ExternalIdentity() ex_identity.external_id = social_data['user']['id'] ex_identity.external_user_name = social_data['user']['user_name'] ex_identity.provider_name = social_data['credentials'].provider_name ex_identity.access_token = social_data['credentials'].token ex_identity.token_secret = social_data['credentials'].token_secret ex_identity.alt_token = social_data['credentials'].refresh_token event.user.external_identities.append(ex_identity) request.session.pop('zigg.social_auth', None)
def test_by_external_id_and_provider(self, db_session): user = add_user(db_session) identity = ExternalIdentity( external_user_name="foo", external_id="foo", provider_name="facebook" ) user.external_identities.append(identity) # db_session.flush() found = ExternalIdentityService.by_external_id_and_provider( provider_name="facebook", external_id="foo", db_session=db_session ) assert identity == found
def by_external_id_and_provider(cls, external_id, provider_name, db_session=None): """ Backwards compatible alias to :class:`ziggurat_foundations.models.services.external_identity.ExternalIdentityService.by_external_id_and_provider` .. deprecated:: 0.8 :param external_id: :param provider_name: :param db_session: :return: ExternalIdentity """ db_session = get_db_session(db_session) return ExternalIdentityService.by_external_id_and_provider( external_id=external_id, provider_name=provider_name, db_session=db_session)