o
    &zh
                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZ d dlmZ d dlmZ d d	lmZ eG d
d dZdedefddZdedee fddZdee defddZdedededdfddZdededefddZdS )    N)	dataclass)List)AbstractUser)BadSignatureSigner)HttpRequestHttpResponse)salted_hmac)app_settings)Authenticatorc                   @   s   e Zd ZU eed< eed< dS )IssuedTrustfingerprintatN)__name__
__module____qualname__str__annotations__int r   r   [/var/www/html/kangema/venv/lib/python3.10/site-packages/allauth/mfa/internal/flows/trust.pyr      s   
 r   userreturnc                 C   s   d}g }| t| j | | j tjj| jddD ]#}| t|j | t|j |j	
d}|dur@| t| qt|d|dd S )	z|
    If the user changes anything about his security setup, we want to invalidate
    any trust that was issued before.
    zallauth.mfa.trust)user_idpkseedN|sha256)	algorithm)appendr   r   passwordr   objectsfilterorder_bytypedatagetr	   join	hexdigest)r   saltpartsauthenticatorr   r   r   r   create_config_fingerprint   s   r,   requestc                    sr   | j tj}|sg S t }z||}W n ty    g  Y S w dd |D }t  tt	 fdd|}|S )Nc                 S   s    g | ]}t |d  |d dqS )r      r   r   )r   ).0entryr   r   r   
<listcomp>/   s     z'decode_trust_cookie.<locals>.<listcomp>c                    s   | j tj   kS )N)r   r
   TRUST_COOKIE_AGEtotal_seconds)tnowr   r   <lambda>3   s    z%decode_trust_cookie.<locals>.<lambda>)
COOKIESr&   r
   TRUST_COOKIE_NAMEr   unsign_objectr   timelistr"   )r-   valuesignerr%   trustsr   r6   r   decode_trust_cookie&   s"   rA   r@   c                 C   s   t  }|dd | D S )Nc                 S   s   g | ]}|j |jfqS r   r/   )r0   itr   r   r   r2   ;   s    z'encode_trust_cookie.<locals>.<listcomp>)r   sign_object)r@   r?   r   r   r   encode_trust_cookie9   s   rD   responsec              	   C   sV   t |}t| }|t|tt d |jtjt	|tj
tjtjtjtjd d S )Nr/   )max_agepathdomainsecurehttponly)r,   rA   r   r   r   r<   
set_cookier
   r:   rD   r3   TRUST_COOKIE_PATHTRUST_COOKIE_DOMAINTRUST_COOKIE_SECURETRUST_COOKIE_HTTPONLY)r-   r   rE   r   r@   r   r   r   trust_browser>   s   
rP   c                    s0   t jsdS t| }t| t fdd|D S )NFc                    s   g | ]}|j  kqS r   r   )r0   r5   rQ   r   r   r2   T   s    z&is_trusted_browser.<locals>.<listcomp>)r
   TRUST_ENABLEDrA   r,   any)r-   r   r@   r   rQ   r   is_trusted_browserO   s
   rT   )r<   dataclassesr   typingr   django.contrib.auth.modelsr   django.core.signingr   r   django.httpr   r   django.utils.cryptor	   allauth.mfar
   allauth.mfa.modelsr   r   r   r,   rA   rD   rP   boolrT   r   r   r   r   <module>   s0    
