o
    "4ge"                     @   s
  d dl 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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 Zejddgejdddgdd Zdd Zdd Zdd Zdd Zdd Zdd  Z d!d" Z!d#d$ Z"d%d& Z#dS )'    N)ANYpatch)settings)cache)Client)reverse)assertTemplateUsed)app_settings)"AUTHENTICATION_METHODS_SESSION_KEY)get_adapter)Authenticatorc                 C   sn   |  |  td}| tdddi}W d    n1 sw   Y  |jd jdt jd giks5J d S )Nmfa_activate_totpcode123formincorrect_code)getr   postcontexterrorsr   error_messages)auth_clientreauthentication_bypassresp r   j/var/www/html/authentication-server/venv/lib/python3.10/site-packages/allauth/mfa/totp/tests/test_views.py&test_activate_totp_with_incorrect_code   s   
r   email_verifiedFmethodr   r   c                 C   sj   |  |dkr|  td}n
| tdddi}W d    n1 s$w   Y  |d tdks3J d S )Nr   r   r   r   location	mfa_index)r   r   r   )r   usertotp_validation_bypassr   r   r   r   r   r   (test_activate_totp_with_unverified_email    s   r#   c              	   C   s   d|_ | , | td}|  | tdddi}W d    n1 s&w   Y  W d    n1 s5w   Y  |d tdksDJ tjj|tjjd	 sRJ tjj|tjj
d	 s`J t|dkshJ d	|d
 jv sqJ d|d
 jv szJ d S )NTr   r   r   r   mfa_view_recovery_codes)r!   type   zAuthenticator App Activatedr   zAuthenticator app activated.)ACCOUNT_EMAIL_NOTIFICATIONSr   r   r   r   objectsfilterTypeTOTPexistsRECOVERY_CODESlensubjectbody)r   r"   r!   r   r   
mailoutboxr   r   r   r   test_activate_totp_success-   s4   	r2   c                 C   s   d|_ | td}|jdksJ |d tdsJ | |d d|i}|jdks-J | td}|jdks;J |d tdksEJ t|dksMJ d	|d
 jv sVJ d|d
 jv s_J d S )NTmfa_deactivate_totp.  r   account_reauthenticatepasswordr    r&   zAuthenticator App Deactivatedr   zAuthenticator app deactivated.)	r'   r   r   status_code
startswithr   r.   r/   r0   )r   user_with_totpuser_passwordr   r1   r   r   r   r   test_deactivate_totp_successK   s   r;   c                 C   s    |  td}|jdksJ d S )Nr3   i  r   r   r7   )r   r   r   r   r   &test_user_without_totp_deactivate_totp\   s   r=   c                 C   sZ   |  |  td}W d    n1 sw   Y  |jdks!J |d tdks+J d S )Nr   r4   r   r3   r<   )r   r9   r   r   r   r   r   !test_user_with_totp_activate_totpa   s
   r>   c                 C   s  |  td|j|d}|jdksJ |d tdksJ | td}|jd jjs-J |  tdddi}|jd	 jdt	 j
d
 giksHJ |  |  tdddi}W d    n1 s`w   Y  |jdkslJ |d tjksuJ | jt dt|jddtttjjdgksJ d S )Naccount_loginloginr6   r4   r   mfa_authenticaterequestr   r   r   r   r6   )r   atusernamemfa)r   rD   idr%   )r   r   rE   r7   r   r   r!   is_anonymousr   r   r   r   LOGIN_REDIRECT_URLsessionr
   r   r   r*   r+   )clientr9   r:   r"   r   r   r   r   test_totp_loginj   s0   


rL   c                 C   s   d| _ |td|j|d}|jdksJ |d tdks J tdD ]!}|dk}|tddd	i}|jd
 jd|r>dndgiksEJ q$d S )N   r?   r@   r4   r   rB      r   wrongr   z0Too many failed login attempts. Try again later.zIncorrect code.)ACCOUNT_LOGIN_ATTEMPTS_LIMITr   r   rE   r7   ranger   r   )r   enable_cacher9   r:   rK   r   i	is_lockedr   r   r   test_totp_login_rate_limit   s,   

rU   c                 C   s   t dm}d|_| td}|jdksJ |d tds!J | |d d|i}|jdks2J | td}|jd jd	t	 j
d
 giksJJ | td}|jdksXJ |jd jd	t	 j
d
 giksiJ W d    d S 1 stw   Y  d S )Nz>allauth.mfa.adapter.DefaultMFAAdapter.can_delete_authenticatorFr3   r4   r   r5   r6   r   __all__cannot_delete_authenticator   )r   return_valuer   r   r7   r8   r   r   r   r   r   )r   r9   r:   cda_mockr   r   r   r   test_cannot_deactivate_totp   s(   


"r[   c           	   	   C   s   dD ]s\}}}|rt   t }|td| j|d}|jdks#J |d tdks-J |  |tdd|i}W d    n1 sEw   Y  |r]|jdksSJ |d tjks\J q|jdksdJ |j	d	 j
dt jd
 giksuJ qd S )N))r   FTr   FF)456FTr\   )r   TTr?   r@   r4   r   rB   r   rX   r   r   )r   clearr   r   r   rE   r7   r   rI   r   r   r   r   )	r9   r:   r"   rR   r   
time_lapseexpect_successrK   r   r   r   r   test_totp_code_reuse   s0   

ra   c                 C   s   |  td|j|d}|jdksJ |d tdksJ | td}|jdks+J t|d tdt d	tj	  d
! | td}|jdksLJ |d tdksVJ W d    d S 1 saw   Y  d S )Nr?   r@   r4   r   rB   rX   zmfa/authenticate.htmlz+allauth.account.internal.stagekit.time.timeg?)rY   )
r   r   rE   r7   r   r   r   timer	   LOGIN_TIMEOUT)rK   r9   r:   r   r   r   r   test_totp_stage_expires   s"   

"rd   )$rb   unittest.mockr   r   django.confr   django.core.cacher   django.testr   django.urlsr   pytestpytest_django.assertsr   allauth.accountr	   allauth.account.authenticationr
   allauth.mfa.adapterr   allauth.mfa.modelsr   r   markparametrizer#   r2   r;   r=   r>   rL   rU   r[   ra   rd   r   r   r   r   <module>   s2    	)