U
    >i                     @   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                    s2   t |jtjjgrttdS t j|f||S )NZmfa_deactivate_totp)	r   userr   TypeTOTPr   r   superr   selfrequestargskwargs	__class__ :/tmp/pip-unpacked-wheel-upujnpc2/allauth/mfa/totp/views.pyr      s    zActivateTOTPView.dispatchc                    sj   t  jf |}t }|| jj|d j}||}t	|
dd}d| }||||d |S )Nformutf8zutf-8zdata:image/svg+xml;base64,)totp_svgZtotp_svg_data_uritotp_url)r   get_context_datar   Zbuild_totp_urlr   r   secretZbuild_totp_svgbase64	b64encodeencodedecodeupdate)r   r   retadapterr&   r%   Zbase64_dataZ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   r.   r   r!   r"   r0   4   s    
z ActivateTOTPView.get_form_kwargsc                 C   s   t tjd| jS )Nactivate_totpr   r	   ZFORMS
form_classr   r!   r!   r"   r   9   s    zActivateTOTPView.get_form_classc                 C   s   | j rtdS tdS )NZmfa_view_recovery_codes	mfa_index)did_generate_recovery_codesr   r5   r!   r!   r"   get_success_url<   s    z ActivateTOTPView.get_success_urlc                    s(   t | j|\}}t|| _t |S N)r   r2   r   boolr7   r   
form_valid)r   r#   Z	totp_authZrc_authr   r!   r"   r;   A   s    
zActivateTOTPView.form_valid)__name__
__module____qualname__r   r4   account_settingsTEMPLATE_EXTENSIONtemplate_namer   r'   r0   r   r8   r;   __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.r6   c                 O   sH   t t| jjtjjd| _t|jtjjgs6tt	dS | j
|f||S )N)r   typeZ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|f||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"   rF   Z   s    zDeactivateTOTPView._dispatchc                    s$   t   }| j|d< |di  |S )NrE   data)r   r0   rE   
setdefaultr1   r   r!   r"   r0   b   s    

z"DeactivateTOTPView.get_form_kwargsc                 C   s   t tjd| jS )Ndeactivate_totpr3   r5   r!   r!   r"   r   l   s    z!DeactivateTOTPView.get_form_classc                    s   t | j| j t |S r9   )r   rI   r   rE   r   r;   )r   r#   r   r!   r"   r;   o   s    zDeactivateTOTPView.form_valid)r<   r=   r>   r   r4   r?   r@   rA   r   Zsuccess_urlr   r   r
   rF   r0   r   r;   rB   r!   r!   r   r"   rC   J   s   


rC   )(r)   Zdjango.contrib.auth.decoratorsr   Zdjango.httpr   Zdjango.shortcutsr   Zdjango.urlsr   r   Zdjango.utils.decoratorsr   Zdjango.views.generic.editr   Zallauth.accountr	   r?   Zallauth.account.decoratorsr
   Zallauth.mfaZallauth.mfa.adapterr   Zallauth.mfa.internal.flows.addr   Zallauth.mfa.modelsr   Zallauth.mfa.totp.formsr   r   Zallauth.mfa.totp.internalr   Zallauth.mfa.utilsr   Zallauth.utilsr   r   Zas_viewr2   rC   rI   r!   r!   r!   r"   <module>   s.   

/
)