
    PcK'                       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mZ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  G d d          Z e            Zej         Z ej!        Z!ej"        Z"dS )    )annotationsN)timegm)IterableMapping)datetime	timedeltatimezone)AnyDictListOptionalTypeUnion   )api_jws)DecodeErrorExpiredSignatureErrorImmatureSignatureErrorInvalidAudienceErrorInvalidIssuedAtErrorInvalidIssuerErrorMissingRequiredClaimError)RemovedInPyjwt3Warningc                      e Zd Zd*dZed+d            Z	 	 	 d,d-dZ	 	 	 	 	 	 	 	 d.d/d!Z	 	 	 	 	 	 	 	 d.d/d"Zd0d#Z	d$ Z
d% Zd& Zd' Zd( Zd) ZdS )1PyJWTNc                H    |i }i |                                  || _        d S N)_get_default_optionsoptions)selfr   s     -/usr/lib/python3/dist-packages/jwt/api_jwt.py__init__zPyJWT.__init__   s-    ?GA$3355AA    return!Dict[str, Union[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#   HS256payloadDict[str, Any]keystr	algorithmOptional[str]headersOptional[Dict[str, Any]]json_encoder Optional[Type[json.JSONEncoder]]c                   t          |t                    st          d          |                                }dD ]T}t          |                    |          t
                    r*t          ||                                                   ||<   Ut          j	        |d|          
                    d          }t          j
        |||||          S )NzJExpecting a mapping object, as JWT only supports JSON objects as payloads.)expiatnbf),:)
separatorsclszutf-8)
isinstancer   	TypeErrorcopygetr   r   utctimetuplejsondumpsencoder   )r    r0   r2   r4   r6   r8   
time_claimjson_payloads           r!   rI   zPyJWT.encode)   s     '7++ 	,   ,,../ 	Q 	QJ'++j118<< Q&,WZ-@-M-M-O-O&P&P
#z

 
 

&// 	 ~lCG\RRRr#    r   jwt
algorithmsOptional[List[str]]r   verifyOptional[bool]detached_payloadOptional[bytes]audience#Optional[Union[str, Iterable[str]]]issuerleewayUnion[int, float, timedelta]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
        |||||          }	 t          j        |d                   }n$# t          $ r}t          d|           d }~ww xY wt          |t
                    st          d          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().)r2   rN   r   rR   r0   zInvalid payload string: z-Invalid payload string: must be a json object)rT   rV   rW   )warningswarntuplekeysr   dict
setdefaultDeprecationWarningr   r   decode_completerG   loads
ValueErrorrB   r   _validate_claims)r    rM   r2   rN   r   rP   rR   rT   rV   rW   kwargsdecodedr0   emerged_optionss                  r!   rb   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   )!-
 
 
	>j!344GG 	> 	> 	><<<===	>'4(( 	OMNNN4DL4G4^hvf 	 	
 	
 	
 %	s   8E 
E4E//E4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: )rP   rR   rT   rV   rW   r0   )r[   r\   r]   r^   r   rb   )r    rM   r2   rN   r   rP   rR   rT   rV   rW   rf   rg   s               r!   decodezPyJWT.decode   s    $  	M>',V[[]]';';> > '	   &&- ' 

 

 y!!r#   c                   t          |t                    r|                                }|+t          |t          t          f          st          d          |                     ||           t          t          j	        t          j                                                            }d|v r|d         r|                     |||           d|v r|d         r|                     |||           d|v r|d         r|                     |||           |d	         r|                     ||           |d
         r|                     ||           d S d S )Nz+audience must be a string, iterable or None)tzr<   r*   r=   r)   r;   r(   r,   r+   )rB   r   total_secondsr3   r   rC   _validate_required_claimsr   r   nowr	   utcrF   _validate_iat_validate_nbf_validate_exp_validate_iss_validate_aud)r    r0   r   rT   rV   rW   rp   s          r!   re   zPyJWT._validate_claims   sh   fi(( 	,))++F
8c8_(M(MIJJJ&&w888X\X\222??AABBG 5wV444G 5wV444G 5wV444<  	0w///<  	2w11111	2 	2r#   c                d    |d         D ]&}|                     |          t          |          'd S )Nr-   )rE   r   )r    r0   r   claims       r!   ro   zPyJWT._validate_required_claims   sE    Y' 	7 	7E{{5!!)/666 *	7 	7r#   c                    |d         }	 t          |           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))intrd   r   r   )r    r0   rp   rW   r<   s        r!   rr   zPyJWT._validate_iat   sr    en	THHHH 	T 	T 	T&'RSSS	T#,()KLLL  s    4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))rz   rd   r   r   )r    r0   rp   rW   r=   s        r!   rs   zPyJWT._validate_nbf   sq    	Lgen%%CC 	L 	L 	LJKKK	L #,()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/Expiration Time claim (exp) must be an integer.zSignature has expired)rz   rd   r   r   )r    r0   rp   rW   r;   s        r!   rt   zPyJWT._validate_exp   sq    	Tgen%%CC 	T 	T 	TRSSS	T 3<  '(?@@@ ! r|   c                   |d|vs|d         sd S t          d          d|vs|d         st          d          |d         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 claim format in tokenc              3  B   K   | ]}t          |t                     V  d S r   )rB   r3   ).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>  s(      >>cs/)>>>>>>r#   )r   r   rB   r3   listanyall)r    r0   rT   r   s      @r!   rv   zPyJWT._validate_aud   s"   G##75># ''9:::wu~ ,E222!%.os++ 	0./O/400 	H&'FGGG??????? 	H&'FGGGh$$ 	" zH>>>>X>>>>> 	;&'9:::	; 	;r#   c                j    |d S d|vrt          d          |d         |k    rt          d          d S )NisszInvalid issuer)r   r   )r    r0   rV   s      r!   ru   zPyJWT._validate_iss  sK    >F+E2225>V##$%5666 $#r#   r   )r$   r%   )r/   NN)r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r$   r3   )rL   NNNNNNr   )rM   r3   r2   r3   rN   rO   r   r7   rP   rQ   rR   rS   rT   rU   rV   r5   rW   rX   r$   r1   )NNr   )__name__
__module____qualname__r"   staticmethodr   rI   rb   rk   re   ro   rr   rs   rt   rv   ru   r.   r#   r!   r   r      s]       B B B B
 	
 	
 	
 \	
 $+,09=S S S S S> *.,0!%,0 9= $/0H H H H HZ *.,0!%,0 9= $/0$" $" $" $" $"L2 2 2 247 7 7
M M MM M MA A A; ; ;87 7 7 7 7r#   r   )#
__future__r   rG   r[   calendarr   collections.abcr   r   r   r   r	   typingr
   r   r   r   r   r   rL   r   
exceptionsr   r   r   r   r   r   r   r   r   _jwt_global_objrI   rb   rk   r.   r#   r!   <module>r      s{   " " " " " "         - - - - - - - - 2 2 2 2 2 2 2 2 2 2 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9                        - , , , , ,|7 |7 |7 |7 |7 |7 |7 |7~ %''		!1		r#   