
    [cY                         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  G d	 d
          Z e            Zej        Zej        Zej        ZdS )    N)timegm)IterableMapping)datetime	timedeltatimezone)AnyDictListOptionalTypeUnion   )api_jws)DecodeErrorExpiredSignatureErrorImmatureSignatureErrorInvalidAudienceErrorInvalidIssuedAtErrorInvalidIssuerErrorMissingRequiredClaimErrorc                      e Zd ZddZedeeeee	e         f         f         fd            Z
	 	 	 ddeeef         dedee         d	ee         d
eeej                          defdZ	 	 	 ddededee	e                  dee         deeef         f
dZ	 	 	 ddededee	e                  dee         deeef         f
dZ	 ddZd Zd Zd Zd Zd Zd ZdS )PyJWTNc                 H    |i }i |                                  || _        d S N)_get_default_optionsoptions)selfr   s     +lib/python3.11/site-packages/jwt/api_jwt.py__init__zPyJWT.__init__   s0     	GA$3355AA    returnc                      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key	algorithmheadersjson_encoderc                    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   r-   r.   r/   r0   r1   
time_claimjson_payloads           r   rA   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!    jwt
algorithmsr   c                    t          |pi           }|                    dd           d|v r-|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        |f|||d|}	 t          j	        |d                   }n$# t          $ r}t          d|           d }~ww xY wt          |t                     st          d          i | j        |}	 | j        ||	fi | ||d<   |S )Nr$   TverifyzThe `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.   rF   r   r-   zInvalid payload string: z-Invalid payload string: must be a json object)dict
setdefaultwarningswarnDeprecationWarningr   r   decode_completer?   loads
ValueErrorr:   r   _validate_claims)
r   rE   r.   rF   r   kwargsdecodedr-   emerged_optionss
             r   rO   zPyJWT.decode_completeB   s    w}"%%-t444
 v 	&"2g>P6Q"Q 	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g~@@@@@$	s   ?D 
D;$D66D;c                 4     | j         ||||fi |}|d         S )Nr-   )rO   )r   rE   r.   rF   r   rS   rT   s          r   decodezPyJWT.decodey   s/     '$&sCWOOOOy!!r!   r   c                    t          |t                    r|                                }t          |t          t          t          d           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)tzr4   r'   r5   r&   r3   r%   r)   r(   )r:   r   total_secondsbytesstrtyper   r;   _validate_required_claimsr   r   nowr   utcr>   _validate_iat_validate_nbf_validate_exp_validate_iss_validate_aud)r   r-   r   audienceissuerleewayrS   r`   s           r   rR   zPyJWT._validate_claims   s    fi(( 	,))++F(UCdX$FGG 	LJKKK&&w888X\X\222??AABBG 	5 5 	5wV444G 	5 5 	5wV444G 	5 5 	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*   )r=   r   )r   r-   r   claims       r   r_   zPyJWT._validate_required_claims   sG    Y' 	7 	7E{{5!! 7/6667	7 	7r!   c                 l    	 t          |d                    d S # t          $ r t          d          w xY w)Nr4   z)Issued At claim (iat) must be an integer.)intrQ   r   )r   r-   r`   ri   s       r   rb   zPyJWT._validate_iat   sN    	T 	T 	T 	T&'RSSS	Ts    3c                     	 t          |d                   }n# t          $ r t          d          w xY w|||z   k    rt          d          d S )Nr5   z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))rm   rQ   r   r   )r   r-   r`   ri   r5   s        r   rc   zPyJWT._validate_nbf   sx    	Lgen%%CC 	L 	L 	LJKKK	L #, 	M()KLLL	M 	M    2c                     	 t          |d                   }n# t          $ r t          d          w xY w|||z
  k     rt          d          d S )Nr3   z/Expiration Time claim (exp) must be an integer.zSignature has expired)rm   rQ   r   r   )r   r-   r`   ri   r3   s        r   rd   zPyJWT._validate_exp   sx    	Tgen%%CC 	T 	T 	TRSSS	T #, 	A'(?@@@	A 	Aro   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   )r:   r]   ).0cs     r   	<genexpr>z&PyJWT._validate_aud.<locals>.<genexpr>   s/      ??!:a%%%??????r!   c              3       K   | ]}|vV  	d S r   r+   )rt   rr   audience_claimss     r   rv   z&PyJWT._validate_aud.<locals>.<genexpr>   s(      >>cs/)>>>>>>r!   )r   r   r:   r]   listanyall)r   r-   rg   rx   s      @r   rf   zPyJWT._validate_aud   s,    	;G# 75>  ''9::: 	3wu~ 	3 ,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   r-   rh   s      r   re   zPyJWT._validate_iss   sT     	F 	3+E2225>V# 	7$%5666	7 	7r!   r   )r,   NN)rD   NN)NNr   )__name__
__module____qualname__r    staticmethodr
   r]   r   boolr   r   r	   r   r   r?   JSONEncoderrA   rO   rX   rR   r_   rb   rc   rd   rf   re   r+   r!   r   r   r      sA       B B B B
 	
$sE$S	/,B'B"C 	
 	
 	
 \	
 $+"&9=S Sc3hS S C=	S
 $S tD$456S 
S S S S> *."&5 55 5 T#Y'	5
 $5 
c3h5 5 5 5t *."&	" 	"	" 	" T#Y'		"
 $	" 
c3h	" 	" 	" 	" DE2 2 2 287 7 7
T T TM M MA A A; ; ;87 7 7 7 7r!   r   ) r?   rL   calendarr   collections.abcr   r   r   r   r   typingr	   r
   r   r   r   r   rD   r   
exceptionsr   r   r   r   r   r   r   r   _jwt_global_objrA   rO   rX   r+   r!   r   <module>r      sU           - - - - - - - - 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                       M7 M7 M7 M7 M7 M7 M7 M7` %''		!1		r!   