o
    h                     @   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y/   Y nw 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                       s   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#   S/var/www/html/magazine_api/magazine_env/lib/python3.10/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 u rd|i}n|d| tt| j|f|||d|}	z
t	|	d}W n t
yN }
 ztd|
 d }
~
ww t|tsXtd|rjt| j|}| j||fi | |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|v r| dd|d< tdt t|tr| }t|ttd t	fs)t
d| || tt  }d|v rG| drG| ||| d|v rW| d	rW| ||| d
|v rg| drg| ||| | drr| || | dr| || d S 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   sh   | dr| dd u rtd| dr | dd u r td| dr0| dd u r2tdd S d S )Nr    r'   r!   r(   r"   r)   )r1   r   )r7   r8   r@   r#   r#   r$   rQ      s   zPyJWT._validate_required_claimsc                 C   s*   z	t |d  W d S  ty   tdw )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   s@   zt |d }W n ty   tdw ||| krt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   s@   zt |d }W n ty   tdw ||| k rt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 u r
d|vr
d S |d urd|vrt d|d u r"d|v r"td|d  t tr. g t ts7tdtdd  D rDtdt|trL|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 N)r/   r   ).0cr#   r#   r$   	<genexpr>   s    z&PyJWT._validate_aud.<locals>.<genexpr>c                 3   s    | ]}| v 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 u rd S d|vrt d|d |krt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
