o
    &zh                     @   s(  d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ d dlmZ d d
lmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d dlm Z  d dl!m"Z" eeddeeddG dd deZ#e#$ Z%eeddG dd deZ&e&$ Z'dS )    N)login_required)HttpResponseRedirect)get_object_or_404)reversereverse_lazy)method_decorator)FormView)app_settings)reauthentication_required)get_adapter)redirect_if_add_not_allowed)Authenticator)ActivateTOTPFormDeactivateTOTPForm)flows)is_mfa_enabled)get_form_classdispatch)namec                       s^   e Zd ZeZdej Z fddZ fddZ	 fddZ
dd	 Zd
d Z fddZ  ZS )ActivateTOTPViewzmfa/totp/activate_form.c                    s8   t |jtjjgrttdS t j|g|R i |S )Nmfa_deactivate_totp)	r   userr   TypeTOTPr   r   superr   selfrequestargskwargs	__class__ Q/var/www/html/kangema/venv/lib/python3.10/site-packages/allauth/mfa/totp/views.pyr      s   zActivateTOTPView.dispatchc                    sn   t  jdi |}t }|| jj|d j}||}t	|
dd}d| }||||d |S )Nformutf8zutf-8zdata:image/svg+xml;base64,)totp_svgtotp_svg_data_uritotp_urlr"   )r   get_context_datar   build_totp_urlr   r   secretbuild_totp_svgbase64	b64encodeencodedecodeupdate)r   r   retadapterr(   r&   base64_datatotp_data_urir    r"   r#   r)   !   s    

z!ActivateTOTPView.get_context_datac                    s   t   }| jj|d< |S )Nr   )r   get_form_kwargsr   r   r   r2   r    r"   r#   r6   4   s   
z ActivateTOTPView.get_form_kwargsc                 C      t tjd| jS )Nactivate_totpr   r	   FORMS
form_classr   r"   r"   r#   r   9      zActivateTOTPView.get_form_classc                 C   s   | j rtdS tdS )Nmfa_view_recovery_codes	mfa_index)did_generate_recovery_codesr   r=   r"   r"   r#   get_success_url<   s   z ActivateTOTPView.get_success_urlc                    s(   t | j|\}}t|| _t |S N)r   r9   r   boolrA   r   
form_valid)r   r$   	totp_authrc_authr    r"   r#   rE   A   s   
zActivateTOTPView.form_valid)__name__
__module____qualname__r   r<   account_settingsTEMPLATE_EXTENSIONtemplate_namer   r)   r6   r   rB   rE   __classcell__r"   r"   r    r#   r      s    
r   c                       sb   e Zd ZeZdej ZedZ	dd Z
ee fddZ fddZd	d
 Z fddZ  ZS )DeactivateTOTPViewzmfa/totp/deactivate_form.r@   c                 O   sN   t t| jjtjjd| _t|jtjjgstt	dS | j
|g|R i |S )N)r   typemfa_activate_totp)r   r   r   r   r   r   authenticatorr   r   r   	_dispatchr   r"   r"   r#   r   P   s   zDeactivateTOTPView.dispatchc                    s   t  j|g|R i |S )zThere's no point to reauthenticate when MFA is not enabled, so the
        `is_mfa_enabled` check needs to go first, which is why we cannot slap a
        `reauthentication_required` decorator on the `dispatch` directly.
        )r   r   r   r    r"   r#   rS   Z   s   zDeactivateTOTPView._dispatchc                    s$   t   }| j|d< |di  |S )NrR   data)r   r6   rR   
setdefaultr7   r    r"   r#   r6   b   s   

z"DeactivateTOTPView.get_form_kwargsc                 C   r8   )Ndeactivate_totpr:   r=   r"   r"   r#   r   l   r>   z!DeactivateTOTPView.get_form_classc                    s   t | j| j t |S rC   )r   rV   r   rR   r   rE   )r   r$   r    r"   r#   rE   o   s   zDeactivateTOTPView.form_valid)rH   rI   rJ   r   r<   rK   rL   rM   r   success_urlr   r   r
   rS   r6   r   rE   rN   r"   r"   r    r#   rO   J   s    


rO   )(r-   django.contrib.auth.decoratorsr   django.httpr   django.shortcutsr   django.urlsr   r   django.utils.decoratorsr   django.views.generic.editr   allauth.accountr	   rK   allauth.account.decoratorsr
   allauth.mfaallauth.mfa.adapterr   allauth.mfa.internal.flows.addr   allauth.mfa.modelsr   allauth.mfa.totp.formsr   r   allauth.mfa.totp.internalr   allauth.mfa.utilsr   allauth.utilsr   r   as_viewr9   rO   rV   r"   r"   r"   r#   <module>   s0    

/
)