
    [h^1                       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 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  G d d          Z e            Zej        Zej        Zej         Z dS )    )annotationsN)timegm)Iterable)datetime	timedeltatimezone)TYPE_CHECKINGAny   )api_jws)DecodeErrorExpiredSignatureErrorImmatureSignatureErrorInvalidAudienceErrorInvalidIssuedAtErrorInvalidIssuerErrorMissingRequiredClaimError)RemovedInPyjwt3Warning)AllowedPrivateKeysAllowedPublicKeysc                      e Zd Zd<d=dZed>d            Z	 	 	 	 d?d@dZ	 	 dAdBdZ	 	 	 	 	 	 	 	 dCdDd,ZdEd.Z		 	 	 	 	 	 	 	 dCdFd/Z
	 	 	 dGdHd0ZdId1ZdJd4ZdJd5ZdJd6Zd7d8dKd:ZdLd;ZdS )MPyJWTNoptionsdict[str, Any] | NonereturnNonec                H    |i }i |                                  || _        d S N)_get_default_optionsr   )selfr   s     Z/var/www/api.easyaligner.net/htdocs/venv_linux/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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#   HS256Tpayloaddict[str, Any]key AllowedPrivateKeys | 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)r5   r6   )r8   )
isinstancedict	TypeErrorcopygetr   r   utctimetuple_encode_payloadr   encode)	r    r/   r1   r3   r5   r6   r8   
time_claimjson_payloads	            r!   rF   zPyJWT.encode,   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dumpsrF   )r    r/   r5   r6   s       r!   rE   zPyJWT._encode_payloadR   s3     z!
 
 
 &//		r#    r   jwtstr | bytesAllowedPublicKeys | str | bytes
algorithmslist[str] | Noneverifybool | Nonedetached_payloadbytes | Noneaudiencestr | Iterable[str] | Noneissuerleewayfloat | timedeltakwargsr
   c
                   |
r<t          j        dt          |
                                           t                     t          |pi           }|                    dd           |'||d         k    rt          j        dt                     |d         sn|                    dd           |                    dd           |                    d	d           |                    d
d           |                    dd           |d         r|st          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: 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().)r1   rU   r   rY   )r[   r]   r^   r/   )warningswarntuplekeysr   r@   
setdefaultDeprecationWarningr   r   decode_complete_decode_payloadr   _validate_claims)r    rR   r1   rU   r   rW   rY   r[   r]   r^   r`   decodedr/   merged_optionss                 r!   ri   zPyJWT.decode_completed   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%& 	z 	n   )!-
 
 
 &&w//4DL4G4^hvf 	 	
 	
 	
 %	r#   rl   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.
        r/   zInvalid payload string: Nz-Invalid payload string: must be a json object)rO   loads
ValueErrorr   r?   r@   )r    rl   r/   es       r!   rj   zPyJWT._decode_payload   sz    	>j!344GG 	> 	> 	><<<===	>'4(( 	OMNNNs    
>9>c
                    |
r<t          j        dt          |
                                           t                     |                     |||||||||		  	        }|d         S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: )rW   rY   r[   r]   r^   r/   )rc   rd   re   rf   r   ri   )r    rR   r1   rU   r   rW   rY   r[   r]   r^   r`   rl   s               r!   decodezPyJWT.decode   s    $  	M>',V[[]]';';> > '	   &&- ' 

 

 y!!r#   c                   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 S d S )Nz+audience must be a string, iterable or None)tzr=   r)   r>   r(   r<   r'   r+   r*   
