views.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from django.contrib.auth import login, REDIRECT_FIELD_NAME
  2. from django.http import Http404
  3. from django.urls import reverse
  4. from django.views.decorators.cache import never_cache
  5. from django.views.decorators.csrf import csrf_exempt
  6. from social_core.actions import do_auth, do_complete
  7. from social_django.views import _do_login
  8. from social_django.utils import load_strategy
  9. def get_provider_from_request(request, backend):
  10. try:
  11. return request.socialauth[backend]
  12. except KeyError:
  13. raise Http404()
  14. def social_auth_view(f):
  15. def social_auth_view_wrapper(request, backend, *args, **kwargs):
  16. provider = get_provider_from_request(request, backend)
  17. request.strategy = load_strategy(request)
  18. backend_class = provider["auth_backend"]
  19. request.backend = backend_class(
  20. request.strategy,
  21. reverse("misago:social-begin", kwargs={"backend": backend}),
  22. )
  23. return f(request, backend, *args, **kwargs)
  24. return social_auth_view_wrapper
  25. @never_cache
  26. @social_auth_view
  27. def auth(request, backend):
  28. return do_auth(request.backend, redirect_name=REDIRECT_FIELD_NAME)
  29. @never_cache
  30. @csrf_exempt
  31. @social_auth_view
  32. def complete(request, backend, *args, **kwargs):
  33. return do_complete(
  34. request.backend,
  35. _do_login,
  36. user=request.user,
  37. redirect_name=REDIRECT_FIELD_NAME,
  38. request=request,
  39. *args,
  40. **kwargs
  41. )