
    Aah8                       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"j#        Z#e"j$        Z$e"j%        Z%dS )    )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dAd            Z	 	 	 	 dBdCdZ	 	 dDdEdZ	 	 	 	 	 	 	 	 	 dFdGd-ZdHd/Z		 	 	 	 	 	 	 	 	 dFdId0Z
	 	 	 	 dJdKd1ZdLd2Zd?dMd3ZdMd4ZdNd7ZdNd8ZdNd9Zd:d;dOd=ZdPd>ZdS )QPyJWTNoptionsdict[str, Any] | NonereturnNonec                H    |i }i |                                  || _        d S N)_get_default_optionsr   )selfr   s     =/var/www/lms/venv/lib/python3.11/site-packages/jwt/api_jwt.py__init__zPyJWT.__init__   s-    ?G'Q$*C*C*E*E'Q'Q    dict[str, bool | list[str]]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 r3   r'   r%   r#   zPyJWT._get_default_options#   s.     !%

 

 
	
r'   Tpayloaddict[str, Any]key(AllowedPrivateKeys | PyJWK | str | bytes	algorithm
str | Noneheadersjson_encodertype[json.JSONEncoder] | Nonesort_headersboolstrc                   t          |t                    st          d          |                                }dD ]T}t          |                    |          t
                    r*t          ||                                                   ||<   U|                     |||          }t          j
        ||||||          S )NzGExpecting a dict object, as JWT only supports JSON objects as payloads.)expiatnbf)r:   r;   )r=   )
isinstancedict	TypeErrorcopygetr   r   utctimetuple_encode_payloadr   encode)	r$   r4   r6   r8   r:   r;   r=   
time_claimjson_payloads	            r%   rK   zPyJWT.encode1   s     '4(( 	,   ,,../ 	Q 	QJ'++j118<< Q&,WZ-@-M-M-O-O&P&P
#++% , 
 
 ~%
 
 
 	
r'   bytesc                V    t          j        |d|                              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dumpsrK   )r$   r4   r:   r;   s       r%   rJ   zPyJWT._encode_payloadW   s3     z!
 
 
 &//		r'    r   jwtstr | bytes'AllowedPublicKeys | PyJWK | str | bytes
algorithmsSequence[str] | Noneverifybool | Nonedetached_payloadbytes | Noneaudiencestr | Iterable[str] | Noneissuerstr | Sequence[str] | Nonesubjectleewayfloat | timedeltakwargsr   c                   |r>t          j        dt          |                                           t          d           t          |pi           }|                    dd           |(||d         k    rt          j        dt          d           |d         s|                    dd	           |                    d
d	           |                    dd	           |                    dd	           |                    dd	           |                    dd	           |                    dd	           t          j	        |||||          }| 
                    |          }i | 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.)categoryrk   r+   Fr,   r-   r.   r/   r0   r1   )r6   rZ   r   r^   )r`   rb   re   rd   r4   )warningswarntuplekeysr   rE   
setdefaultDeprecationWarningr   decode_complete_decode_payloadr   _validate_claims)r$   rW   r6   rZ   r   r\   r^   r`   rb   rd   re   rg   decodedr4   merged_optionss                  r%   rs   zPyJWT.decode_completei   s   &  	M>',V[[]]';';> > '    w}"%%-t444
 &G4F,G"G"GMY ,    )* 	4|U333|U333|U333|U333|U333|U333|U333)!-
 
 
 &&w//4DL4G4 	 	
 	
 	
 %	r'   rv   c                    	 t          j        |d                   }n%# t          $ r}t          d|           |d}~ww xY wt	          |t
                    st          d          |S )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.
        r4   zInvalid payload string: Nz-Invalid payload string: must be a json object)rT   loads
ValueErrorr   rD   rE   )r$   rv   r4   es       r%   rt   zPyJWT._decode_payload   s    	Ej!344GG 	E 	E 	E<<<==1D	E'4(( 	OMNNNs    
?:?c                    |r>t          j        dt          |                                           t          d           |                     |||||||||	|

  
        }|d         S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: ri   rj   )r\   r^   r`   rd   rb   re   r4   )rm   rn   ro   rp   r   rs   )r$   rW   r6   rZ   r   r\   r^   r`   rd   rb   re   rg   rv   s                r%   decodezPyJWT.decode   s    &  	M>',V[[]]';';> > '    &&- ' 
 
 y!!r'   c                0   t          |t                    r|                                }|+t          |t          t          f          st          d          |                     ||           t          j        t          j
                                                  }d|v r|d         r|                     |||           d|v r|d         r|                     |||           d|v r|d         r|                     |||           |d	         r|                     ||           |d
         r,|                     |||                    dd                     |d         r|                     ||           |d         r|                     |           d S d S )Nz+audience must be a string, iterable or None)tzrB   r-   rC   r,   rA   r+   r/   r.   
