3
ãdeY  ã               @   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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Útimezone)Ú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ej  edœd	d
„Zd"eeee	e  ee eeef dœdd„Zd#ee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 }| j ƒ |–| _d S )N)Ú_get_default_optionsÚoptions)Úselfr   © r   úB/var/www/agendate/envp3/lib/python3.6/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   st   t |tƒstdƒ‚|jƒ }x0d	D ](}t |j|ƒtƒr t|| jƒ ƒ||< q W tj	|d
|d�j
dƒ}tj
|||||ƒS )NzJExpecting a mapping object, as JWT only supports JSON objects as payloads.ÚexpÚiatÚnbfú,ú:)Ú
separatorsÚclszutf-8)r,   r-   r.   )r/   r0   )Ú
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   s0  t |pi ƒ}|jddƒ d|kr>|d |d kr>tjdtd� |d s‚|jddƒ |jddƒ |jd	dƒ |jd
dƒ |jddƒ |d r˜| r˜tdƒ‚tj|f|||dœ|—Ž}ytj	|d ƒ}W n0 t
k
rô } ztd|› �ƒ‚W Y d d }~X nX t|t ƒ�s
tdƒ‚| j|–}	| j||	f|Ž ||d< |S )Nr   TÚverifyzàThe `verify` argument to `decode` does nothing in PyJWT 2.0 and newer. The equivalent is setting `verify_signature` to False in the `options` dictionary. This invocation has a mismatch between the kwarg and the option entry.)Úcategoryr    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: z-Invalid payload string: must be a json object)ÚdictÚ
setdefaultÚwarningsÚwarnÚDeprecationWarningr   r   Údecode_completer8   ÚloadsÚ
ValueErrorr3   r   Ú_validate_claims)
r   r<   r(   r=   r   ÚkwargsÚdecodedr'   ÚeZmerged_optionsr   r   r   rE   B   s>     
zPyJWT.decode_completec             K   s   | j ||||f|Ž}|d S )Nr'   )rE   )r   r<   r(   r=   r   rI   rJ   r   r   r   Údecodey   s    zPyJWT.decoder   c             K   sØ   t |tƒr|jƒ }t |tttd ƒtfƒs0tdƒ‚| j||ƒ t	t
jtjd�jƒ ƒ}d|krp|d rp| j|||ƒ d|krŽ|d rŽ| j|||ƒ d|kr¬|d r¬| j|||ƒ |d	 rÀ| j||ƒ |d
 rÔ| j||ƒ d S )Nz,audience must be a string, iterable, or None)Útzr-   r"   r.   r!   r,   r    r$   r#   )r3   r   Útotal_secondsÚbytesÚstrÚtyper   r4   Ú_validate_required_claimsr   r   Únowr   Úutcr7   Ú_validate_iatÚ_validate_nbfÚ_validate_expÚ_validate_issÚ_validate_aud)r   r'   r   ÚaudienceÚissuerÚleewayrI   rS   r   r   r   rH   „   s     
zPyJWT._validate_claimsc             C   s,   x&|d D ]}|j |ƒd kr
t|ƒ‚q
W d S )Nr%   )r6   r   )r   r'   r   Zclaimr   r   r   rR       s    zPyJWT._validate_required_claimsc             C   s2   yt |d ƒ W n tk
r,   tdƒ‚Y nX d S )Nr-   z)Issued At claim (iat) must be an integer.)ÚintrG   r   )r   r'   rS   r\   r   r   r   rU   ¥   s    zPyJWT._validate_iatc             C   sF   y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]   rG   r   r   )r   r'   rS   r\   r.   r   r   r   rV   «   s    zPyJWT._validate_nbfc             C   sF   y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]   rG   r   r   )r   r'   rS   r\   r,   r   r   r   rW   ´   s    zPyJWT._validate_expc                s¶   |d kr&d|ks|d  rd S t dƒ‚d|ks8|d  r@tdƒ‚|d ‰ tˆ tƒrXˆ g‰ tˆ tƒsjt dƒ‚tdd„ ˆ D ƒƒr„t dƒ‚t|tƒr”|g}t‡ fdd„|D ƒƒr²t dƒ‚d S )NÚaudzInvalid audiencezInvalid claim format in tokenc             s   s   | ]}t |tƒ V  qd S )N)r3   rP   )Ú.0Úcr   r   r   ú	<genexpr>Ð   s    z&PyJWT._validate_aud.<locals>.<genexpr>c             3   s   | ]}|ˆ kV  qd S )Nr   )r_   r^   )Úaudience_claimsr   r   ra   Ö   s    )r   r   r3   rP   ÚlistÚanyÚall)r   r'   rZ   r   )rb   r   rY   ½   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'   r[   r   r   r   rX   Ù   s    zPyJWT._validate_iss)N)r&   NN)r;   NN)r;   NN)NNr   )Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr	   rP   r   Úboolr
   r   r   r   r   r8   ÚJSONEncoderr:   rE   rL   rH   rR   rU   rV   rW   rY   rX   r   r   r   r   r      s,   
$  &  3  
		r   ) r8   rB   Úcalendarr   Úcollections.abcr   r   r   r   r   Útypingr   r	   r
   r   r   r   r;   r   Ú
exceptionsr   r   r   r   r   r   r   r   Z_jwt_global_objr:   rE   rL   r   r   r   r   Ú<module>   s    $ Q