
    g8                    .   d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	m	Z	m
Z
mZ d dlmZmZ ddlmZ dd	lmZmZmZmZmZmZmZmZmZ dd
lmZ erddlmZmZ ddlm Z   G d d      Z! e!       Z"e"jF                  Z#e"jH                  Z$e"jJ                  Z%y)    )annotationsN)timegm)IterableSequence)datetime	timedeltatimezone)TYPE_CHECKINGAny   )api_jws)	DecodeErrorExpiredSignatureErrorImmatureSignatureErrorInvalidAudienceErrorInvalidIssuedAtErrorInvalidIssuerErrorInvalidJTIErrorInvalidSubjectErrorMissingRequiredClaimError)RemovedInPyjwt3Warning)AllowedPrivateKeysAllowedPublicKeys)PyJWKc                     e Zd ZdddZedd       Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 d	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ		 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ
	 	 	 	 d	 	 	 	 	 	 	 	 	 d d	Z	 	 	 	 	 	 d!d
Zdd"dZd"dZ	 	 	 	 	 	 	 	 d#dZ	 	 	 	 	 	 	 	 d#dZ	 	 	 	 	 	 	 	 d#dZdd	 	 	 	 	 	 	 d$dZd%dZy)&PyJWTNc                >    |i }i | j                         || _        y N)_get_default_optionsoptions)selfr    s     K/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/jwt/api_jwt.py__init__zPyJWT.__init__   s&    ?G'Q$*C*C*E'Q'Q    c            
         ddddddddg d	S )NT)	verify_signature
verify_exp
verify_nbf
verify_iat
verify_aud
verify_iss
verify_sub
verify_jtirequire r/   r$   r"   r   zPyJWT._get_default_options#   s)     !%

 
	
r$   c                B   t        |t              st        d      |j                         }dD ]A  }t        |j	                  |      t
              s#t        ||   j                               ||<   C | j                  |||      }t        j                  ||||||      S )NzGExpecting a dict object, as JWT only supports JSON objects as payloads.)expiatnbf)headersjson_encoder)sort_headers)
isinstancedict	TypeErrorcopygetr   r   utctimetuple_encode_payloadr   encode)	r!   payloadkey	algorithmr4   r5   r6   
time_claimjson_payloads	            r"   r>   zPyJWT.encode1   s     '4(,  ,,./J'++j18<&,WZ-@-M-M-O&P
# 0
 ++% , 
 ~~%
 	
r$   c                P    t        j                  |d|      j                  d      S )z
        Encode a given payload to the bytes to be signed.

        This method is intended to be overridden by subclasses that need to
        encode the payload in a different way, e.g. compress the payload.
        ),:)
separatorsclszutf-8)jsondumpsr>   )r!   r?   r4   r5   s       r"   r=   zPyJWT._encode_payloadW   s)     zz!
 &/		r$   c                   |r6t        j                  dt        |j                                t        d       t        |xs i       }|j                  dd       |$||d   k7  rt        j                  dt        d       |d   s~|j                  dd	       |j                  d
d	       |j                  dd	       |j                  dd	       |j                  dd	       |j                  dd	       |j                  dd	       t        j                  |||||      }| j                  |      }i | j                  |}| j                  |||||
|	       ||d<   |S )Nzypassing additional kwargs to decode_complete() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs:    
stacklevelr&   TzThe `verify` argument to `decode` does nothing in PyJWT 2.0 and newer. The equivalent is setting `verify_signature` to False in the `options` dictionary. This invocation has a mismatch between the kwarg and the option entry.)categoryrN   r'   Fr(   r)   r*   r+   r,   r-   )r@   
algorithmsr    detached_payload)audienceissuerleewaysubjectr?   )warningswarntuplekeysr   r8   
setdefaultDeprecationWarningr   decode_complete_decode_payloadr    _validate_claims)r!   jwtr@   rP   r    verifyrQ   rR   rS   rU   rT   kwargsdecodedr?   merged_optionss                  r"   r\   zPyJWT.decode_completei   s{   & MM'',V[[]';&<> ' w}"%-t4
 &G4F,G"GMMY , )*|U3|U3|U3|U3|U3|U3|U3))!-
 &&w/4DLL4G4 	 	
 %	r$   c                    	 t        j                  |d         }t	        |t
              st        d      |S # t        $ r}t        d|       |d}~ww xY w)a  
        Decode the payload from a JWS dictionary (payload, signature, header).

        This method is intended to be overridden by subclasses that need to
        decode the payload in a different way, e.g. decompress compressed
        payloads.
        r?   zInvalid payload string: Nz-Invalid payload string: must be a json object)rI   loads
