a
    xd                     @   s   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
 eeddZe
 Zg dZG d	d
 d
ejZdd Zdd Zdd Zdd Ze Zede dS )    )settings)models)gettext_lazy)get_user_model)get_token_generatorAUTH_USER_MODELz	auth.User)ResetPasswordToken$get_password_reset_token_expiry_timeget_password_reset_lookup_fieldclear_expiredc                       s   e Zd ZG dd dZedd ZejddZej	e
dejedd	Zejded
dZejedddddZejedddddZejdeddddZ fddZdd Z  ZS )r   c                   @   s   e Zd ZedZedZdS )zResetPasswordToken.MetazPassword Reset TokenzPassword Reset TokensN)__name__
__module____qualname___verbose_nameZverbose_name_plural r   r   X/var/www/html/Ranjet/env/lib/python3.9/site-packages/django_rest_passwordreset/models.pyMeta   s   r   c                   C   s   t  S )zF generates a pseudo random code using os.urandom and binascii.hexlify )TOKEN_GENERATOR_CLASSZgenerate_tokenr   r   r   r   generate_key   s    zResetPasswordToken.generate_keyT)Zprimary_keyZpassword_reset_tokensz9The User which is associated to this password reset token)Zrelated_nameZ	on_deleter   zWhen was this token generated)Zauto_now_addr   ZKey@   )
max_lengthZdb_indexuniquezThe IP address of this session )defaultblanknull   zHTTP User Agent)r   r   r   r   c                    s&   | j s|  | _ tt| j|i |S )N)keyr   superr   save)selfargskwargs	__class__r   r   r    I   s    
zResetPasswordToken.savec                 C   s   dj | jdS )Nz$Password reset token for user {user})user)formatr&   r!   r   r   r   __str__N   s    zResetPasswordToken.__str__)r   r   r   r   staticmethodr   r   Z	AutoFieldidZ
ForeignKeyr   ZCASCADEr   r&   ZDateTimeFieldZ
created_atZ	CharFieldr   ZGenericIPAddressField
ip_address
user_agentr    r)   __classcell__r   r   r$   r   r      sH   
r   c                   C   s   t tddS )z
    Returns the password reset token expirty time in hours (default: 24)
    Set Django SETTINGS.DJANGO_REST_MULTITOKENAUTH_RESET_TOKEN_EXPIRY_TIME to overwrite this time
    :return: expiry time
    Z2DJANGO_REST_MULTITOKENAUTH_RESET_TOKEN_EXPIRY_TIME   getattrr   r   r   r   r   r	   R   s    r	   c                   C   s   t tddS )z
    Returns the password reset lookup field (default: email)
    Set Django SETTINGS.DJANGO_REST_LOOKUP_FIELD to overwrite this time
    :return: lookup field
    ZDJANGO_REST_LOOKUP_FIELDemailr0   r   r   r   r   r
   \   s    r
   c                 C   s   t jj| d  dS )zQ
    Remove all expired tokens
    :param expiry_time: Token expiration time
    )Zcreated_at__lteN)r   Zobjectsfilterdelete)Zexpiry_timer   r   r   r   e   s    r   c                 C   s&   | j s
dS ttddr|  S dS d S )NFZ2DJANGO_REST_MULTITOKENAUTH_REQUIRE_USABLE_PASSWORDT)Z	is_activer1   r   Zhas_usable_passwordr(   r   r   r   eligible_for_resetl   s
    r5   N)Zdjango.confr   Z	django.dbr   Zdjango.utils.translationr   r   Zdjango.contrib.authr   Z django_rest_passwordreset.tokensr   r1   r   r   __all__ZModelr   r	   r
   r   r5   Z	UserModelZadd_to_classr   r   r   r   <module>   s   8
	