/usr/share/pyshared/social_auth/backends/pipeline/social.py is in python-django-social-auth 0.7.23-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | from django.utils.translation import ugettext
from social_auth.models import UserSocialAuth, SOCIAL_AUTH_MODELS_MODULE
from social_auth.exceptions import AuthAlreadyAssociated
def social_auth_user(backend, uid, user=None, *args, **kwargs):
"""Return UserSocialAuth account for backend/uid pair or None if it
doesn't exists.
Raise AuthAlreadyAssociated if UserSocialAuth entry belongs to another
user.
"""
social_user = UserSocialAuth.get_social_auth(backend.name, uid)
if social_user:
if user and social_user.user != user:
msg = ugettext('This %(provider)s account is already in use.')
raise AuthAlreadyAssociated(backend, msg % {
'provider': backend.name
})
elif not user:
user = social_user.user
return {'social_user': social_user,
'user': user,
'new_association': False}
def associate_user(backend, user, uid, social_user=None, *args, **kwargs):
"""Associate user social account with user instance."""
if social_user or not user:
return None
try:
social = UserSocialAuth.create_social_auth(user, uid, backend.name)
except Exception, e:
if not SOCIAL_AUTH_MODELS_MODULE.is_integrity_error(e):
raise
# Protect for possible race condition, those bastard with FTL
# clicking capabilities, check issue #131:
# https://github.com/omab/django-social-auth/issues/131
return social_auth_user(backend, uid, user, social_user=social_user,
*args, **kwargs)
else:
return {'social_user': social,
'user': social.user,
'new_association': True}
def load_extra_data(backend, details, response, uid, user, social_user=None,
*args, **kwargs):
"""Load extra data from provider and store it on current UserSocialAuth
extra_data field.
"""
social_user = social_user or \
UserSocialAuth.get_social_auth(backend.name, uid)
if social_user:
extra_data = backend.extra_data(user, uid, response, details)
if kwargs.get('original_email') and not 'email' in extra_data:
extra_data['email'] = kwargs.get('original_email')
if extra_data and social_user.extra_data != extra_data:
if social_user.extra_data:
social_user.extra_data.update(extra_data)
else:
social_user.extra_data = extra_data
social_user.save()
return {'social_user': social_user}
|