o
    <‘ðiõ  ã                   @   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                   @   s|   e Zd Zedefdd„ƒZedefdd„ƒZededefdd„ƒZ	edefd	d
„ƒZ
edefdd„ƒZedefdd„ƒZdS )ÚTokenInterfaceÚreturnc                 C   ó   d S ©N© ©Úselfr   r   úO/root/parts/websockify/install/lib/python3.10/site-packages/redis/auth/token.pyÚ
is_expired   ó   zTokenInterface.is_expiredc                 C   r	   r
   r   r   r   r   r   Úttl   r   zTokenInterface.ttlÚkeyc                 C   r	   r
   r   ©r   r   r   r   r   Útry_get   r   zTokenInterface.try_getc                 C   r	   r
   r   r   r   r   r   Ú	get_value   r   zTokenInterface.get_valuec                 C   r	   r
   r   r   r   r   r   Úget_expires_at_ms   r   z TokenInterface.get_expires_at_msc                 C   r	   r
   r   r   r   r   r   Úget_received_at_ms   r   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defdd„Zdefdd„Zdef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   ó   | j S r
   r    r   r   r   r   Ú	get_token%   ó   zTokenResponse.get_tokenc                 C   s   | j  ¡ | j  ¡  S r
   )r!   r   r   r   r   r   r   Ú
get_ttl_ms(   ó   zTokenResponse.get_ttl_msN)r   r   r   r   r"   r$   r   r&   r   r   r   r   r   !   s    r   c                
   @   s‚   e Zd Zdededededdf
dd„Zdefd	d
„Zdefdd„Z	dedefdd„Z
defdd„Zdefdd„Zdefdd„ZdS )ÚSimpleTokenÚvalueÚexpires_at_msÚreceived_at_msÚclaimsr   Nc                 C   s   || _ || _|| _|| _d S r
   )r)   Ú
expires_atÚreceived_atr,   )r   r)   r*   r+   r,   r   r   r   r"   -   s   
zSimpleToken.__init__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   ó   | j  |¡S r
   )r,   Úgetr   r   r   r   r   A   ó   zSimpleToken.try_getc                 C   r#   r
   )r)   r   r   r   r   r   D   r%   zSimpleToken.get_valuec                 C   r#   r
   )r-   r   r   r   r   r   G   r%   zSimpleToken.get_expires_at_msc                 C   r#   r
   )r.   r   r   r   r   r   J   r%   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defdd„Zdefdd„Zdefdd	„Z	d
edefdd„Z
defdd„Zdefdd„Zdefdd„Zdd„ ZdS )ÚJWTokenÚexpr   c              
   C   sv   zdd l }W n ty } ztd| jj› d�ƒ|‚d }~ww || _|j| jddi| | j¡ d¡gd�| _|  	¡  d S )Nr   z"The PyJWT library is required for Ú.Úverify_signatureFÚalg)ÚoptionsÚ
algorithms)
ÚjwtÚImportErrorÚ	__class__r   Ú_valueÚdecodeÚget_unverified_headerr5   Ú_decodedÚ_validate_token)r   r   r?   Ú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 )Nr9   r/   Fr0   ©rE   r   r1   r   r2   r3   ©r   r9   r   r   r   r   `   ó
   
 ÿzJWToken.is_expiredc                 C   s8   | j d }|dkrdS | j d d t tj¡ ¡ d  S )Nr9   r/   r0   rH   rI   r   r   r   r   i   rJ   zJWToken.ttlr   c                 C   r4   r
   )rE   r5   r   r   r   r   r   r   r6   zJWToken.try_getc                 C   r#   r
   )rB   r   r   r   r   r   u   r%   zJWToken.get_valuec                 C   s   t | jd d ƒS )Nr9   r0   )r   rE   r   r   r   r   r   x   s   zJWToken.get_expires_at_msc                 C   s   t  tj¡ ¡ d S )Nr0   )r   r1   r   r2   r3   r   r   r   r   r   {   r'   zJWToken.get_received_at_msc                 C   s8   dd„ | j  ¡ D ƒ}t| j| ƒdkrt| j| ƒ‚d S )Nc                 S   s   h | ]}|’qS r   r   )Ú.0Úxr   r   r   Ú	<setcomp>   s    z*JWToken._validate_token.<locals>.<setcomp>r   )rE   ÚkeysÚlenÚREQUIRED_FIELDSr   )r   Úactual_fieldsr   r   r   rF   ~   s   ÿzJWToken._validate_tokenN)r   r   r   rP   r   r"   r   r   r   r   r   r   r   r   rF   r   r   r   r   r8   N   s    		r8   N)Úabcr   r   r   r   Úredis.auth.errr   r   r   r(   r8   r   r   r   r   Ú<module>   s    "