This repository has been archived on 2024-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
authentik/passbook/core/views/authentication.py

41 lines
1.5 KiB
Python
Raw Normal View History

"""passbook core authentication views"""
2018-11-11 12:41:48 +00:00
from django.contrib import messages
from django.contrib.auth import login, logout
from django.contrib.auth.mixins import LoginRequiredMixin
2018-11-11 12:41:48 +00:00
from django.http import HttpRequest, HttpResponse
from django.shortcuts import get_object_or_404, redirect, reverse
2018-11-11 12:41:48 +00:00
from django.utils.translation import ugettext as _
2018-11-23 08:44:30 +00:00
from django.views import View
2019-10-01 08:24:10 +00:00
from structlog import get_logger
2018-11-11 12:41:48 +00:00
from passbook.core.models import Nonce
2018-11-11 12:41:48 +00:00
LOGGER = get_logger()
2018-11-11 12:41:48 +00:00
2018-11-23 08:44:30 +00:00
class LogoutView(LoginRequiredMixin, View):
"""Log current user out"""
def dispatch(self, request: HttpRequest) -> HttpResponse:
2018-11-23 08:44:30 +00:00
"""Log current user out"""
logout(request)
messages.success(request, _("You've successfully been logged out."))
2019-12-31 11:51:16 +00:00
return redirect(reverse("passbook_core:auth-login"))
class PasswordResetView(View):
"""Temporarily authenticate User and allow them to reset their password"""
def get(self, request: HttpRequest, nonce_uuid: str) -> HttpResponse:
"""Authenticate user with nonce and redirect to password change view"""
# 3. (Optional) Trap user in password change view
nonce = get_object_or_404(Nonce, uuid=nonce_uuid)
# Workaround: hardcoded reference to ModelBackend, needs testing
2019-12-31 11:51:16 +00:00
nonce.user.backend = "django.contrib.auth.backends.ModelBackend"
login(request, nonce.user)
nonce.delete()
2019-12-31 11:51:16 +00:00
messages.success(
request, _(("Temporarily authenticated, please change your password")),
2019-12-31 11:51:16 +00:00
)
return redirect("passbook_core:user-change-password")