
    dd1.                       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 y)    )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	 	 d	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ		 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ
	 	 	 d	 	 	 	 	 	 	 dd	Z	 	 	 	 	 	 dd
Z	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZd dZy)!PyJWTNc                >    |i }i | j                         || _        y N)_get_default_optionsoptions)selfr   s     -/usr/lib/python3/dist-packages/jwt/api_jwt.py__init__zPyJWT.__init__   s&    ?G'Q$*C*C*E'Q'Q    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    c                B   t        |t              st        d      |j                         }dD ]A  }t        |j	                  |      t
              s#t        ||   j                               ||<   C | j                  |||      }t        j                  ||||||      S )NzGExpecting a dict object, as JWT only supports JSON objects as payloads.)expiatnbf)headersjson_encoder)sort_headers)
isinstancedict	TypeErrorcopygetr   r   utctimetuple_encode_payloadr   encode)	r   payloadkey	algorithmr.   r/   r0   
time_claimjson_payloads	            r   r8   zPyJWT.encode,   s     '4(,  ,,./ 	QJ'++j18<&,WZ-@-M-M-O&P
#	Q
 ++% , 
 ~~%
 	
r    c                P    t        j                  |d|      j                  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dumpsr8   )r   r9   r.   r/   s       r   r7   zPyJWT._encode_payloadR   s)     zz!
 &/		r    c
                   |
r4t        j                  dt        |
j                                t               t        |xs i       }|j                  dd       |#||d   k7  rt        j                  dt               |d   sZ|j                  dd       |j                  dd       |j                  d	d       |j                  d
d       |j                  dd       |d   r|st        d      t        j                  |||||      }| j                  |      }i | j                  |}| 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().)r:   
algorithmsr   detached_payload)audienceissuerleewayr9   )warningswarntuplekeysr   r2   
setdefaultDeprecationWarningr   r   decode_complete_decode_payloadr   _validate_claims)r   jwtr:   rG   r   verifyrH   rI   rJ   rK   kwargsdecodedr9   merged_optionss                 r   rR   zPyJWT.decode_completed   sk   $ MM'',V[[]';&<> '	 w}"%-t4
 &G4F,G"GMMY ,	 )*|U3|U3|U3|U3|U3%&zn  ))!-
 &&w/4DLL4G4^hvf 	 	
 %	r    c                    	 t        j                  |d         }t	        |t
              st        d      |S # t        $ r}t        d|       d}~ww xY w)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.
        r9   zInvalid payload string: Nz-Invalid payload string: must be a json object)rC   loads
ValueErrorr   r1   r2   )r   rX   r9   es       r   rS   zPyJWT._decode_payload   s\    	>jj!34G '4(MNN	  	> 8<==	>s   7 	A AAc
                    |
r4t        j                  dt        |
j                                t               | j                  |||||||||		      }|d   S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: )rV   rH   rI   rJ   rK   r9   )rL   rM   rN   rO   r   rR   )r   rU   r:   rG   r   rV   rH   rI   rJ   rK   rW   rX   s               r   decodezPyJWT.decode   sr    $ MM'',V[[]';&<> '	 &&- ' 

 y!!r    c                   t        |t              r|j                         }|!t        |t        t        f      st        d      | j                  ||       t        j                  t        j                        j                         }d|v r|d   r| j                  |||       d|v r|d   r| j                  |||       d|v r|d   r| j                  |||       |d	   r| j                  ||       |d
   r| j!                  ||       y y )Nz+audience must be a string, iterable or None)tzr,   r%   r-   r$   r+   r#   r'   r&   )r1   r   total_secondsstrr   r3   _validate_required_claimsr   nowr   utc	timestamp_validate_iat_validate_nbf_validate_exp_validate_iss_validate_aud)r   r9   r   rI   rJ   rK   re   s          r   rT   zPyJWT._validate_claims   s     fi())+F
