50 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""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()
 |