1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- from django.contrib.auth import REDIRECT_FIELD_NAME, login
- from django.core.exceptions import PermissionDenied
- from django.http import Http404
- from django.urls import reverse
- from django.utils.translation import gettext as _
- from django.views.decorators.cache import never_cache
- from django.views.decorators.csrf import csrf_exempt
- from social_core.actions import do_auth, do_complete
- from social_django.views import _do_login
- from social_django.utils import load_strategy
- def get_provider_from_request(request, backend):
- try:
- return request.socialauth[backend]
- except KeyError:
- raise Http404()
- def social_auth_view(f):
- def social_auth_view_wrapper(request, backend, *args, **kwargs):
- if request.settings.enable_oauth2_client:
- raise PermissionDenied(
- _(
- "This feature has been disabled. "
- "Please use %(provider)s to sign in."
- )
- % {"provider": request.settings.oauth2_provider}
- )
- provider = get_provider_from_request(request, backend)
- request.strategy = load_strategy(request)
- backend_class = provider["auth_backend"]
- request.backend = backend_class(
- request.strategy,
- reverse("misago:social-complete", kwargs={"backend": backend}),
- )
- return f(request, backend, *args, **kwargs)
- return social_auth_view_wrapper
- @never_cache
- @social_auth_view
- def auth(request, backend):
- return do_auth(request.backend, redirect_name=REDIRECT_FIELD_NAME)
- @never_cache
- @csrf_exempt
- @social_auth_view
- def complete(request, backend, *args, **kwargs):
- return do_complete(
- request.backend,
- do_login,
- user=request.user,
- redirect_name=REDIRECT_FIELD_NAME,
- request=request,
- *args,
- **kwargs
- )
- def do_login(backend, user, social_user):
- user.backend = "misago.users.authbackends.MisagoBackend"
- login(backend.strategy.request, user)
|