/usr/share/pyshared/social_auth/context_processors.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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | from django.contrib.auth import REDIRECT_FIELD_NAME
from social_auth.models import UserSocialAuth
from social_auth.backends import get_backends
from social_auth.utils import group_backend_by_type, LazyDict
# Note: social_auth_backends, social_auth_by_type_backends and
# social_auth_by_name_backends don't play nice together.
def social_auth_backends(request):
"""Load Social Auth current user data to context.
Will add a output from backends_data to context under social_auth key.
"""
def context_value():
return backends_data(request.user)
return {'social_auth': LazyDict(context_value)}
def social_auth_by_type_backends(request):
"""Load Social Auth current user data to context.
Will add a output from backends_data to context under social_auth key where
each entry will be grouped by backend type (openid, oauth, oauth2).
"""
def context_value():
data = backends_data(request.user)
data['backends'] = group_backend_by_type(data['backends'])
data['not_associated'] = group_backend_by_type(data['not_associated'])
data['associated'] = group_backend_by_type(
data['associated'],
key=lambda assoc: assoc.provider
)
return data
return {'social_auth': LazyDict(context_value)}
def social_auth_by_name_backends(request):
"""Load Social Auth current user data to context.
Will add a social_auth object whose attribute names are the names of each
provider, e.g. social_auth.facebook would be the facebook association or
None, depending on the logged in user's current associations. Providers
with a hyphen have the hyphen replaced with an underscore, e.g.
google-oauth2 becomes google_oauth2 when referenced in templates.
"""
def context_value():
keys = get_backends().keys()
accounts = dict(zip(keys, [None] * len(keys)))
user = request.user
if hasattr(user, 'is_authenticated') and user.is_authenticated():
accounts.update((assoc.provider.replace('-', '_'), assoc)
for assoc in UserSocialAuth.get_social_auth_for_user(user))
return accounts
return {'social_auth': LazyDict(context_value)}
def backends_data(user):
"""Return backends data for given user.
Will return a dict with values:
associated: UserSocialAuth model instances for currently
associated accounts
not_associated: Not associated (yet) backend names.
backends: All backend names.
If user is not authenticated, then first list is empty, and there's no
difference between the second and third lists.
"""
available = get_backends().keys()
values = {'associated': [],
'not_associated': available,
'backends': available}
# user comes from request.user usually, on /admin/ it will be an instance
# of auth.User and this code will fail if a custom User model was defined
if hasattr(user, 'is_authenticated') and user.is_authenticated():
associated = UserSocialAuth.get_social_auth_for_user(user)
not_associated = list(set(available) -
set(assoc.provider for assoc in associated))
values['associated'] = associated
values['not_associated'] = not_associated
return values
def social_auth_login_redirect(request):
"""Load current redirect to context."""
redirect_value = request.REQUEST.get(REDIRECT_FIELD_NAME)
if redirect_value:
redirect_querystring = REDIRECT_FIELD_NAME + '=' + redirect_value
else:
redirect_querystring = ''
return {
'REDIRECT_FIELD_NAME': REDIRECT_FIELD_NAME,
'REDIRECT_FIELD_VALUE': redirect_value,
'redirect_querystring': redirect_querystring
}
|