o
    "4gG                     @   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 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dd ZdS )    )ANY)get_user_modelN)"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   q/var/www/html/authentication-server/venv/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>4   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*   


r/   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wrapr0   r-   r   r   reauthentication_bypassr	   r   r   r   r   test_update_authenticatorK   s"   r8   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authenticatorsr1   r   r   r%   r   )r2   )r2   deleter+   r   objectsfilterexistsr6   r   r   r   test_delete_authenticatora   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 )Nr1   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_bypassr7   r?   r   r	   r
   webauthn_countr   r   r   test_add_authenticatorv   s<   		"rH   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)          z"test_2fa_login.<locals>.<listcomp>r	   r*   rB   r   mfa_authenticateTwebauthn)r   rM   typesz"headless:mfa:authenticate_webauthnr   r
   r   r   r   rJ   )methodatrI   mfa)rT   rU   r   rA   )r   rI   r+   r   lenr   r   headless_sessionr   r   r   r   rC   rD   )r   r   user_passwordr   r   r   r   r	   pending_flowspending_flowr
   r   r   r   test_2fa_login   sB   

r\   c           
      C   s  | j |dddddd}|jdksJ dd	 | d
 d D d }|d tjjks-J | |d}| }d|d
 v s@J t jjdd}||d}| j	|dd|ddd}W d    n1 sew   Y  | }|d d svJ t
jj|d}	|	 jdksJ d S )Nzheadless:mfa:signup_webauthnzpass@key.orgr   )emailrI   r   r   r%   c                 S   rK   rL   rN   r&   r   r   r   r)      rP   z'test_passkey_signup.<locals>.<listcomp>r	   r*   r   r   r@   )r]   TzSome key)r0   r
   r   is_authenticated)r   )r   r+   r   r   MFA_SIGNUP_WEBAUTHNvaluer   r   r;   r3   r   r5   r0   )
r   r#   rF   r   r   r(   r	   r   r
   authenticatorr   r   r   test_passkey_signup   s.   rb   )unittest.mockr   django.contrib.authr   pytestallauth.account.authenticationr   allauth.headless.constantsr   allauth.mfa.modelsr   r   r$   r/   r8   r>   markparametrizerH   r\   rb   r   r   r   r   <module>   s    !
&+