
    kfE                         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
 d dlZd dlmZ d dl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mZ dZn# e$ r dZY nw xY wh dZ G d d          ZdS )    N)Iterable)	timedelta)AnyDictOptionalTypeUnion)gettext_lazy)InvalidAlgorithmErrorInvalidTokenError
algorithms   )TokenBackendError)Token)format_lazy)PyJWKClientPyJWKClientErrorTF>	   ES256ES384ES512HS256HS384HS512RS256RS384RS512c                   4   e Zd Z	 	 	 	 	 	 	 ddedee         dedeeedf         dee         dee         d	eeee	df         d
ee
ej                          ddfdZdeddfdZde	fdZdedee         fdZdeeef         defdZddededeeef         fdZdS )TokenBackendN 	algorithmsigning_keyverifying_keyaudienceissuerjwk_urlleewayjson_encoderreturnc	                     |                      |           || _        || _        || _        || _        || _        t          r|rt          |          nd | _        nd | _        || _	        || _
        d S )N)_validate_algorithmr    r!   r"   r#   r$   JWK_CLIENT_AVAILABLEr   jwks_clientr&   r'   )	selfr    r!   r"   r#   r$   r%   r&   r'   s	            a/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/rest_framework_simplejwt/backends.py__init__zTokenBackend.__init__#   s     	  +++"&*  	$7>H{7333DD#D(    c                     |t           vr*t          t          t          d          |                    |t          j        v r6t          j        s,t          t          t          d          |                    dS dS )z
        Ensure that the nominated algorithm is recognized, and that cryptography is installed for those
        algorithms that require it
        z Unrecognized algorithm type '{}'z/You must have cryptography installed to use {}.N)ALLOWED_ALGORITHMSr   r   _r   requires_cryptography
has_crypto)r-   r    s     r.   r*   z TokenBackend._validate_algorithm>   s    
 ...#A@AA9MM   
888AV8#GHH)    9888r0   c                 V   | j         t          d          S t          | j         t          t          f          rt          | j                   S t          | j         t                    r| j         S t          t          t          d          t          | j                                       )Nr   )secondszIUnrecognized type '{}', 'leeway' must be of type int, float or timedelta.)	r&   r   
isinstanceintfloatr   r   r3   type)r-   s    r.   
get_leewayzTokenBackend.get_leewayO   s    ;Q''''c5\22 	T[1111Y// 
	;#c  %%	   r0   tokenc                     | j                             d          r| j        S | j        rO	 | j                            |          j        S # t          $ r"}t          t          d                    |d }~ww xY w| j	        S )NHSToken is invalid or expired)
r    
startswithr!   r,   get_signing_key_from_jwtkeyr   r   r3   r"   )r-   r=   exs      r.   get_verifying_keyzTokenBackend.get_verifying_key`   s    >$$T** 	$## 	RR'@@GGKK# R R R'*G(H(HIIrQR !!s   A	 	
A5A00A5payloadc                    |                                 }| j        
| j        |d<   | j        
| j        |d<   t          j        || j        | j        | j                  }t          |t                    r|
                    d          S |S )zL
        Returns an encoded token for the given payload dictionary.
        Naudiss)r    r'   zutf-8)copyr#   r$   jwtencoder!   r    r'   r8   bytesdecode)r-   rF   jwt_payloadr=   s       r.   rL   zTokenBackend.encodel   s     llnn=$!%K;"!%K
n*	
 
 
 eU## 	)<<(((r0   Tverifyc                 j   	 t          j        ||                     |          | j        g| j        | j        |                                 | j        du|d          S # t          $ r"}t          t          d                    |d}~wt          $ r"}t          t          d                    |d}~ww xY w)z
        Performs a validation of the given token and returns its payload
        dictionary.

        Raises a `TokenBackendError` if the token is malformed, if its
        signature check fails, or if its 'exp' claim indicates it has expired.
        N)
verify_audverify_signature)r   r#   r$   r&   optionszInvalid algorithm specifiedr@   )rK   rN   rE   r    r#   r$   r<   r   r   r3   r   )r-   r=   rP   rD   s       r.   rN   zTokenBackend.decode   s    	N:&&u-- N+{(("&-t";(.     % 	N 	N 	N#A&C$D$DEE2M  	N 	N 	N#A&C$D$DEE2M	Ns$   AA 
B2&BB2B--B2)Nr   NNNNN)T)__name__
__module____qualname__strr   r	   r   r:   r9   r   r   jsonJSONEncoderr/   r*   r<   r   rE   r   r   rL   boolrN    r0   r.   r   r   "   s        &*/3 $!%599=) )) c]) 	)
 Xt+,) ) #) eS)T12) tD$456) 
) ) ) )6S T    "I    "
"u 
"# 
" 
" 
" 
"d38n     ,N NE N4 N4S> N N N N N Nr0   r   )rY   collections.abcr   datetimer   typingr   r   r   r   r	   rK   django.utils.translationr
   r3   r   r   r   
exceptionsr   tokensr   utilsr   r   r   r+   ImportErrorr2   r   r\   r0   r.   <module>re      sp    $ $ $ $ $ $       3 3 3 3 3 3 3 3 3 3 3 3 3 3 



 6 6 6 6 6 6 D D D D D D D D D D ) ) ) ) ) )            !11111111 ! ! ! !
 
 
 xN xN xN xN xN xN xN xN xN xNs   
A AA