strict_audFstrict)r?   r   total_secondsr:   r   rA   _validate_required_claimsr   nowr   utc	timestamp_validate_iat_validate_nbf_validate_exp_validate_iss_validate_audrC   )r    r/   r   r[   r]   r^   r{   s          r!   rk   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      	 	r#   c                d    |d         D ]&}|                     |          t          |          'd S )Nr,   )rC   r   )r    r/   r   claims       r!   rz   zPyJWT._validate_required_claims  sG    
 Y' 	7 	7E{{5!!)/666 *	7 	7r#   r{   floatc                    	 t          |d                   }n# t          $ r t          d          w xY w|||z   k    rt          d          d S )Nr=   z)Issued At claim (iat) must be an integer.z The token is not yet valid (iat))intrp   r   r   )r    r/   r{   r^   r=   s        r!   r~   zPyJWT._validate_iat  so    	Tgen%%CC 	T 	T 	T&'RSSS	T#,()KLLL      2c                    	 t          |d                   }n# t          $ r t          d          w xY w|||z   k    rt          d          d S )Nr>   z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))r   rp   r   r   )r    r/   r{   r^   r>   s        r!   r   zPyJWT._validate_nbf  sq    	Lgen%%CC 	L 	L 	LJKKK	L #,()KLLL  r   c                    	 t          |d                   }n# t          $ r t          d          w xY w|||z
  k    rt          d          d S )Nr<   z/Expiration Time claim (exp) must be an integer.zSignature has expired)r   rp   r   r   )r    r/   r{   r^   r<   s        r!   r   zPyJWT._validate_exp&  sq    	Tgen%%CC 	T 	T 	TRSSS	T 3<  '(?@@@ ! r   Frw   rx   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   )r?   r:   ).0cs     r!   	<genexpr>z&PyJWT._validate_aud.<locals>.<genexpr>]  s/      ??!:a%%%??????r#   c              3      K   | ]}|vV  	d S r   r-   )r   r   audience_claimss     r!   r   z&PyJWT._validate_aud.<locals>.<genexpr>c  s(      >>cs/)>>>>>>r#   zAudience doesn't match)r   r   r?   r:   listanyall)r    r/   r[   rx   r   s       @r!   r   zPyJWT._validate_aud4  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                j    |d S d|vrt          d          |d         |k    rt          d          d S )NisszInvalid issuer)r   r   )r    r/   r]   s      r!   r   zPyJWT._validate_issf  sK    >F+E2225>V##$%5666 $#r#   r   )r   r   r   r   )r   r$   )r.   NNT)r/   r0   r1   r2   r3   r4   r5   r   r6   r7   r8   r9   r   r:   )NN)r/   r0   r5   r   r6   r7   r   rI   )rQ   NNNNNNr   )rR   rS   r1   rT   rU   rV   r   r   rW   rX   rY   rZ   r[   r\   r]   r4   r^   r_   r`   r
   r   r0   )rl   r0   r   r
   )rR   rS   r1   rT   rU   rV   r   r   rW   rX   rY   rZ   r[   r\   r]   r4   r^   r_   r`   r
   r   r
   )NNr   )r/   r0   r   r0   r^   r_   r   r   )r/   r0   r   r0   r   r   )r/   r0   r{   r   r^   r   r   r   )r/   r0   r[   r\   rx   r9   r   r   )r/   r0   r]   r
   r   r   )__name__
__module____qualname__r"   staticmethodr   rF   rE   ri   rj   rs   rk   rz   r~   r   r   r   r   r-   r#   r!   r   r      s       R R R R R
 	
 	
 	
 \	
 !()-6:!$
 $
 $
 $
 $
R *.6:	    * 02'+)-")- 04!$%C C C C CJ   & 02'+)-")- 04!$%$" $" $" $" $"T $%! ! ! ! !F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7 7 7 7 7 7r#   r   )!
__future__r   rO   rc   calendarr   collections.abcr   r   r   r   typingr	   r
   rQ   r   
exceptionsr   r   r   r   r   r   r   r   rU   r   r   r   _jwt_global_objrF   ri   rs   r-   r#   r!   <module>r      s~   " " " " " "         $ $ $ $ $ $ 2 2 2 2 2 2 2 2 2 2 % % % % % % % %                        - , , , , , BAAAAAAAAT7 T7 T7 T7 T7 T7 T7 T7n
 %''		!1		r#   