ValueErrorr   r7   r8   )r!   rb   r?   es       r"   r]   zPyJWT._decode_payload   sa    	Ejj!34G '4(MNN	  	E 8<=1D	Es   7 	A AAc                    |r6t        j                  dt        |j                                t        d       | j                  |||||||||	|

      }|d   S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: rL   rM   )r`   rQ   rR   rU   rS   rT   r?   )rV   rW   rX   rY   r   r\   )r!   r_   r@   rP   r    r`   rQ   rR   rU   rS   rT   ra   rb   s                r"   decodezPyJWT.decode   sx    & MM'',V[[]';&<> ' &&- ' 
 y!!r$   c                   t        |t              r|j                         }|!t        |t        t        f      st        d      | j                  ||       t        j                  t        j                        j                         }d|v r|d   r| j                  |||       d|v r|d   r| j                  |||       d|v r|d   r| j                  |||       |d	   r| j                  ||       |d
   r$| j!                  |||j#                  dd             |d   r| j%                  ||       |d   r| j'                  |       y y )Nz+audience must be a string, iterable or None)tzr2   r)   r3   r(   r1   r'   r+   r*   
strict_audFstrictr,   r-   )r7   r   total_secondsstrr   r9   _validate_required_claimsr   nowr	   utc	timestamp_validate_iat_validate_nbf_validate_exp_validate_iss_validate_audr;   _validate_sub_validate_jti)r!   r?   r    rR   rS   rU   rT   rr   s           r"   r^   zPyJWT._validate_claims   sC    fi())+F
8c8_(MIJJ&&w8llhll+557G 5wV4G 5wV4G 5wV4< w/< '++lE*J   < w0< w' !r$   c                P    |d   D ]  }|j                  |      t        |       y )Nr.   )r;   r   )r!   r?   r    claims       r"   rq   zPyJWT._validate_required_claims  s-    
 Y'E{{5!)/66 (r$   c                    d|vryt        |d   t              st        d      | |j                  d      |k7  rt        d      yy)z
        Checks whether "sub" if in the payload is valid ot not.
        This is an Optional claim

        :param payload(dict): The payload which needs to be validated
        :param subject(str): The subject of the token
        subNzSubject must be a stringzInvalid subject)r7   rp   r   r;   )r!   r?   rU   s      r"   rz   zPyJWT._validate_sub  sV     '%.#.%&@AA{{5!W,)*;<< - r$   c                b    d|vryt        |j                  d      t              st        d      y)z
        Checks whether "jti" if in the payload is valid ot not
        This is an Optional claim

        :param payload(dict): The payload which needs to be validated
        jtiNzJWT ID must be a string)r7   r;   rp   r   )r!   r?   s     r"   r{   zPyJWT._validate_jti2  s3     '++e,c2!";<< 3r$   c                z    	 t        |d         }|||z   kD  rt        d      y # t        $ r t        d      d w xY w)Nr2   z)Issued At claim (iat) must be an integer.z The token is not yet valid (iat))intrf   r   r   )r!   r?   rr   rT   r2   s        r"   ru   zPyJWT._validate_iat@  sX    	gen%C
 #,()KLL  	  	&;	   $ :c                z    	 t        |d         }|||z   kD  rt        d      y # t        $ r t        d      d w xY w)Nr3   z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))r   rf   r   r   )r!   r?   rr   rT   r3   s        r"   rv   zPyJWT._validate_nbfO  sW    	Vgen%C #,()KLL    	VJKQUU	Vr   c                z    	 t        |d         }|||z
  k  rt        d      y # t        $ r t        d      d w xY w)Nr1   z/Expiration Time claim (exp) must be an integer.zSignature has expired)r   rf   r   r   )r!   r?   rr   rT   r1   s        r"   rw   zPyJWT._validate_exp]  sX    	gen%C 3< '(?@@ !  	A	r   Frm   c                  |d|vs|d   sy t        d      d|vs|d   st        d      |d   |rGt        |t              st        d      t        t              st        d      |k7  rt        d      y t        t              rgt        t              st        d      t        d D              rt        d      t        |t              r|g}t        fd|D              rt        d	      y )
