U
    h                     @   sn   d dl mZmZ d dlmZmZ d dlmZ G dd deZG dd dZG dd	 d	eZ	G d
d deZ
dS )    )ABCabstractmethod)datetimetimezone)InvalidTokenSchemaErrc                   @   sz   e Zd ZeedddZeedddZeeedddZ	eedd	d
Z
eedddZeedddZdS )TokenInterfacereturnc                 C   s   d S N selfr   r   4/tmp/pip-unpacked-wheel-4avdqdik/redis/auth/token.py
is_expired   s    zTokenInterface.is_expiredc                 C   s   d S r
   r   r   r   r   r   ttl   s    zTokenInterface.ttlkeyr	   c                 C   s   d S r
   r   r   r   r   r   r   try_get   s    zTokenInterface.try_getc                 C   s   d S r
   r   r   r   r   r   	get_value   s    zTokenInterface.get_valuec                 C   s   d S r
   r   r   r   r   r   get_expires_at_ms   s    z TokenInterface.get_expires_at_msc                 C   s   d S r
   r   r   r   r   r   get_received_at_ms   s    z!TokenInterface.get_received_at_msN)__name__
__module____qualname__r   boolr   floatr   strr   r   r   r   r   r   r   r   r      s   r   c                   @   s6   e Zd ZedddZedddZedddZd	S )
TokenResponsetokenc                 C   s
   || _ d S r
   _token)r   r    r   r   r   __init__"   s    zTokenResponse.__init__r   c                 C   s   | j S r
   r!   r   r   r   r   	get_token%   s    zTokenResponse.get_tokenc                 C   s   | j  | j   S r
   )r"   r   r   r   r   r   r   
get_ttl_ms(   s    zTokenResponse.get_ttl_msN)r   r   r   r   r#   r$   r   r%   r   r   r   r   r   !   s   r   c                   @   sx   e Zd ZeeeeddddZedddZeddd	Z	eed
ddZ
edddZedddZedddZdS )SimpleTokenN)valueexpires_at_msreceived_at_msclaimsr	   c                 C   s   || _ || _|| _|| _d S r
   )r'   
expires_atreceived_atr*   )r   r'   r(   r)   r*   r   r   r   r#   -   s    zSimpleToken.__init__r   c                 C   s(   | j dkrdS | j ttj d  S )N  )r+   r   nowr   utc	timestampr   r   r   r   r   5   s    
zSimpleToken.ttlc                 C   s   | j dkrdS |  dkS )Nr-   Fr   )r+   r   r   r   r   r   r   ;   s    
zSimpleToken.is_expiredr   c                 C   s   | j |S r
   )r*   getr   r   r   r   r   A   s    zSimpleToken.try_getc                 C   s   | j S r
   )r'   r   r   r   r   r   D   s    zSimpleToken.get_valuec                 C   s   | j S r
   )r+   r   r   r   r   r   G   s    zSimpleToken.get_expires_at_msc                 C   s   | j S r
   )r,   r   r   r   r   r   J   s    zSimpleToken.get_received_at_ms)r   r   r   r   r   dictr#   r   r   r   r   r   r   r   r   r   r   r   r&   ,   s      r&   c                   @   s~   e Zd ZdhZedddZedddZeddd	Z	eed
ddZ
edddZedddZedddZdd ZdS )JWTokenexpr   c              
   C   s   zdd l }W n8 tk
rD } ztd| jj d|W 5 d }~X Y nX || _|j| jddi|| jdgd| _| 	  d S )Nr   z"The PyJWT library is required for .Zverify_signatureFZalg)optionsZ
algorithms)
jwtImportError	__class__r   _valuedecodeZget_unverified_headerr2   _decoded_validate_token)r   r    r8   Zier   r   r   r#   Q   s    zJWToken.__init__r   c                 C   s8   | j d }|dkrdS | j d d ttj d kS )Nr5   r-   Fr.   r=   r   r/   r   r0   r1   r   r5   r   r   r   r   `   s
    
 zJWToken.is_expiredc                 C   s8   | j d }|dkrdS | j d d ttj d  S )Nr5   r-   r.   r?   r@   r   r   r   r   i   s
    
 zJWToken.ttlr   c                 C   s   | j |S r
   )r=   r2   r   r   r   r   r   r   s    zJWToken.try_getc                 C   s   | j S r
   )r;   r   r   r   r   r   u   s    zJWToken.get_valuec                 C   s   t | jd d S )Nr5   r.   )r   r=   r   r   r   r   r   x   s    zJWToken.get_expires_at_msc                 C   s   t tj d S )Nr.   )r   r/   r   r0   r1   r   r   r   r   r   {   s    zJWToken.get_received_at_msc                 C   s8   dd | j  D }t| j| dkr4t| j| d S )Nc                 S   s   h | ]}|qS r   r   ).0xr   r   r   	<setcomp>   s     z*JWToken._validate_token.<locals>.<setcomp>r   )r=   keyslenREQUIRED_FIELDSr   )r   Zactual_fieldsr   r   r   r>   ~   s    zJWToken._validate_tokenN)r   r   r   rF   r   r#   r   r   r   r   r   r   r   r   r>   r   r   r   r   r4   N   s   		r4   N)abcr   r   r   r   Zredis.auth.errr   r   r   r&   r4   r   r   r   r   <module>   s   "