123456789101112131415161718192021222324252627282930 |
- from functools import wraps
- from django.urls import reverse
- from social_auth.backends import get_backend
- from social_auth.exceptions import WrongBackend
- def dsa_view(redirect_name=None):
- """Decorate djangos-social-auth views. Will check and retrieve backend
- or return HttpResponseServerError if backend is not found.
- redirect_name parameter is used to build redirect URL used by backend.
- """
- def dec(func):
- @wraps(func)
- def wrapper(request, backend, *args, **kwargs):
- if redirect_name:
- redirect = reverse(redirect_name, args=(backend,))
- else:
- redirect = request.path
- request.social_auth_backend = get_backend(backend, request, redirect)
- if request.social_auth_backend is None:
- raise WrongBackend(backend)
- return func(request, request.social_auth_backend, *args, **kwargs)
- return wrapper
- return dec
|