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.