
    -he                        S SK r S SKJr  S SKJr  S SKJr  S SKJrJ	r	J
r
  S SKrS SKJr  S SKJrJrJrJr  SS	KJrJr  SS
KJr  SSKJr   S SKJrJr  Sr1 SkR=                  \R>                  5      r  " S S5      r!g! \ a    Sr N2f = f)    N)Iterable)	timedelta)cached_property)AnyOptionalUnion)gettext_lazy)ExpiredSignatureErrorInvalidAlgorithmErrorInvalidTokenError
algorithms   )TokenBackendErrorTokenBackendExpiredToken)Token)format_lazy)PyJWKClientPyJWKClientErrorTF>	   ES256ES384ES512HS256HS384HS512RS256RS384RS512c                   Z   \ rS rSr       SS\S\\   S\S\\\S4   S\\   S\\   S	\\\	\
S4   S
\\\R                        SS4S jjr\S\4S j5       r\S\4S j5       rS\\   S\4S jrS\SS4S jrS\
4S jrS\S\4S jrS\\\4   S\4S jrSS\S\S\\\4   4S jjrSrg)TokenBackend(   N	algorithmsigning_keyverifying_keyaudienceissuerjwk_urlleewayjson_encoderreturnc	                     U R                  U5        Xl        X l        X0l        X@l        XPl        [        (       a  U(       a  [        U5      OS U l        OS U l        Xpl	        Xl
        g N)_validate_algorithmr!   r"   r#   r$   r%   JWK_CLIENT_AVAILABLEr   jwks_clientr'   r(   )	selfr!   r"   r#   r$   r%   r&   r'   r(   s	            \/var/www/html/Ai_home/venv/lib/python3.13/site-packages/rest_framework_simplejwt/backends.py__init__TokenBackend.__init__)   sW     	  +"&* 7>{73DD#D(    c                 8    U R                  U R                  5      $ r+   )_prepare_keyr"   r/   s    r0   prepared_signing_key!TokenBackend.prepared_signing_keyD   s      !1!122r3   c                 8    U R                  U R                  5      $ r+   )r5   r#   r6   s    r0   prepared_verifying_key#TokenBackend.prepared_verifying_keyH   s      !3!344r3   keyc                     Ub   [        [        R                  SS 5      (       d  U$ [        R                  " 5       R                  U R                  5      nUR                  U5      $ )Nget_algorithm_by_name)getattrjwtPyJWSr>   r!   prepare_key)r/   r<   jws_algs      r0   r5   TokenBackend._prepare_keyL   sJ    ;gcii1H$OOJ))+33DNNC""3''r3   c                     U[         ;  a  [        [        [        S5      U5      5      eU[        R
                  ;   a4  [        R                  (       d  [        [        [        S5      U5      5      egg)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     r0   r,    TokenBackend._validate_algorithmS   sl    
 ..#A@A9M  
888AVAV#GH)  BW8r3   c                 V   U R                   c	  [        SS9$ [        U R                   [        [        45      (       a  [        U R                   S9$ [        U R                   [        5      (       a  U R                   $ [        [        [        S5      [        U R                   5      5      5      e)Nr   )secondszIUnrecognized type '{}', 'leeway' must be of type int, float or timedelta.)	r'   r   
isinstanceintfloatr   r   rG   typer6   s    r0   
get_leewayTokenBackend.get_leewayd   s    ;;Q''c5\22T[[11Y//;;#c %	 r3   tokenc                 .   U R                   R                  S5      (       a  U R                  $ U R                  (       a&   U R                  R	                  U5      R
                  $ U R                  $ ! [         a  n[        [        S5      5      UeS nAff = f)NHSToken is invalid)
r!   
startswithr7   r.   get_signing_key_from_jwtr<   r   r   rG   r:   )r/   rS   es      r0   get_verifying_keyTokenBackend.get_verifying_keyu   s    >>$$T**,,,F''@@GKKK *** $ F'*<(=>AEFs   $A0 0
B:BBpayloadc                 L   UR                  5       nU R                  b  U R                  US'   U R                  b  U R                  US'   [        R                  " UU R
                  U R                  U R                  S9n[        U[        5      (       a  UR                  S5      $ U$ )z<
Returns an encoded token for the given payload dictionary.
audiss)r!   r(   zutf-8)copyr$   r%   r@   encoder7   r!   r(   rM   bytesdecode)r/   r\   jwt_payloadrS   s       r0   ra   TokenBackend.encode   s     lln==$!%K;;"!%K

%%nn**	
 eU##<<((r3   verifyc                     [         R                  " UU R                  U5      U R                  /U R                  U R
                  U R                  5       U R                  SLUS.S9$ ! [         a  n[        [        S5      5      UeSnAf[         a  n[        [        S5      5      UeSnAf[         a  n[        [        S5      5      UeSnAff = f)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 specifiedzToken is expiredrV   )r@   rc   rZ   r!   r$   r%   rQ   r   r   rG   r
   r   r   )r/   rS   rf   rY   s       r0   rc   TokenBackend.decode   s    	B::&&u- NN+{{("&--t";(.  % 	M#A&C$DE1L$ 	I*1-?+@AqH  	B#A&8$9:A	Bs0   A$A' '
C1BCB((C5C

C)r!   r$   r%   r(   r.   r'   r"   r#   )N NNNNN)T)__name__
__module____qualname____firstlineno__strr   r   r   rO   rN   r   rP   jsonJSONEncoderr1   r   r   r7   r:   r5   r,   rQ   r   rZ   dictra   boolrc   __static_attributes__ r3   r0   r   r   (   sr    &*/3 $!%599=)) c]) 	)
 Xt+,) ) #) eS)T12) tD$4$456) 
)6 3c 3 3 5 5 5( (# (S T "I "
+u 
+ 
+d38n  ,BE B4 B4S> B Br3   r   )"rr   collections.abcr   datetimer   	functoolsr   typingr   r   r   r@   django.utils.translationr	   rG   r
   r   r   r   
exceptionsr   r   tokensr   utilsr   r   r   r-   ImportErrorunionrH   rF   r   rw   r3   r0   <module>r      s     $  % ' ' 
 6  D  !1
 %
(() IB IB!  ! !s   
A> >B	B	