
    !h:                         d dl Z d dlmZ d dl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mZ d
Zh dZ G d d      Zy# e$ r dZY w xY w)    N)	timedelta)OptionalTypeUnion)gettext_lazy)InvalidAlgorithmErrorInvalidTokenError
algorithms   )TokenBackendError)format_lazy)PyJWKClientPyJWKClientErrorTF>	   ES256ES384ES512HS256HS384HS512RS256RS384RS512c            	           e Zd Z	 	 	 	 	 	 	 ddedeeeef   dee	e
j                        fdZd ZdefdZd	 Zd
 ZddZy)TokenBackendNjwk_urlleewayjson_encoderc	                     | j                  |       || _        || _        || _        || _        || _        t        r|rt        |      nd | _        nd | _        || _	        || _
        y )N)_validate_algorithm	algorithmsigning_keyverifying_keyaudienceissuerJWK_CLIENT_AVAILABLEr   jwks_clientr   r   )	selfr    r!   r"   r#   r$   r   r   r   s	            a/var/www/html/Ryun_Seer/newvenv/lib/python3.12/site-packages/rest_framework_simplejwt/backends.py__init__zTokenBackend.__init__!   sb     	  +"&* 7>{73DD#D(    c                     |t         vrt        t        t        d      |            |t        j
                  v r/t        j                  st        t        t        d      |            yy)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<   sl    
 ..#A@A9M  
888AVAV#GH)  BW8r*   returnc                 L   | 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   r-   type)r'   s    r(   
get_leewayzTokenBackend.get_leewayM   s~    ;;Q''c5\2T[[11Y/;;#c %	 r*   c                    | j                   j                  d      r| j                  S | j                  r&	 | j                  j	                  |      j
                  S | j                  S # t        $ r}t        t        d            |d }~ww xY w)NHSToken is invalid or expired)
r    
startswithr!   r&   get_signing_key_from_jwtkeyr   r   r-   r"   )r'   tokenexs      r(   get_verifying_keyzTokenBackend.get_verifying_key^   s    >>$$T*###R''@@GKKK !!! $ R'*G(HIrQRs   $A& &	B	/BB	c                 B   |j                         }| j                  | j                  |d<   | j                  | j                  |d<   t        j                  || j
                  | j                  | j                        }t        |t              r|j                  d      S |S )zL
        Returns an encoded token for the given payload dictionary.
        audiss)r    r   zutf-8)copyr#   r$   jwtencoder!   r    r   r3   bytesdecode)r'   payloadjwt_payloadr>   s       r(   rF   zTokenBackend.encodej   s     lln==$!%K;;"!%K

nn**	
 eU#<<((r*   c                 `   	 t        j                  || j                  |      | j                  g| j                  | 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:   )rE   rH   r@   r    r#   r$   r7   r   r   r-   r	   )r'   r>   verifyr?   s       r(   rH   zTokenBackend.decode   s    	N::&&u- NN+{{("&--t";(.  % 	N#A&C$DE2M  	N#A&C$DE2M	Ns$   A&A) )	B-2BB-B((B-)N NNNNN)T)__name__
__module____qualname__strr   r5   r4   r   r   r   jsonJSONEncoderr)   r   r7   r@   rF   rH    r*   r(   r   r       sy     /39=) ) eS)+,) tD$4$456)6"I "
",Nr*   r   )rU   datetimer   typingr   r   r   rE   django.utils.translationr   r-   r   r	   r
   
exceptionsr   utilsr   r   r   r%   ImportErrorr,   r   rW   r*   r(   <module>r^      s^      ( ( 
 6 D D ) !1
 xN xN!  ! !s   
A AA