strict_audFstrictr0   r1   )rD   r   total_secondsr?   r   rF   _validate_required_claimsr   nowr	   utc	timestamp_validate_iat_validate_nbf_validate_exp_validate_iss_validate_audrH   _validate_sub_validate_jti)r$   r4   r   r`   rb   rd   re   r   s           r%   ru   zPyJWT._validate_claims   s    fi(( 	,))++F
8c8_(M(MIJJJ&&w888lhl+++5577G 5wV444G 5wV444G 5wV444<  	0w///<  	'++lE*J*J     <  	1w000<  	(w'''''	( 	(r'   c                d    |d         D ]&}|                     |          t          |          'd S )Nr2   )rH   r   )r$   r4   r   claims       r%   r   zPyJWT._validate_required_claims  sG    
 Y' 	7 	7E{{5!!)/666 *	7 	7r'   c                    d|vrdS t          |d         t                    st          d          |(|                    d          |k    rt          d          dS dS )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)rD   r?   r   rH   )r$   r4   rd   s      r%   r   zPyJWT._validate_sub  st     F'%.#.. 	B%&@AAA{{5!!W,,)*;<<< ,,r'   c                    d|vrdS t          |                    d          t                    st          d          dS )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)rD   rH   r?   r   )r$   r4   s     r%   r   zPyJWT._validate_jti2  sK     F'++e,,c22 	=!";<<<	= 	=r'   r   floatc                    	 t          |d                   }n# t          $ r t          d          d w xY w|||z   k    rt          d          d S )NrB   z)Issued At claim (iat) must be an integer.z The token is not yet valid (iat))intrz   r   r   )r$   r4   r   re   rB   s        r%   r   zPyJWT._validate_iat@  su    	gen%%CC 	 	 	&; 	 #,()KLLL      3c                    	 t          |d                   }n# t          $ r t          d          d w xY w|||z   k    rt          d          d S )NrC   z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))r   rz   r   r   )r$   r4   r   re   rC   s        r%   r   zPyJWT._validate_nbfO  st    	Vgen%%CC 	V 	V 	VJKKQUU	V #,()KLLL  r   c                    	 t          |d                   }n# t          $ r t          d          d w xY w|||z
  k    rt          d          d S )NrA   z/Expiration Time claim (exp) must be an integer.zSignature has expired)r   rz   r   r   )r$   r4   r   re   rA   s        r%   r   zPyJWT._validate_exp]  su    	gen%%CC 	 	 	A 	
 3<  '(?@@@ ! r   Fr   r   c                  |d|vs|d         sd S t          d          d|vs|d         st          d          |d         |r_t          |t                    st          d          t          t                    st          d          |k    rt          d          d S 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	          d S )
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  B   K   | ]}t          |t                     V  d S r"   )rD   r?   ).0cs     r%   	<genexpr>z&PyJWT._validate_aud.<locals>.<genexpr>  s/      ??!:a%%%??????r'   c              3      K   | ]}|vV  	d S r"   r3   )r   r   audience_claimss     r%   r   z&PyJWT._validate_aud.<locals>.<genexpr>  s(      >>cs/)>>>>>>r'   zAudience doesn't match)r   r   rD   r?   listanyall)r$   r4   r`   r   r   s       @r%   r   zPyJWT._validate_audm  s    G##75># ''9:::wu~ ,E222!%.  	h,, H*+FGGG os33 U*+STTT?***+LMMMFos++ 	0./O/400 	H&'FGGG??????? 	H&'FGGGh$$ 	" zH>>>>X>>>>> 	A&'?@@@	A 	Ar'   c                    |d S d|vrt          d          t          |t                    r|d         |k    rt          d          d S |d         |vrt          d          d S )NisszInvalid issuer)r   rD   r?   r   )r$   r4   rb   s      r%   r   zPyJWT._validate_iss  s    >F+E222fc"" 	;u~''()9::: (' u~V++()9::: ,+r'   r"   )r   r   r   r    )r   r(   )NNNT)r4   r5   r6   r7   r8   r9   r:   r   r;   r<   r=   r>   r   r?   )NN)r4   r5   r:   r   r;   r<   r   rN   )	rV   NNNNNNNr   )rW   rX   r6   rY   rZ   r[   r   r   r\   r]   r^   r_   r`   ra   rb   rc   rd   r9   re   rf   rg   r   r   r5   )rv   r5   r   r   )rW   rX   r6   rY   rZ   r[   r   r   r\   r]   r^   r_   r`   ra   rd   r9   rb   rc   re   rf   rg   r   r   r   )NNNr   )
r4   r5   r   r5   rd   r9   re   rf   r   r    )r4   r5   r   r5   r   r    )r4   r5   r   r    )r4   r5   r   r   re   r   r   r    )r4   r5   r`   ra   r   r>   r   r    )r4   r5   rb   r   r   r    )__name__
__module____qualname__r&   staticmethodr#   rK   rJ   rs   rt   r}   ru   r   r   r   r   r   r   r   r   r3   r'   r%   r   r      s       R R R R R
 
 
 
 \
" !%)-6:!$
 $
 $
 $
 $
R *.6:	    * 8:+/)-")- 04-1"$%H H H H HT   & 8:+/)-")- 04"-1$%'" '" '" '" '"Z "$%(( (( (( (( ((T7 7 7 7= = = = =&= = = =M M M MM M M MA A A A* 0A 0A 0A 0A 0A 0Ad; ; ; ; ; ;r'   r   )&
__future__r   rT   rm   calendarr   collections.abcr   r   r   r   r	   typingr
   r   rV   r   
exceptionsr   r   r   r   r   r   r   r   r   r   rZ   r   r   api_jwkr   r   _jwt_global_objrK   rs   r}   r3   r'   r%   <module>r      s   " " " " " "         . . . . . . . . 2 2 2 2 2 2 2 2 2 2 % % % % % % % %      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 - , , , , , AAAAAAAAN; N; N; N; N; N; N; N;b %''		!1		r'   