
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
“k®ZÔ  ã               @   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 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é   )ÚPyJWS)Ú	AlgorithmÚget_default_algorithms)Ú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   ú/usr/lib/python3.6/api_jwt.pyÚ_get_default_options   s    zPyJWT._get_default_optionsÚHS256Nc                sr   t |tƒstdƒ‚x0d	D ](}t |j|ƒtƒrt|| jƒ ƒ||< qW tj|d
|d�j	dƒ}t
t| ƒj	|||||ƒS )NzJExpecting a mapping object, as JWT only supports JSON objects as payloads.ÚexpÚiatÚnbfú,ú:)Z
separatorsÚclszutf-8)r"   r#   r$   )r%   r&   )Ú
isinstancer   Ú	TypeErrorÚgetr   r   ÚutctimetupleÚjsonÚdumpsÚencodeÚsuperr   )ÚselfÚpayloadÚkeyÚ	algorithmZheadersZjson_encoderZ
time_claimZjson_payload)Ú	__class__r   r   r.   #   s    


zPyJWT.encodeÚ Tc                sà   |r| rt jd
tƒ | j|ƒ\}}}	}
|d kr:d|i}n|jd|ƒ tt| ƒj|f|||dœ|—Ž}ytj	|jdƒƒ}W n. t
k
r¨ } ztd| ƒ‚W Y d d }~X nX t|tƒs¼tdƒ‚|rÜt| j|ƒ}| j||f|Ž |S )Nz.It is strongly recommended that you pass in a z;value for the "algorithms" argument when calling decode(). z4This argument will be mandatory in a future version.r   )r2   Ú
algorithmsÚoptionszutf-8zInvalid payload string: %sz-Invalid payload string: must be a json objectziIt is strongly recommended that you pass in a value for the "algorithms" argument when calling decode(). z�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.)ÚwarningsÚwarnÚDeprecationWarningÚ_loadÚ
setdefaultr/   r   Údecoder,   ÚloadsÚ
ValueErrorr   r(   r   r   r7   Ú_validate_claims)r0   Zjwtr2   Zverifyr6   r7   Úkwargsr1   Zsigning_inputÚheaderZ	signatureZdecodedÚeZmerged_options)r4   r   r   r=   :   s*    
 


zPyJWT.decoder   c             K   sþ   d|kr$|j ddƒ|d< tjdtƒ t|tƒr6|jƒ }t|ttd ƒt	fƒsRt
dƒ‚| j||ƒ ttjƒ jƒ ƒ}d|krŽ|j dƒrŽ| j|||ƒ d|kr®|j d	ƒr®| j|||ƒ d
|krÎ|j dƒrÎ| j|||ƒ |j dƒrä| j||ƒ |j dƒrú| j||ƒ 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   )r*   r8   r9   r:   r(   r   Ztotal_secondsr   Útyper   r)   Ú_validate_required_claimsr   r   Zutcnowr+   Ú_validate_iatÚ_validate_nbfÚ_validate_expÚ_validate_issÚ_validate_aud)r0   r1   r7   ÚaudienceÚissuerÚleewayrA   Únowr   r   r   r@   ]   s(    


zPyJWT._validate_claimsc             C   sd   |j dƒr |j dƒd kr tdƒ‚|j dƒr@|j dƒd kr@tdƒ‚|j dƒr`|j dƒd kr`tdƒ‚d S )Nr   r"   r   r#   r   r$   )r*   r   )r0   r1   r7   r   r   r   rE      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.)Úintr?   r   )r0   r1   rN   rM   r   r   r   rF   ‰   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))rO   r?   r   r   )r0   r1   rN   rM   r$   r   r   r   rG   �   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)rO   r?   r   r   )r0   r1   rN   rM   r"   r   r   r   rH   ˜   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 ƒƒrˆtdƒ‚t|tƒr˜|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   | ]}|ˆ kV  qd S )Nr   )rQ   rP   )Úaudience_claimsr   r   rS   ¼   s    )r   r   r(   r   ÚlistÚany)r0   r1   rK   r   )rT   r   rJ   ¢   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   )r0   r1   rL   r   r   r   rI   ¿   s    zPyJWT._validate_iss)r!   NN)r5   TNN)NNr   )Ú__name__Ú
__module__Ú__qualname__Zheader_typeÚstaticmethodr    r.   r=   r@   rE   rF   rG   rH   rJ   rI   Ú__classcell__r   r   )r4   r   r      s    # 
!
	
r   )!r,   r8   Zcalendarr   Úcollectionsr   r   r   r   Zapi_jwsr   r6   r	   r
   Úcompatr   Ú
exceptionsr   r   r   r   r   r   r   Zutilsr   r   Z_jwt_global_objr.   r=   Zregister_algorithmZunregister_algorithmZget_unverified_headerr   r   r   r   Ú<module>   s"   $ 9