
­­­­­­­­­­­­­­­­­­
<!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st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 rtdt|tr|g}t fdd|D st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