
    fK2                    &   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ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 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 jB                  Z!e jD                  Z"e jF                  Z#y)    )annotationsN)timegm)Iterable)datetime	timedeltatimezone)TYPE_CHECKINGAnyList   )api_jws)DecodeErrorExpiredSignatureErrorImmatureSignatureErrorInvalidAudienceErrorInvalidIssuedAtErrorInvalidIssuerError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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     F/var/www/cs2snipe.com/venv/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g dS )NT)verify_signature
verify_exp
verify_nbf
verify_iat
verify_aud
verify_iss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	algorithmr0   r1   r2   
time_claimjson_payloads	            r    r:   zPyJWT.encode-   s     '4(,  ,,./ 	QJ'++j18<&,WZ-@-M-M-O&P
#	Q
 ++% , 
 ~~%
 	
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;   r0   r1   s       r    r9   zPyJWT._encode_payloadS   s)     zz!
 &/		r"   c
                   |
r4t        j                  dt        |
j                                t               t        |xs i       }|j                  dd       |#||d   k7  rt        j                  dt               |d   sZ|j                  dd       |j                  dd       |j                  d	d       |j                  d
d       |j                  dd       |d   r|st        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: r$   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.)categoryr%   Fr&   r'   r(   r)   z\It is required that you pass in a value for the "algorithms" argument when calling decode().)r<   
algorithmsr   detached_payload)audienceissuerleewayr;   )warningswarntuplekeysr   r4   
setdefaultDeprecationWarningr   r   decode_complete_decode_payloadr   _validate_claims)r   jwtr<   rI   r   verifyrJ   rK   rL   rM   kwargsdecodedr;   merged_optionss                 r    rT   zPyJWT.decode_completee   sk   $ MM'',V[[]';&<> '	 w}"%-t4
 &G4F,G"GMMY ,	 )*|U3|U3|U3|U3|U3%&zn  ))!-
 &&w/4DLL4G4^hvf 	 	
 %	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)rE   loads
ValueErrorr   r3   r4   )r   rZ   r;   es       r    rU   zPyJWT._decode_payload   s\    	>jj!34G '4(MNN	  	> 8<==	>s   7 	A AAc
                    |
r4t        j                  dt        |
j                                t               | j                  |||||||||		      }|d   S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: )rX   rJ   rK   rL   rM   r;   )rN   rO   rP   rQ   r   rT   )r   rW   r<   rI   r   rX   rJ   rK   rL   rM   rY   rZ   s               r    decodezPyJWT.decode   sr    $ 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             y y )Nz+audience must be a string, iterable or None)tzr.   r'   r/   r&   r-   r%   r)   r(   
strict_audFstrict)r3   r   total_secondsstrr   r5   _validate_required_claimsr   nowr   utc	timestamp_validate_iat_validate_nbf_validate_exp_validate_iss_validate_audr7   )r   r;   r   rK   rL   rM   rj   s          r    rV   zPyJWT._validate_claims   s    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   !r"   c                P    |d   D ]  }|j                  |      t        |       y )Nr*   )r7   r   )r   r;   r   claims       r    ri   zPyJWT._validate_required_claims  s2    
 Y' 	7E{{5!)/66	7r"   c                x    	 t        |d         }|||z   kD  rt        d      y # t        $ r t        d      w xY w)Nr.   z)Issued At claim (iat) must be an integer.z The token is not yet valid (iat))intr^   r   r   )r   r;   rj   rM   r.   s        r    rm   zPyJWT._validate_iat  sT    	Tgen%C #,()KLL    	T&'RSS	T   $ 9c                x    	 t        |d         }|||z   kD  rt        d      y # t        $ r t        d      w xY w)Nr/   z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))ru   r^   r   r   )r   r;   rj   rM   r/   s        r    rn   zPyJWT._validate_nbf  sT    	Lgen%C #,()KLL    	LJKK	Lrv   c                x    	 t        |d         }|||z
  k  rt        d      y # t        $ r t        d      w xY w)Nr-   z/Expiration Time claim (exp) must be an integer.zSignature has expired)ru   r^   r   r   )r   r;   rj   rM   r-   s        r    ro   zPyJWT._validate_exp'  sT    	Qgen%C 3< '(?@@ !  	QOPP	Qrv   Fre   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   )r3   rh   ).0cs     r    	<genexpr>z&PyJWT._validate_aud.<locals>.<genexpr>^  s     ?!:a%%?s   c              3  &   K   | ]  }|v 
 y wr   r+   )r|   rz   audience_claimss     r    r~   z&PyJWT._validate_aud.<locals>.<genexpr>d  s     >cs/)>s   zAudience doesn't match)r   r   r3   rh   listanyall)r   r;   rK   rf   r   s       @r    rq   zPyJWT._validate_aud5  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   |vrt        d      y |d   |k7  rt        d      y )NisszInvalid issuer)r   r3   r   r   )r   r;   rL   s      r    rp   zPyJWT._validate_issg  sc    >+E22fd#u~V+()9:: , u~'()9:: (r"   r   )r   dict[str, Any] | NonereturnNone)r   zdict[str, bool | list[str]])HS256NNT)r;   dict[str, Any]r<   z AllowedPrivateKeys | str | bytesr=   z
str | Noner0   r   r1   type[json.JSONEncoder] | Noner2   boolr   rh   )NN)r;   r   r0   r   r1   r   r   bytes) NNNNNNr   )rW   str | bytesr<   'AllowedPublicKeys | PyJWK | str | bytesrI   list[str] | Noner   r   rX   bool | NonerJ   bytes | NonerK   str | Iterable[str] | NonerL   str | List[str] | NonerM   float | timedeltarY   r
   r   r   )rZ   r   r   r
   )rW   r   r<   r   rI   r   r   r   rX   r   rJ   r   rK   r   rL   r   rM   r   rY   r
   r   r
   )NNr   )r;   r   r   r   rM   r   r   r   )r;   r   r   r   r   r   )r;   r   rj   floatrM   r   r   r   )r;   r   rK   r   rf   r   r   r   )r;   r   rL   r
   r   r   )__name__
__module____qualname__r!   staticmethodr   r:   r9   rT   rU   ra   rV   ri   rm   rn   ro   rq   rp   r+   r"   r    r   r      s   R
 	
 	
 !()-6:!$
$
 .$
 	$

 '$
 4$
 $
 
$
R *.6:	 ' 4	
 
* 8:'+)-")- 04)-$%CC 5C %	C
 'C C 'C -C 'C "C  !C" 
#CJ& 8:'+)-")- 04)-$%$"$" 5$" %	$"
 '$" $" '$" -$" '$" "$"  !$"" 
#$"T $%!!  ! "! 
!F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   rE   rN   calendarr   collections.abcr   r   r   r   typingr	   r
   r   r   r   
exceptionsr   r   r   r   r   r   r   r   rI   r   r   api_jwkr   r   _jwt_global_objr:   rT   ra   r+   r"   r    <module>r      sw    "    $ 2 2 + +    -AX; X;v
 '			!11			r"   