NaudzInvalid audiencezInvalid audience (strict)z&Invalid claim format in token (strict)zAudience doesn't match (strict)zInvalid claim format in tokenc              3  >   K   | ]  }t        |t                 y wr   )r7   rp   ).0cs     r"   	<genexpr>z&PyJWT._validate_aud.<locals>.<genexpr>  s     ?!:a%%s   c              3  &   K   | ]  }|v 
 y wr   r/   )r   r   audience_claimss     r"   r   z&PyJWT._validate_aud.<locals>.<genexpr>  s     >Xcs/)Xs   zAudience doesn't match)r   r   r7   rp   listanyall)r!   r?   rR   rn   r   s       @r"   ry   zPyJWT._validate_audm  s
    G#75> ''9::wu~ ,E22!%. h,*+FGG os3*+STT?**+LMMos+./O/40&'FGG???&'FGGh$ zH>X>>&'?@@ ?r$   c                    |y d|vrt        d      t        |t              r|d   |k7  rt        d      y |d   |vrt        d      y )NisszInvalid issuer)r   r7   rp   r   )r!   r?   rS   s      r"   rx   zPyJWT._validate_iss  sc    >+E22fc"u~'()9:: ( u~V+()9:: ,r$   r   )r    dict[str, Any] | NonereturnNone)r   zdict[str, bool | list[str]])NNNT)r?   dict[str, Any]r@   z(AllowedPrivateKeys | PyJWK | str | bytesrA   
str | Noner4   r   r5   type[json.JSONEncoder] | Noner6   boolr   rp   )NN)r?   r   r4   r   r5   r   r   bytes)	 NNNNNNNr   )r_   str | bytesr@   'AllowedPublicKeys | PyJWK | str | bytesrP   Sequence[str] | Noner    r   r`   bool | NonerQ   bytes | NonerR   str | Iterable[str] | NonerS   str | Sequence[str] | NonerU   r   rT   float | timedeltara   r   r   r   )rb   r   r   r   )r_   r   r@   r   rP   r   r    r   r`   r   rQ   r   rR   r   rU   r   rS   r   rT   r   ra   r   r   r   )NNNr   )
r?   r   r    r   rU   r   rT   r   r   r   )r?   r   r    r   r   r   )r?   r   r   r   )r?   r   rr   floatrT   r   r   r   )r?   r   rR   r   rn   r   r   r   )r?   r   rS   r   r   r   )__name__
__module____qualname__r#   staticmethodr   r>   r=   r\   r]   ri   r^   rq   rz   r{   ru   rv   rw   ry   rx   r/   r$   r"   r   r      s)   R
 
 
" !%)-6:!$
$
 6$
 	$

 '$
 4$
 $
 
$
R *.6:	 ' 4	
 
* 8:+/)-")- 04-1"$%HH 5H )	H
 'H H 'H -H +H H "H" #H$ 
%HT& 8:+/)-")- 04"-1$%'"'" 5'" )	'"
 ''" '" ''" -'" '" +'" "'"" #'"$ 
%'"Z "$%((((  (( (( "(( 
((T77  7 
	7=&=MM M 	M
 
MMM M 	M
 
MAA A 	A
 
A* 0A0A -0A
 0A 
0Ad;r$   r   )&
__future__r   rI   rV   calendarr   collections.abcr   r   r   r   r	   typingr
   r   r   r   
exceptionsr   r   r   r   r   r   r   r   r   r   rP   r   r   api_jwkr   r   _jwt_global_objr>   r\   ri   r/   r$   r"   <module>r      st    "    . 2 2 % 
 
 
 -AN; N;b '			!11			r$   