
    f                        d dl mZmZmZ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mZmZmZmZmZ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ej@                  jB                  _"        dZ#ddiZ$defdZ%dee   fdZ&deddfdZ'd%dZ(de
fdZ)dedefdZ*de+defdZ,dedefdZ-dee   fdZ.de/dee   fdZ0dedefdZ1d&defd Z2defd!Z3dedefd"Z4 G d# d$      Z5y)'    )AnyDictListOptional)get_user_modelN)Fido2Server)websafe_decode)AttestedCredentialDataAuthenticationResponseAuthenticatorDataPublicKeyCredentialRpEntityPublicKeyCredentialUserEntityRegistrationResponseResidentKeyRequirementUserVerificationRequirement)url_str_to_user_pk)context)app_settings)get_adapter)AuthenticatorTzmfa.webauthn.state	credPropsreturnc                 J    t               j                  |       }t        di |S )N )r   %get_public_key_credential_user_entityr   )userkwargss     ]/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/mfa/webauthn/internal/auth.pybuild_user_payloadr   !   s"    ]@@FF(2622    c                  \    t         j                  j                  j                  t              S N)r   requestsessiongetSTATE_SESSION_KEYr   r    r   	get_stater'   &   s    ??""&&'899r    statec                 F    | t         j                  j                  t        <   y r"   )r   r#   r$   r&   )r(   s    r   	set_stater*   *   s    16GOO-.r    c                  `    t         j                  j                  j                  t        d        y r"   )r   r#   r$   popr&   r   r    r   clear_stater-   .   s    OO 148r    c                      t               j                         } t        di | }d }t        j                  rd }t        ||      }|S )Nc                      y)NTr   )os    r   <lambda>zget_server.<locals>.<lambda>7   s    r    )verify_originr   )r   #get_public_key_credential_rp_entityr   r   WEBAUTHN_ALLOW_INSECURE_ORIGINr   )	rp_kwargsrpr2   servers       r   
get_serverr8   2   sC    AACI	$	1y	1BM22&=9FMr    responsec                 z    	 t        j                  |       S # t        $ r t               j	                  d      w xY wNincorrect_code)r   	from_dict	TypeErrorr   validation_errorr9   s    r   parse_registration_responserA   <   s;    ?#--h77 ?m,,-=>>?    #:passwordlessc                 $   t               }t        |       }|j                  t        |       ||rt        j
                  nt        j                  |rt        j
                  nt        j                  t              \  }}t        |       t        |      S )N)r   credentialsresident_key_requirementuser_verification
extensions)r8   get_credentialsregister_beginr   r   REQUIREDDISCOURAGEDr   
EXTENSIONSr*   dict)r   rC   r7   rE   registration_datar(   s         r   begin_registrationrP   C   s    \F!$'K%44%  #++'33  (00,88  5  u e!""r    
credentialc                     t               }t               }|st               j                  d      	 |j	                  ||       }t                |S # t
        $ r t               j                  d      w xY wr;   )r8   r'   r   r?   register_complete
ValueErrorr-   )rQ   r7   r(   bindings       r   complete_registrationrV   Y   so    \FKEm,,-=>>?**5*= MN	  ?m,,-=>>?s   A #A2c                 >   g }t         j                  j                  | t         j                  j                        }|D ]\  }|j                         j                  j                  }|s*|j                  |j                         j                  j                         ^ |S N)r   type)	r   objectsfilterTypeWEBAUTHNwrapauthenticator_datacredential_dataappend)r   rE   authenticatorsauthenticatorr`   s        r   rI   rI   g   s    02K"**11**33 2 N ( X',,.AAQQ}113FFVVWX r    credential_idc                     t         j                  j                  | t         j                  j                        }|D ]7  }||j                         j                  j                  j                  k(  s5|c S  y rX   )	r   rZ   r[   r\   r]   r^   r_   r`   rd   )r   rd   rb   rc   s       r   "get_authenticator_by_credential_idrf   s   su     #**11**33 2 N ( !!!#66FFTTU ! ! r    c                 z    	 t        j                  |       S # t        $ r t               j	                  d      w xY wr;   )r   r=   r>   r   r?   r@   s    r   parse_authentication_responserh      s;    ?%//99 ?m,,-=>>?rB   c                     t               }|j                  | rt        |       ng t        j                        \  }}t        |       t        |      S )N)rE   rG   )r8   authenticate_beginrI   r   	PREFERREDr*   rN   )r   r7   request_optionsr(   s       r   begin_authenticationrm      sM    \F#66-1OD)r5?? 7 OU e  r    c                    	 | j                  di       j                  d      }t        t        |      j                  d            }t               j                  j                  |      j                         }|st               j                  d      |S # t        t
        t        f$ r t               j                  d      w xY w)Nr9   