8c8_(MIJJ&&w8llhll+557G 5wV4G 5wV4G 5wV4< w/< w1 !r    c                P    |d   D ]  }|j                  |      t        |       y )Nr(   )r5   r   )r   r9   r   claims       r   rd   zPyJWT._validate_required_claims   s2    
 Y' 	7E{{5!)/66	7r    c                x    	 t        |d         }|||z   kD  rt        d      y # t        $ r t        d      w xY w)Nr,   z)Issued At claim (iat) must be an integer.z The token is not yet valid (iat))intr\   r   r   )r   r9   re   rK   r,   s        r   rh   zPyJWT._validate_iat	  sT    	Tgen%C #,()KLL    	T&'RSS	T   $ 9c                x    	 t        |d         }|||z   kD  rt        d      y # t        $ r t        d      w xY w)Nr-   z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))rp   r\   r   r   )r   r9   re   rK   r-   s        r   ri   zPyJWT._validate_nbf  sT    	Lgen%C #,()KLL    	LJKK	Lrq   c                x    	 t        |d         }|||z
  k  rt        d      y # t        $ r t        d      w xY w)Nr+   z/Expiration Time claim (exp) must be an integer.zSignature has expired)rp   r\   r   r   )r   r9   re   rK   r+   s        r   rj   zPyJWT._validate_exp$  sT    	Tgen%C 3< '(?@@ !  	TRSS	Trq   c                `   |d|vs|d   sy 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      y )NaudzInvalid audiencezInvalid claim format in tokenc              3  >   K   | ]  }t        |t                 y wr   )r1   rc   ).0cs     r   	<genexpr>z&PyJWT._validate_aud.<locals>.<genexpr>I  s     ?!:a%%?s   c              3  &   K   | ]  }|v 
 y wr   r)   )rw   ru   audience_claimss     r   ry   z&PyJWT._validate_aud.<locals>.<genexpr>O  s     >cs/)>s   zAudience doesn't match)r   r   r1   rc   listanyall)r   r9   rI   r{   s      @r   rl   zPyJWT._validate_aud2  s    
 G#75> ''9::wu~ ,E22!%.os+./O/40&'FGG???&'FGGh$ zH>X>>&'?@@ ?r    c                N    |y d|vrt        d      |d   |k7  rt        d      y )NisszInvalid issuer)r   r   )r   r9   rJ   s      r   rk   zPyJWT._validate_issR  s:    >+E225>V#$%566 $r    r   )r   dict[str, Any] | NonereturnNone)r   zdict[str, bool | list[str]])HS256NNT)r9   dict[str, Any]r:   z AllowedPrivateKeys | str | bytesr;   
str | Noner.   r   r/   type[json.JSONEncoder] | Noner0   boolr   rc   )NN)r9   r   r.   r   r/   r   r   bytes) NNNNNNr   )rU   str | bytesr:   AllowedPublicKeys | str | bytesrG   list[str] | Noner   r   rV   bool | NonerH   bytes | NonerI   str | Iterable[str] | NonerJ   r   rK   float | timedeltarW   r
   r   r   )rX   r   r   r
   )rU   r   r:   r   rG   r   r   r   rV   r   rH   r   rI   r   rJ   r   rK   r   rW   r
   r   r
   )NNr   )r9   r   r   r   rK   r   r   r   )r9   r   r   r   r   r   )r9   r   re   floatrK   r   r   r   )r9   r   rI   r   r   r   )r9   r   rJ   r
   r   r   )__name__
__module____qualname__r   staticmethodr   r8   r7   rR   rS   r_   rT   rd   rh   ri   rj   rl   rk   r)   r    r   r   r      s   R
 	
 	
 !()-6:!$
$
 .$
 	$

 '$
 4$
 $
 
$
R *.6:	 ' 4	
 
* 02'+)-")- 04!$%CC -C %	C
 'C C 'C -C C "C  !C" 
#CJ& 02'+)-")- 04!$%$"$" -$" %	$"
 '$" $" '$" -$" $" "$"  !$"" 
#$"T $%22  2 "2 
2B77  7 
	7MM M 	M
 
MMM M 	M
 
MAA A 	A
 
AAA -A 
	A@7r    r   )!
__future__r   rC   rL   calendarr   collections.abcr   r   r   r   typingr	   r
   r   r   
exceptionsr   r   r   r   r   r   r   r   rG   r   r   r   _jwt_global_objr8   rR   r_   r)   r    r   <module>r      sq    "    $ 2 2 %    -A@7 @7F
 '			!11			r    