o
    Lf1                     @   s2  d dl mZ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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 ejdd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#d$ Z%d%d& Z&d'd( Z'd)d* Z(d+d, Z)d-d. Z*d/d0 Z+dS )1    )ANYpatchN)settings)cache)Client)reverse)assertFormError)"AUTHENTICATION_METHODS_SESSION_KEY)EmailAddress)app_settings)get_adapter)Authenticatorurl_name)mfa_activate_totp	mfa_indexmfa_deactivate_totpc                 C   s6   |  t|}|jdksJ |d tdsJ d S )N.  locationaccount_login)getr   status_code
startswith)clientr   resp r   ]/var/www/html/humari/django-venv/lib/python3.10/site-packages/allauth/mfa/tests/test_views.pytest_login_required_views   s   	r   c                 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 )Nr   code123formincorrect_code)r   r   postcontexterrorsr   error_messages)auth_clientreauthentication_bypassr   r   r   r   &test_activate_totp_with_incorrect_code!   s   
r'   c              	   C   s   t jj|djdd | , | td}|  | tdddi}W d    n1 s.w   Y  W d    n1 s=w   Y  |jd jdt	 j
d giksSJ d S )	N)userF)verifiedr   r   r   r   unverified_email)r
   objectsfilterupdater   r   r!   r"   r#   r   r$   )r%   r(   totp_validation_bypassr&   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   r+   r,   TypeTOTPexistsRECOVERY_CODESlensubjectbody)r%   r.   r(   r&   r   
mailoutboxr   r   r   r   test_activate_totp_successA   s4   	r=   c                 C   s    |  td}d|jv sJ d S )Nr   authenticators)r   r   r"   r%   user_with_totpr   r   r   r   
test_index_      rA   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 )NTr   r   r   account_reauthenticatepasswordr   r3   zAuthenticator App Deactivatedr   zAuthenticator app deactivated.)	r4   r   r   r   r   r!   r9   r:   r;   )r%   r@   user_passwordr   r<   r   r   r   r   test_deactivate_totp_successd   s   rF   c                 C   s    |  td}|jdksJ d S )Nr   i  r   r   r   )r%   r   r   r   r   &test_user_without_totp_deactivate_totpu   rB   rH   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   r   r   r   rG   )r%   r@   r&   r   r   r   r   !test_user_with_totp_activate_totpz   s
   rI   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 )Nr   loginrD   r   r   mfa_authenticaterequestr   r   r   r    rD   methodatusernamemfarO   rP   idr2   )r!   r   rQ   r   r   r"   r(   is_anonymousr#   r   r$   r   LOGIN_REDIRECT_URLsessionr	   r   r   r5   r6   )r   r@   rE   r.   r   r   r   r   test_totp_login   s0   


rX   c                 C   sh   |  td}|d tdsJ | |d d|i}|jdks#J |  |d }|d dks2J d S )Nmfa_download_recovery_codesr   rC   rD   r   zcontent-dispositionz)attachment; filename="recovery-codes.txt")r   r   r   r!   r   r%   user_with_recovery_codesrE   r   r   r   r   test_download_recovery_codes   s   r\   c                 C   sp   |  td}|d tdsJ | |d d|i}|jdks#J |  |d }t|jd tjks6J d S )Nr0   r   rC   rD   r   unused_codes)	r   r   r   r!   r   r9   r"   r   RECOVERY_CODE_COUNTrZ   r   r   r   test_view_recovery_codes   s   r_   c                 C   s   d|_ tjj|tjjd }| d }| td}|d 	tds'J | 
|d d|i}|jdks8J | 
|d }|d td	ksIJ tjj|tjjd }||r\J t|d
ksdJ d|d jv smJ d|d jv svJ d S )NTr1   r   mfa_generate_recovery_codesr   rC   rD   r   r0   r3   zNew Recovery Codes GeneratedzA new set of)r4   r   r+   r   r5   r8   wrapget_unused_codesr   r   r!   r   validate_coder9   r:   r;   )r%   r[   rE   r   r<   rc	prev_coder   r   r   r   test_generate_recovery_codes   s,   rf   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jj|tjjd}|  tdd|  d i}|jdksiJ |d tjksrJ | jt dt|jddtttjjdgksJ d S )Nr   rJ   r   r   rL   rM   r   r   r   r    r1   r   rD   rN   rR   rS   )r!   r   rQ   r   r   r"   r(   rU   r#   r   r$   r   r+   r5   r8   ra   rb   r   rV   rW   r	   r   )r   r@   r[   rE   r   rd   r   r   r   test_recovery_codes_login   s:   


rg   c                 C   sB   |  tdddd}|jdksJ |jd jddgiksJ d S )	Naccount_email zchange-to@this.org)
action_addemail   r   rk   zUYou cannot add an email address to an account protected by two-factor authentication.)r!   r   r   r"   r#   r?   r   r   r   test_add_email_not_allowed   s   
rm   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}tjd
krGt|j	d d|rCdnd q$t|dd|rOdnd q$d S )N   r   rJ   r   r   rL      r   wrong)   r3   r   z0Too many failed login attempts. Try again later.zIncorrect code.)
ACCOUNT_LOGIN_ATTEMPTS_LIMITr!   r   rQ   r   rangedjangoVERSIONr   r"   )r   enable_cacher@   rE   r   r   i	is_lockedr   r   r   test_totp_login_rate_limit   s>   

ry   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_authenticatorFr   r   r   rC   rD   r   __all__cannot_delete_authenticatorrl   )r   return_valuer   r   r   r   r!   r"   r#   r   r$   )r%   r@   rE   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   rJ   r   r   rL   r   rl   r   r    )r   clearr   r!   r   rQ   r   r   rV   r"   r#   r   r$   )	r@   rE   r.   rv   r   
time_lapseexpect_successr   r   r   r   r   test_totp_code_reuse4  s0   

r   ),unittest.mockr   r   rt   django.confr   django.core.cacher   django.testr   django.urlsr   pytestpytest_django.assertsr   allauth.account.authenticationr	   allauth.account.modelsr
   allauth.mfar   allauth.mfa.adapterr   allauth.mfa.modelsr   markparametrizer   r'   r/   r=   rA   rF   rH   rI   rX   r\   r_   rf   rg   rm   ry   r~   r   r   r   r   r   <module>   sD    
			#%