
    Vwgm                     
   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h dj9                  ej:                        Z G d d      Zy# e$ r dZY 1w xY w)    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                       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y)TokenBackendN	algorithmsigning_keyverifying_keyaudienceissuerjwk_urlleewayjson_encoderreturnc	                     | j                  |       || _        || _        || _        || _        || _        t        r|rt        |      nd | _        nd | _        || _	        || _
        y )N)_validate_algorithmr   r    r!   r"   r#   JWK_CLIENT_AVAILABLEr   jwks_clientr%   r&   )	selfr   r    r!   r"   r#   r$   r%   r&   s	            X/var/www/horilla/myenv/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/   c                 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   r2   type)r,   s    r-   
get_leewayzTokenBackend.get_leewayO   s~    ;;Q''c5\2T[[11Y/;;#c %	 r/   tokenc                    | 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   r2   r!   )r,   r<   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	payloadc                 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&   r7   bytesdecode)r,   rE   jwt_payloadr<   s       r-   rK   zTokenBackend.encodel   s     lln==$!%K;;"!%K

nn**	
 eU#<<((r/   verifyc                 `   	 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?   )rJ   rM   rD   r   r"   r#   r;   r   r   r2   r   )r,   r<   rO   rC   s       r-   rM   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   r	   r   r9   r8   r   r   jsonJSONEncoderr.   r)   r;   r   rD   r   r   rK   boolrM    r/   r-   r   r   "   s#    &*/3 $!%599=)) c]) 	)
 Xt+,) ) #) eS)T12) tD$4$456) 
)6S T "I "
"u 
"# 
"d38n  ,NE N4 N4S> Nr/   r   ) rY   collections.abcr   datetimer   typingr   r   r   r   r	   rJ   django.utils.translationr
   r2   r   r   r   
exceptionsr   tokensr   utilsr   r   r   r*   ImportErrorunionr3   r1   r   r\   r/   r-   <module>rf      sx     $  3 3 
 6 D D )  !1
 %
(() xN xN!  ! !s   
A8 8BB