userHandleutf8r<   )pk)r%   r   r	   decoderT   r>   KeyErrorr   r?   r   rZ   r[   first)r9   user_handleuser_pkr   s       r   extract_user_from_responserw      s    ?ll:r266|D$^K%@%G%G%OP ##**g*6<<>Dm,,-=>>K 	8, ?m,,-=>>?s   AB .Cc                 n   t        |       }t               }t               }|st               j	                  d      	 |j                  |||      }t                t        | |j                        }|st               j	                  d      |S # t        $ r}t               j	                  d      |d }~ww xY wr;   )
rI   r8   r'   r   r?   authenticate_completerT   r-   rf   rd   )r   r9   rE   r7   r(   rU   erc   s           r   complete_authenticationr{      s    !$'K\FKEm,,-=>>F..uk8L M6tW=R=RSMm,,-=>>  Fm,,-=>AEFs   B 	B4B//B4c                       e Zd Zd Zedededd fd       Zedefd       Z	e	j                  defd       Z	edefd       Zedee   fd	       Zy
)WebAuthnc                     || _         y r"   )instance)selfr   s     r   __init__zWebAuthn.__init__   s	     r    namerQ   r   c                     t        |t         j                  j                  ||d      }|j                           | |      S )N)r   rQ   )r   rY   data)r   r\   r]   save)clsr   r   rQ   r   s        r   addzWebAuthn.add   s>     ##,,(
 	8}r    c                 4    | j                   j                  d   S Nr   r   r   r   s    r   r   zWebAuthn.name   s    }}!!&))r    c                 6    || j                   j                  d<   y r   r   )r   r   s     r   r   zWebAuthn.name   s    %)6"r    c                     t        | j                  j                  d         j                  j                  j
                  S )NrQ   )rA   r   r   r9   attestation_object	auth_datar   s    r   r_   zWebAuthn.authenticator_data   s0    *MM|,

(%%ii	0r    c                     | j                   j                  j                  di       j                  di       j                  di       j                  d      S )NrQ   clientExtensionResultsr   rk)r   r   r%   r   s    r   is_passwordlesszWebAuthn.is_passwordless   sE     MM""<4S)2.Sb!SY		
r    N)__name__
__module____qualname__r   classmethodstrrN   r   propertyr   setterr   r_   r   boolr   r   r    r   r}   r}      s    ! 
S 
d 
z 
 
 *c * * 
[[* * * 0$5 0 0
 
$ 
 
r    r}   )r   Nr"   )6typingr   r   r   r   django.contrib.authr   fido2.featuresfido2fido2.serverr   fido2.utilsr	   fido2.webauthnr
   r   r   r   r   r   r   r   allauth.account.utilsr   allauth.corer   allauth.mfar   allauth.mfa.adapterr   allauth.mfa.modelsr   featureswebauthn_json_mappingenabledr&   rM   r   r'   r*   r-   r8   rA   r   rP   rV   rI   bytesrf   rh   rm   rw   r{   r}   r   r    r   <module>r      sN   , , .  $ &	 	 	 5   $ + , 04 $ $ , ) 4 
3 = 3
:8D> :7T 7d 79K ?# ?2F ?#4 #D #,d /@ 	T"89 	m?C ?4J ?!t !	 	D ] $&
 &
r    