U
    a                     @   s   d dl Z d dlZd dlmZ d dlmZmZ z d dlmZmZm	Z	m
Z
mZ W n ek
r`   Y nX 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mZ dd
lmZ G dd deZ e  Z!e!j"Z"e!j#Z#e!j$Z$e!j%Z%e!j&Z&dS )    N)timegm)datetime	timedelta)CallableDictListOptionalUnion   )PyJWS)	Algorithmget_default_algorithms)IterableMappingstring_types)DecodeErrorExpiredSignatureErrorImmatureSignatureErrorInvalidAudienceErrorInvalidIssuedAtErrorInvalidIssuerErrorMissingRequiredClaimError)
merge_dictc                       sv   e Zd ZdZedd Zd fdd	Zd f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  ZS )PyJWTZJWTc                
   C   s   dddddddddd	S )NTF)	verify_signature
verify_exp
verify_nbf
verify_iat
verify_aud
verify_issrequire_exprequire_iatrequire_nbf r#   r#   r#   z/home/adriano.carvalho/ftp/files/BrinquedotecaVirtual/brinquedotecavirtual/venv/lib/python3.8/site-packages/jwt/api_jwt.py_get_default_options   s    zPyJWT._get_default_optionsHS256Nc                    sn   t |tstddD ](}t ||trt||  ||< qtj|d|d	d}t
t| 	|||||S )NzJExpecting a mapping object, as JWT only supports JSON objects as payloads.)expiatnbf),:)
separatorsclsutf-8)
isinstancer   	TypeErrorgetr   r   utctimetuplejsondumpsencodesuperr   )selfpayloadkey	algorithmheadersZjson_encoderZ
time_claimZjson_payload	__class__r#   r$   r5   (   s&    

    zPyJWT.encode Tc              
      s   |r|st dt | |\}}}}|d kr8d|i}n|d| t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|rt| j|}| j||f| |S )NzIt is strongly recommended that you pass in a value for the "algorithms" argument when calling decode(). This argument will be mandatory in a future version.r   )r9   
algorithmsoptionsr.   zInvalid payload string: %sz-Invalid payload string: must be a json object)warningswarnDeprecationWarning_load
setdefaultr6   r   decoder3   loads
ValueErrorr   r/   r   r   r@   _validate_claims)r7   Zjwtr9   verifyr?   r@   kwargsr8   _decodedeZmerged_optionsr<   r#   r$   rF   D   s8    

  
zPyJWT.decoder   c                 K   s   d|kr$| dd|d< tdt t|tr6| }t|ttd t	fsRt
d| || tt  }d|kr| dr| ||| d|kr| d	r| ||| d
|kr| dr| ||| | dr| || | dr| || d S )NZverify_expirationTr   zXThe verify_expiration parameter is deprecated. Please use verify_exp in options instead.z,audience must be a string, iterable, or Noner(   r   r)   r   r'   r   r   )r1   rA   rB   rC   r/   r   total_secondsr   typer   r0   _validate_required_claimsr   r   utcnowr2   _validate_iat_validate_nbf_validate_exp_validate_iss_validate_aud)r7   r8   r@   audienceissuerleewayrK   nowr#   r#   r$   rI   l   s*    


zPyJWT._validate_claimsc                 C   sd   | dr | dd kr td| dr@| dd kr@td| dr`| dd kr`tdd S )Nr    r'   r!   r(   r"   r)   )r1   r   )r7   r8   r@   r#   r#   r$   rQ      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.)intrH   r   )r7   r8   r[   rZ   r#   r#   r$   rS      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))r\   rH   r   r   )r7   r8   r[   rZ   r)   r#   r#   r$   rT      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)r\   rH   r   r   )r7   r8   r[   rZ   r'   r#   r#   r$   rU      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 N)r/   r   ).0cr#   r#   r$   	<genexpr>   s     z&PyJWT._validate_aud.<locals>.<genexpr>c                 3   s   | ]}| kV  qd S r^   r#   )r_   r]   Zaudience_claimsr#   r$   ra      s     )r   r   r/   r   listany)r7   r8   rX   r#   rb   r$   rW      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   )r7   r8   rY   r#   r#   r$   rV      s    zPyJWT._validate_iss)r&   NN)r>   TNN)NNr   )__name__
__module____qualname__Zheader_typestaticmethodr%   r5   rF   rI   rQ   rS   rT   rU   rW   rV   __classcell__r#   r#   r<   r$   r      s*   
       (  
"
	
r   )'r3   rA   calendarr   r   r   typingr   r   r   r   r	   ImportErrorZapi_jwsr   r?   r   r   compatr   r   r   
exceptionsr   r   r   r   r   r   r   utilsr   r   Z_jwt_global_objr5   rF   Zregister_algorithmZunregister_algorithmZget_unverified_headerr#   r#   r#   r$   <module>   s(    $ D