"""passbook multi-factor authentication engine""" from django.contrib import messages from django.http import HttpRequest from django.shortcuts import redirect, reverse from django.utils.translation import gettext as _ from structlog import get_logger from passbook.core.models import Nonce from passbook.factors.base import AuthenticationFactor from passbook.factors.email.tasks import send_mails from passbook.factors.email.utils import TemplateEmailMessage from passbook.lib.config import CONFIG LOGGER = get_logger() class EmailFactorView(AuthenticationFactor): """Dummy factor for testing with multiple factors""" def get_context_data(self, **kwargs): kwargs["show_password_forget_notice"] = CONFIG.y( "passbook.password_reset.enabled" ) return super().get_context_data(**kwargs) def get(self, request, *args, **kwargs): nonce = Nonce.objects.create(user=self.pending_user) # Send mail to user message = TemplateEmailMessage( subject=_("Forgotten password"), template_name="email/account_password_reset.html", to=[self.pending_user.email], template_context={ "url": self.request.build_absolute_uri( reverse( "passbook_core:auth-password-reset", kwargs={"nonce": nonce.uuid}, ) ) }, ) send_mails(self.authenticator.current_factor, message) self.authenticator.cleanup() messages.success(request, _("Check your E-Mails for a password reset link.")) return redirect("passbook_core:auth-login") def post(self, request: HttpRequest): """Just redirect to next factor""" return self.authenticator.user_ok()