
    logK2                       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 j!        Z!e j"        Z"e j#        Z#dS )    )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@dAdZ	 	 dBdCdZ	 	 	 	 	 	 	 	 dDdEd-ZdFd/Z		 	 	 	 	 	 	 	 dDdGd0Z
	 	 	 dHdId1ZdJd2ZdKd5ZdKd6ZdKd7Zd8d9dLd;ZdMd<ZdS )NPyJWTNoptionsdict[str, Any] | NonereturnNonec                H    |i }i |                                  || _        d S N)_get_default_optionsr   )selfr   s     F/var/www/html/nourish/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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)r7   r8   )r:   )
isinstancedict	TypeErrorcopygetr   r   utctimetuple_encode_payloadr   encode)	r"   r1   r3   r5   r7   r8   r:   
time_claimjson_payloads	            r#   rH   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dumpsrH   )r"   r1   r7   r8   s       r#   rG   zPyJWT._encode_payloadS   s3     z!
 
 
 &//		r%    r   jwtstr | bytes'AllowedPublicKeys | PyJWK | str | bytes
algorithmslist[str] | Noneverifybool | Nonedetached_payloadbytes | Noneaudiencestr | Iterable[str] | Noneissuerstr | List[str] | None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().)r3   rW   r   r[   )r]   r_   ra   r1   )warningswarntuplekeysr   rB   
setdefaultDeprecationWarningr   r   decode_complete_decode_payloadr   _validate_claims)r"   rT   r3   rW   r   rY   r[   r]   r_   ra   rc   decodedr1   merged_optionss                 r#   rl   zPyJWT.decode_completee   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%   ro   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.
        r1   zInvalid payload string: Nz-Invalid payload string: must be a json object)rQ   loads
ValueErrorr   rA   rB   )r"   ro   r1   es       r#   rm   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: )rY   r[   r]   r_   ra   r1   )rf   rg   rh   ri   r   rl   )r"   rT   r3   rW   r   rY   r[   r]   r_   ra   rc   ro   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)rA   r   total_secondsr<   r   rC   _validate_required_claimsr   nowr   utc	timestamp_validate_iat_validate_nbf_validate_exp_validate_iss_validate_audrE   )r"   r1   r   r]   r_   ra   r~   s          r#   rn   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.   )rE   r   )r"   r1   r   claims       r#   r}   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))intrs   r   r   )r"   r1   r~   ra   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   rs   r   r   )r"   r1   r~   ra   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   rs   r   r   )r"   r1   r~   ra   r>   s        r#   r   zPyJWT._validate_exp'  sq    	Qgen%%CC 	Q 	Q 	QOPPP	Q 3<  '(?@@@ ! r   Frz   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    )rA   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>d  s(      >>cs/)>>>>>>r%   zAudience doesn't match)r   r   rA   r<   listanyall)r"   r1   r]   r{   r   s       @r#   r   zPyJWT._validate_aud5  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         |vrt          d          d S |d         |k    rt          d          d S )NisszInvalid issuer)r   rA   r   r   )r"   r1   r_   s      r#   r   zPyJWT._validate_issg  s    >F+E222fd## 	;u~V++()9::: ,+ u~''()9::: ('r%   r    )r   r   r   r   )r   r&   )r0   NNT)r1   r2   r3   r4   r5   r6   r7   r   r8   r9   r:   r;   r   r<   )NN)r1   r2   r7   r   r8   r9   r   rK   )rS   NNNNNNr   )rT   rU   r3   rV   rW   rX   r   r   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   r
   r   r2   )ro   r2   r   r
   )rT   rU   r3   rV   rW   rX   r   r   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   r
   r   r
   )NNr   )r1   r2   r   r2   ra   rb   r   r   )r1   r2   r   r2   r   r   )r1   r2   r~   r   ra   r   r   r   )r1   r2   r]   r^   r{   r;   r   r   )r1   r2   r_   r
   r   r   )__name__
__module____qualname__r$   staticmethodr!   rH   rG   rl   rm   rv   rn   r}   r   r   r   r   r   r/   r%   r#   r   r      s       R R R R R
 	
 	
 	
 \	
 !()-6:!$
 $
 $
 $
 $
R *.6:	    * 8:'+)-")- 04)-$%C C C C CJ   & 8:'+)-")- 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; ; ; ; ; ;r%   r   )$
__future__r   rQ   rf   calendarr   collections.abcr   r   r   r   typingr	   r
   r   rS   r   
exceptionsr   r   r   r   r   r   r   r   rW   r   r   api_jwkr   r   _jwt_global_objrH   rl   rv   r/   r%   r#   <module>r      s   " " " " " "         $ $ $ $ $ $ 2 2 2 2 2 2 2 2 2 2 + + + + + + + + + +                        - , , , , , AAAAAAAAX; X; X; X; X; X; X; X;v
 %''		!1		r%   