
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¼E‰`Š  ã                   @   s®   d dl Z d dlmZ d dlmZmZ d dl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
„ d
ƒZeƒ ZejZejZejZdS )é    N)Útimegm)ÚIterableÚMapping)ÚdatetimeÚ	timedelta)ÚAnyÚDictÚListÚOptionalÚTypeÚUnioné   )Úapi_jws)ÚDecodeErrorÚExpiredSignatureErrorÚImmatureSignatureErrorÚInvalidAudienceErrorÚInvalidIssuedAtErrorÚInvalidIssuerErrorÚMissingRequiredClaimErrorc                   @   sî   e Zd Zd dd„Zeeeeee	e f f dœdd„ƒZ
d!eeef eeee eeej  edœd	d
„Zd"eee	e eeeef dœdd„Zd#eee	e eeeef 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dS )%ÚPyJWTNc                 C   s   |d kri }|   ¡ |–| _d S ©N)Ú_get_default_optionsÚoptions)Úselfr   © r   ú</opt/alt/python38/lib/python3.8/site-packages/jwt/api_jwt.pyÚ__init__   s    zPyJWT.__init__)Úreturnc                   C   s   ddddddg dœS )NT)Úverify_signatureÚ
verify_expÚ
verify_nbfÚ
verify_iatÚ
verify_audÚ
verify_issÚrequirer   r   r   r   r   r      s    ùzPyJWT._get_default_optionsÚHS256)ÚpayloadÚkeyÚ	algorithmÚheadersÚjson_encoderr   c                 C   sp   t |tƒstdƒ‚| ¡ }dD ](}t | |¡tƒrt||  ¡ ƒ||< qtj	|d|d� 
d¡}t 
|||||¡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)   r*   r+   Z
time_claimZjson_payloadr   r   r   r:   %   s     	
ÿ  ÿþzPyJWT.encodeÚ )Újwtr(   Ú
algorithmsr   r   c           
   
   K   s
  |d krddi}n|  dd¡ |d sb|  dd¡ |  dd¡ |  dd¡ |  dd¡ |  dd¡ |d rv|svtd	ƒ‚tj|f|||d
œ|—Ž}zt |d ¡}W n. tk
rÐ } ztd| ƒ‚W 5 d }~X Y nX t|tƒsätdƒ‚| j	|–}	| j
||	f|Ž ||d< |S )Nr   Tr    Fr!   r"   r#   r$   z\It is required that you pass in a value for the "algorithms" argument when calling decode().)r(   r=   r   r'   zInvalid payload string: %sz-Invalid payload string: must be a json object)Ú
setdefaultr   r   Údecode_completer8   ÚloadsÚ
ValueErrorr3   Údictr   Ú_validate_claims)
r   r<   r(   r=   r   ÚkwargsÚdecodedr'   ÚeZmerged_optionsr   r   r   r?   A   s@    
ÿÿüû

zPyJWT.decode_completec                 K   s   | j ||||f|Ž}|d S )Nr'   )r?   )r   r<   r(   r=   r   rD   rE   r   r   r   Údecodeo   s    zPyJWT.decoder   c                 K   sÒ   t |tƒr| ¡ }t |tttd ƒtfƒs0tdƒ‚|  ||¡ t	t
 ¡  ¡ ƒ}d|krj|d rj|  |||¡ d|krˆ|d rˆ|  |||¡ d|kr¦|d r¦|  |||¡ |d rº|  ||¡ |d	 rÎ|  ||¡ d S )
Nz,audience must be a string, iterable, or Noner-   r"   r.   r!   r,   r    r$   r#   )r3   r   Útotal_secondsÚbytesÚstrÚtyper   r4   Ú_validate_required_claimsr   r   Úutcnowr7   Ú_validate_iatÚ_validate_nbfÚ_validate_expÚ_validate_issÚ_validate_aud)r   r'   r   ÚaudienceÚissuerÚleewayrD   Únowr   r   r   rC   z   s     
zPyJWT._validate_claimsc                 C   s(   |d D ]}|  |¡d krt|ƒ‚qd S )Nr%   )r6   r   )r   r'   r   Zclaimr   r   r   rL   –   s    zPyJWT._validate_required_claimsc                 C   s2   zt |d ƒ W n tk
r,   tdƒ‚Y nX d S )Nr-   z)Issued At claim (iat) must be an integer.)ÚintrA   r   )r   r'   rV   rU   r   r   r   rN   ›   s    zPyJWT._validate_iatc                 C   sF   zt |d ƒ}W n tk
r,   tdƒ‚Y nX ||| krBtdƒ‚d S )Nr.   z*Not Before claim (nbf) must be an integer.z The token is not yet valid (nbf))rW   rA   r   r   )r   r'   rV   rU   r.   r   r   r   rO   ¡   s    zPyJWT._validate_nbfc                 C   sF   zt |d ƒ}W n tk
r,   tdƒ‚Y nX ||| k rBtdƒ‚d S )Nr,   z/Expiration Time claim (exp) must be an integer.zSignature has expired)rW   rA   r   r   )r   r'   rV   rU   r,   r   r   r   rP   ª   s    zPyJWT._validate_expc                    sº   |d krd|krd S |d k	r,d|kr,t dƒ‚|d krDd|krDtdƒ‚|d ‰ tˆ tƒr\ˆ g‰ tˆ tƒsntdƒ‚tdd„ ˆ D ƒƒrˆtdƒ‚t|tƒr˜|g}t‡ fdd„|D ƒƒs¶tdƒ‚d S )NÚaudzInvalid audiencezInvalid claim format in tokenc                 s   s   | ]}t |tƒ V  qd S r   )r3   rJ   )Ú.0Úcr   r   r   Ú	<genexpr>Ç   s     z&PyJWT._validate_aud.<locals>.<genexpr>c                 3   s   | ]}|ˆ kV  qd S r   r   )rY   rX   ©Zaudience_claimsr   r   r[   Í   s     )r   r   r3   rJ   ÚlistÚany)r   r'   rS   r   r\   r   rR   ³   s"    


zPyJWT._validate_audc                 C   s4   |d krd S d|krt dƒ‚|d |kr0tdƒ‚d S )NZisszInvalid issuer)r   r   )r   r'   rT   r   r   r   rQ   Ð   s    zPyJWT._validate_iss)N)r&   NN)r;   NN)r;   NN)NNr   )Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr   rJ   r   Úboolr	   r   r   r
   r   r8   ÚJSONEncoderr:   r?   rG   rC   rL   rN   rO   rP   rR   rQ   r   r   r   r   r      sX   
$   ú
ù   û
ù1   û
ù     ÿ
		r   )r8   Úcalendarr   Úcollections.abcr   r   r   r   Útypingr   r   r	   r
   r   r   r;   r   Ú
exceptionsr   r   r   r   r   r   r   r   Z_jwt_global_objr:   r?   rG   r   r   r   r   Ú<module>   s    $ I