o
    Y¨Êhø  ã                   @   s   d dl Z d dlZd dlmZ d dlmZ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y7   Y nw ddl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  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)ÚIterableÚMapping)ÚdatetimeÚ	timedelta)ÚCallableÚDictÚListÚOptionalÚUnioné   )ÚPyJWS)Ú	AlgorithmÚget_default_algorithms)Ú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 )ÚPyJWTÚ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$   ú=/var/www/html/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ÚheadersÚjson_encoderÚ
time_claimÚjson_payload©Ú	__class__r$   r%   r6   )   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 )Nz�It 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   )r:   Ú
algorithmsÚoptionsr/   zInvalid payload string: %sz-Invalid payload string: must be a json object)ÚwarningsÚwarnÚDeprecationWarningÚ_loadÚ
setdefaultr7   r   Údecoder4   ÚloadsÚ
ValueErrorr   r0   r   r   rD   Ú_validate_claims)r8   Újwtr:   ÚverifyrC   rD   Úkwargsr9   Ú_ÚdecodedÚeÚmerged_optionsr@   r$   r%   rJ   E   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 )NÚ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   )r2   rE   rF   rG   r0   r   Útotal_secondsr   Útyper   r1   Ú_validate_required_claimsr   r   Úutcnowr3   Ú_validate_iatÚ_validate_nbfÚ_validate_expÚ_validate_issÚ_validate_aud)r8   r9   rD   ÚaudienceÚissuerÚleewayrP   Únowr$   r$   r%   rM   m   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*   )r2   r   )r8   r9   rD   r$   r$   r%   rX   �   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.)ÚintrL   r   )r8   r9   rb   ra   r$   r$   r%   rZ   ™   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))rc   rL   r   r   )r8   r9   rb   ra   r*   r$   r$   r%   r[   Ÿ   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)rc   rL   r   r   )r8   r9   rb   ra   r(   r$   r$   r%   r\   ¨   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)r0   r   )Ú.0Úcr$   r$   r%   Ú	<genexpr>Æ   s   € z&PyJWT._validate_aud.<locals>.<genexpr>c                 3   s   � | ]}|ˆ v V  qd S re   r$   )rf   rd   ©Úaudience_claimsr$   r%   rh   Ì   s   € )r   r   r0   r   ÚlistÚany)r8   r9   r_   r$   ri   r%   r^   ²   s$   


ÿzPyJWT._validate_audc                 C   s4   |d u rd S d|vrt dƒ‚|d |krtdƒ‚d S )NÚisszInvalid issuer)r   r   )r8   r9   r`   r$   r$   r%   r]   Ï   s   ÿzPyJWT._validate_iss)r'   NN)rB   TNN)NNr   )Ú__name__Ú
__module__Ú__qualname__Úheader_typeÚstaticmethodr&   r6   rJ   rM   rX   rZ   r[   r\   r^   r]   Ú__classcell__r$   r$   r@   r%   r      s,    
ûû(
ÿ"
	
r   )(r4   rE   Úcalendarr   Úcollectionsr   r   r   r   Útypingr   r   r	   r
   r   ÚImportErrorÚapi_jwsr   rC   r   r   Úcompatr   Ú
exceptionsr   r   r   r   r   r   r   Úutilsr   r   Ú_jwt_global_objr6   rJ   Úregister_algorithmÚunregister_algorithmÚget_unverified_headerr$   r$   r$   r%   Ú<module>   s.     ÿ$ D
