o
    ÒèFhÿ
  ã                   @   sª   d dl mZ d dlmZ d dlmZ d dlmZ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mZ G dd„ dejƒZG dd„ deƒZG dd„ deƒZdS )é    )Ú	timedelta)Úsha512)Úurandom)ÚOptionalÚUnion)Úsettings)Úget_user_model)Úmodels)Útimezoneé   )ÚAUTH_TOKEN_VALIDITYÚ)REGISTRATION_EMAIL_CONFIRM_TOKEN_VALIDITYc                   @   sú   e Zd ZG dd„ dƒZeZejdd�Zej	e
jdejd�Zejejd�Zdefd	d
„Zedefdd„ƒZddeedf fdd„Zedeƒ defdd„ƒZededeeƒ  fdd„ƒZededed  fdd„ƒZede fdd„ƒZ!e"dedefdd„ƒZ#dS )ÚAbstractTokenc                   @   s   e Zd ZdZdS )zAbstractToken.MetaTN)Ú__name__Ú
__module__Ú__qualname__Úabstract© r   r   úN/var/www/html/loop/nvenv/lib/python3.10/site-packages/rest_authtoken/models.pyÚMeta   s    r   T)Úprimary_keyz
%(class)ss)Úrelated_nameÚ	on_delete)ÚdefaultÚreturnc                 C   s   d  | j| j¡S )Nz{}: {})ÚformatÚuserÚhashed_token©Úselfr   r   r   Ú__str__   s   zAbstractToken.__str__c                 C   s   t  ¡ | j S ©N)r
   ÚnowÚcreatedr   r   r   r   Úage    s   zAbstractToken.ageNÚtokenc                 C   s   |   ¡  dS )z%
        Log this token out.
        N)Údelete)r   r%   r   r   r   Úlogout$   s   zAbstractToken.logoutr   c                 K   s*   t dƒ}| jjd|  |¡|dœ|¤Ž |S )z:
        Create a new random auth token for user.
        é0   )r   r   Nr   )r   ÚobjectsÚcreateÚ_hash_token)Úclsr   Úkwargsr%   r   r   r   Úcreate_token_for_user*   s   þýz#AbstractToken.create_token_for_userc                 C   s   |   |¡}|r
|jS d S r!   )Ú	get_tokenr   ©r,   r%   Ú
auth_tokenr   r   r   Úget_user_for_token6   s   
ÿz AbstractToken.get_user_for_tokenc                 C   sR   z| j  d¡j|  |¡d�}|j| jkr| ¡  W d S |W S  | jy(   Y d S w )Nr   )r   )r)   Úselect_relatedÚgetr+   r$   ÚTOKEN_VALIDITYr&   ÚDoesNotExistr0   r   r   r   r/   <   s   ÿÿzAbstractToken.get_tokenc                 C   s(   t  ¡ | j }| jj|d� ¡ \}}|S )z0
        Clear tokens that are expired.
        )Úcreated__lt)r
   r"   r5   r)   Úfilterr&   )r,   Úvalid_min_creationÚdeleted_countÚdetailr   r   r   Úclear_expired_tokensK   s   z"AbstractToken.clear_expired_tokensc                 C   s   t | ƒ ¡ S )z
        Hash a token.
        )r   Údigest)r%   r   r   r   r+   T   s   zAbstractToken._hash_tokenr!   )$r   r   r   r   r   r5   r	   ÚBinaryFieldr   Ú
ForeignKeyr   ÚAUTH_USER_MODELÚCASCADEr   ÚDateTimeFieldr
   r"   r#   Ústrr    Úpropertyr   r$   r   r'   Úclassmethodr   Úbytesr.   r   r2   r/   Úintr<   Ústaticmethodr+   r   r   r   r   r      s0    ýr   c                   @   s   e Zd ZdS )Ú	AuthTokenN)r   r   r   r   r   r   r   rI   \   s    rI   c                       s8   e Zd ZeZe ¡ Zede	ƒ de
f‡ fdd„ƒZ‡  ZS )ÚEmailConfirmationTokenr   r   c                    s   t ƒ j||jd�S )N)Úemail)Úsuperr.   rK   )r,   r   ©Ú	__class__r   r   r.   e   s   z,EmailConfirmationToken.create_token_for_user)r   r   r   r   r5   r	   Ú
EmailFieldrK   rE   r   rF   r.   Ú__classcell__r   r   rM   r   rJ   `   s
    "rJ   N)Údatetimer   Úhashlibr   Úosr   Útypingr   r   Údjango.confr   Údjango.contrib.authr   Ú	django.dbr	   Údjango.utilsr
   r   r   ÚModelr   rI   rJ   r   r   r   r   Ú<module>   s    N