o
    h#                     @   s   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	 Zd
d Zdd Zdd Zdd Zejdddgdd Zdd Zejdddgdd ZdS )    )ANY)get_user_modelN)app_settings)"AUTHENTICATION_METHODS_SESSION_KEY)Flow)Authenticatorc                 C   s   ||%}|  |d}d| d v sJ | j|dd|idd}W d    n1 s,w   Y  | }|d d d |jksBJ d S )	Nheadless:mfa:login_webauthnrequest_optionsdata
credentialapplication/jsonr
   content_typeuserid)getjsonpostuser_id)clientpasskeywebauthn_authentication_bypassheadless_reverser   respr
    r   c/var/www/html/env_mimamsha/lib/python3.10/site-packages/allauth/headless/mfa/tests/test_webauthn.pytest_passkey_login   s   
r   c                 C   sP   |  |d}| }i }|dkrddtii}|dddtiid|ks&J d S )	Nr   appmetasession_token   r	   	publicKey)statusr
   )r   r   r   )r   headless_clientr   dbr   r
   r   r   r   r   test_passkey_login_get_options   s   
r%   c                 C   s  |  |d}|jdksJ tjdd | d d D v s J ||% |  |d}| }|d d	ks8J |d d
 tksBJ W d    n1 sLw   Y  ||}| j|dd|idd}|jd	ksiJ W d    n1 ssw   Y  |  |d}|jd	ksJ d S )Nz"headless:mfa:manage_recovery_codes  c                 S   s   g | ]}|d  qS )r   r   .0flowr   r   r   
<listcomp>5   s    z'test_reauthenticate.<locals>.<listcomp>r
   flowsz$headless:mfa:reauthenticate_webauthnr"   r    r	   r   r   r   )r   status_coder   MFA_REAUTHENTICATEr   r   r   )auth_clientr   user_with_recovery_codesr   r   r   r
   r   r   r   r   test_reauthenticate+   s*   


r0   c                 C   s   |j dd}| j|d|dd}|jdksJ |  | j|d|dd}W d    n1 s/w   Y  |jdks;J |  | jdksHJ d S )NzRenamed!)r   nameheadless:mfa:manage_webauthnr   r   r&   r    )pkputr,   refresh_from_dbwrapr1   r.   r   r   reauthentication_bypassr
   r   r   r   r   test_update_authenticatorL   s"   r9   c                 C   s   d|j gi}| j|d|dd}|jdksJ |  | j|d|dd}W d    n1 s/w   Y  |jdks;J tjj|j d rGJ d S )Nauthenticatorsr2   r   r   r&   r    )r3   )r3   deleter,   r   objectsfilterexistsr7   r   r   r   test_delete_authenticatorb   s    r?   email_verifiedFTc           
   	   C   s>  | |d}|r|jdksJ 	 |  | |d}|r4|jdks%J | }|d d tks3J n|jdks;J || d=}|j|dd|id	d
}tjjtjj	| d
 }	|ri|jdksbJ |	dkshJ n|jdkspJ |	dksvJ W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr2   r&   i  r    r
   creation_optionsFr   r   r   )typer      r   )r   r,   r   r   r   r   r<   r=   TypeWEBAUTHNcount)
r   r.   r   webauthn_registration_bypassr8   r@   r   r
   r   webauthn_countr   r   r   test_add_authenticatorw   s<   		"rI   c                 C   s>  | j |d|j|ddd}|jdksJ | }dd |d d	 D }t|d
ks,J |d }	|	dddgdks;J ||%}
| |d}d| d v sQJ | j |dd|
idd}W d    n1 sgw   Y  | }|jdkswJ |d d d |jksJ |  t dt	|j
jddt	t	tjjdgksJ d S )Nzheadless:account:login)usernamepasswordr   r   r&   c                 S      g | ]	}| d r|qS 
is_pendingr   )r(   fr   r   r   r*      s    z"test_2fa_login.<locals>.<listcomp>r
   r+   rC   r   mfa_authenticateTwebauthn)r   rN   typesz"headless:mfa:authenticate_webauthnr	   r   r    r   r   rK   )methodatrJ   mfa)rT   rU   r   rB   )r   rJ   r,   r   lenr   r   headless_sessionr   r   r   r   rD   rE   )r   r   user_passwordr   r   r   r   r
   pending_flowspending_flowr   r   r   r   test_2fa_login   sB   

r\   login_on_email_verificationc                 C   s  t jj|_d|_||_| j|dddddd}|jdksJ d	d
 | d d D }	t	|	dks4J |	d }
|
d t
jjksBJ || |}| j|dd|idd}|jdksZJ dd
 | d d D }	t	|	dksoJ |	d }
|
d t
jjks}J | |d}| }d|d v sJ t jjdd}||d}| j|dd|ddd}W d    n1 sw   Y  | }|jdksJ |d d sJ tjj|d}| jdksJ d S )NTzheadless:mfa:signup_webauthnzpass@key.orgr   )emailrJ   r   r   r&   c                 S   rL   rM   rO   r'   r   r   r   r*      
    
z'test_passkey_signup.<locals>.<listcomp>r
   r+   rC   r   r   zheadless:account:verify_emailkeyc                 S   rL   rM   rO   r'   r   r   r   r*      r_   rA   )r^   zSome key)r1   r   r    r   is_authenticated)r   )r   EmailVerificationMethod	MANDATORYACCOUNT_EMAIL_VERIFICATION*ACCOUNT_EMAIL_VERIFICATION_BY_CODE_ENABLED#ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATIONr   r,   r   rW   r   VERIFY_EMAILvalueMFA_SIGNUP_WEBAUTHNr   r   r<   r4   r   r6   r1   )r   r$   rG   r   settings get_last_email_verification_code
mailoutboxr]   r   rZ   r)   coder
   r   r   authenticatorr   r   r   test_passkey_signup   sX   

ro   )unittest.mockr   django.contrib.authr   pytestallauth.accountr   allauth.account.authenticationr   allauth.headless.constantsr   allauth.mfa.modelsr   r   r%   r0   r9   r?   markparametrizerI   r\   ro   r   r   r   r   <module>   s"    !
&+