U
    d                     @   s$  d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ eeee
e f eeeeee	eeee eeeedddZeeeee
e f eeeeeeeedddZdS )    N)datetime)	timedelta)timezone)compare_digest)JSONEncoder)Any)Iterable)List)Type)Union)	CSRFError)JWTDecodeError)ExpiresDelta)Fresh)	algorithmaudienceclaim_overridescsrfexpires_deltafreshheader_overridesidentityidentity_claim_keyissuerjson_encodersecret
token_typenbfreturnc              
   C   s   t tj}t|tr$t || }d|d|dtt	 d|||i}|rP||d< |rdtt	 |d< |rp||d< |	r||	|d< |r|| |d	< |r|
| tj||| |
|d
S )Nr   Ziatjtityper   r   ZaudZissexp)r   headers)r   nowr   utc
isinstancer   	timestampstruuidZuuid4updatejwtencode)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   Z
token_data r,   =/tmp/pip-unpacked-wheel-1sqzkeyl/flask_jwt_extended/tokens.py_encode_jwt   sB    
   
  
r.   )
algorithmsallow_expiredr   
csrf_valueencoded_tokenr   r   leewayr   
verify_audr   c
              	   C   s   d|	i}
|rd|
d< t j||| ||||
d}||krBtd|d|krRd|d< d|krbd|d< d	|krrd |d	< |rd
|krtdt|d
 |std|S )Nr4   FZ
verify_exp)r/   r   r   r3   optionszMissing claim: {}r    accessr   r   r   zMissing claim: csrfz&CSRF double submit tokens do not match)r*   decoder   formatr   r   )r/   r0   r   r1   r2   r   r   r3   r   r4   r5   Zdecoded_tokenr,   r,   r-   _decode_jwtM   s4    r9   )r(   r   r   r   hmacr   jsonr   typingr   r   r	   r
   r   r*   Zflask_jwt_extended.exceptionsr   r   Zflask_jwt_extended.typingr   r   r'   dictboolr.   intr9   r,   r,   r,   r-   <module>   sV   9