authentik.recovery.views

recovery views

 1"""recovery views"""
 2
 3from django.contrib import messages
 4from django.contrib.auth import login
 5from django.db import transaction
 6from django.http import Http404, HttpRequest, HttpResponse
 7from django.shortcuts import redirect
 8from django.utils.translation import gettext as _
 9from django.views import View
10
11from authentik.core.models import Token, TokenIntents
12from authentik.stages.password import BACKEND_INBUILT
13
14
15class UseTokenView(View):
16    """Use token to login"""
17
18    def get(self, request: HttpRequest, key: str) -> HttpResponse:
19        """Check if token exists, log user in and delete token."""
20        with transaction.atomic():
21            tokens = (
22                Token.objects.filter(key=key, intent=TokenIntents.INTENT_RECOVERY)
23                .select_for_update()
24                .select_related("user")
25            )
26            token = tokens.first()
27            if token is None:
28                raise Http404
29            login(request, token.user, backend=BACKEND_INBUILT)
30            token.delete()
31        messages.warning(request, _("Used recovery-link to authenticate."))
32        return redirect("authentik_core:if-user")
class UseTokenView(django.views.generic.base.View):
16class UseTokenView(View):
17    """Use token to login"""
18
19    def get(self, request: HttpRequest, key: str) -> HttpResponse:
20        """Check if token exists, log user in and delete token."""
21        with transaction.atomic():
22            tokens = (
23                Token.objects.filter(key=key, intent=TokenIntents.INTENT_RECOVERY)
24                .select_for_update()
25                .select_related("user")
26            )
27            token = tokens.first()
28            if token is None:
29                raise Http404
30            login(request, token.user, backend=BACKEND_INBUILT)
31            token.delete()
32        messages.warning(request, _("Used recovery-link to authenticate."))
33        return redirect("authentik_core:if-user")

Use token to login

def get( self, request: django.http.request.HttpRequest, key: str) -> django.http.response.HttpResponse:
19    def get(self, request: HttpRequest, key: str) -> HttpResponse:
20        """Check if token exists, log user in and delete token."""
21        with transaction.atomic():
22            tokens = (
23                Token.objects.filter(key=key, intent=TokenIntents.INTENT_RECOVERY)
24                .select_for_update()
25                .select_related("user")
26            )
27            token = tokens.first()
28            if token is None:
29                raise Http404
30            login(request, token.user, backend=BACKEND_INBUILT)
31            token.delete()
32        messages.warning(request, _("Used recovery-link to authenticate."))
33        return redirect("authentik_core:if-user")

Check if token exists, log user in and delete token.