o
    ÒŸŽiÑ  ã                   @   sœ   d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZ dd	lmZ G d
d„ dejƒZG dd„ dejƒZdS )zg
This module allows importing AbstractBaseUser even when django.contrib.auth is
not in INSTALLED_APPS.
é    N)Úsettings)Úpassword_validation)Úcheck_passwordÚis_password_usableÚmake_password)Úmodels)Úget_random_stringÚsalted_hmac)ÚRemovedInDjango51Warning)Úgettext_lazyc                   @   s.   e Zd Zedd„ ƒZ		d
dd„Zdd„ Zd	S )ÚBaseUserManagerc                 C   sJ   |pd}z|  ¡  dd¡\}}W n
 ty   Y |S w |d | ¡  }|S )zS
        Normalize the email address by lowercasing the domain part of it.
        Ú ú@é   N)ÚstripÚrsplitÚ
ValueErrorÚlower)ÚclsÚemailZ
email_nameZdomain_part© r   úgC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\site-packages\django/contrib/auth/base_user.pyÚnormalize_email   s   üzBaseUserManager.normalize_emailé
   Ú7abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789c                 C   s   t jdtdd� t||ƒS )zë
        Generate a random password with the given length and given
        allowed_chars. The default value of allowed_chars does not have "I" or
        "O" or letters and digits that look similar -- just to avoid confusion.
        z5BaseUserManager.make_random_password() is deprecated.é   )ÚcategoryÚ
stacklevelN)ÚwarningsÚwarnr
   r   )ÚselfÚlengthÚallowed_charsr   r   r   Úmake_random_password$   s   
ý
z$BaseUserManager.make_random_passwordc                 C   s   | j di | jj|i¤ŽS )Nr   )ÚgetÚmodelÚUSERNAME_FIELD)r    Úusernamer   r   r   Úget_by_natural_key5   s   z"BaseUserManager.get_by_natural_keyN)r   r   )Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   r#   r(   r   r   r   r   r      s    

ýr   c                       sæ   e Zd Zejedƒdd�Zejedƒddd�ZdZ	g Z
dZG dd	„ d	ƒZd
d„ Z‡ fdd„Zdd„ Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd*d$d%„Zed&d'„ ƒZed(d)„ ƒZ‡  ZS )+ÚAbstractBaseUserÚpasswordé€   )Ú
max_lengthz
last loginT)ZblankÚnullNc                   @   s   e Zd ZdZdS )zAbstractBaseUser.MetaTN)r)   r*   r+   Zabstractr   r   r   r   ÚMetaE   s    r2   c                 C   ó   |   ¡ S ©N©Úget_username©r    r   r   r   Ú__str__H   s   zAbstractBaseUser.__str__c                    s8   t ƒ j|i |¤Ž | jd urt | j| ¡ d | _d S d S r4   )ÚsuperÚsaveÚ	_passwordr   Zpassword_changed)r    ÚargsÚkwargs©Ú	__class__r   r   r:   K   s
   

þzAbstractBaseUser.savec                 C   s   t | | jƒS )z"Return the username for this User.N)Úgetattrr&   r7   r   r   r   r6   Q   s   zAbstractBaseUser.get_usernamec                 C   s   t | | j|  |  ¡ ¡ƒ d S r4   )Úsetattrr&   Únormalize_usernamer6   r7   r   r   r   ÚcleanU   s   zAbstractBaseUser.cleanc                 C   s
   |   ¡ fS r4   r5   r7   r   r   r   Únatural_keyX   s   
zAbstractBaseUser.natural_keyc                 C   ó   dS )zj
        Always return False. This is a way of comparing User objects to
        anonymous users.
        FNr   r7   r   r   r   Úis_anonymous[   ó   zAbstractBaseUser.is_anonymousc                 C   rE   )zt
        Always return True. This is a way to tell if the user has been
        authenticated in templates.
        TNr   r7   r   r   r   Úis_authenticatedc   rG   z!AbstractBaseUser.is_authenticatedc                 C   s   t |ƒ| _|| _d S r4   )r   r.   r;   )r    Úraw_passwordr   r   r   Úset_passwordk   s   

zAbstractBaseUser.set_passwordc                    s   ‡ fdd„}t |ˆ j|ƒS )z~
        Return a boolean of whether the raw_password was correct. Handles
        hashing formats behind the scenes.
        c                    s"   ˆ   | ¡ d ˆ _ˆ jdgd� d S )Nr.   )Zupdate_fields)rJ   r;   r:   )rI   r7   r   r   Úsetteru   s   
z/AbstractBaseUser.check_password.<locals>.setterN)r   r.   )r    rI   rK   r   r7   r   r   o   s   zAbstractBaseUser.check_passwordc                 C   s   t d ƒ| _d S r4   )r   r.   r7   r   r   r   Úset_unusable_password}   s   z&AbstractBaseUser.set_unusable_passwordc                 C   s
   t | jƒS )zX
        Return False if set_unusable_password() has been called for this user.
        N)r   r.   r7   r   r   r   Úhas_usable_password�   s   
z$AbstractBaseUser.has_usable_passwordc                 C   r3   )z7
        Return an HMAC of the password field.
        N)Ú_get_session_auth_hashr7   r   r   r   Úget_session_auth_hash‡   s   z&AbstractBaseUser.get_session_auth_hashc                 c   s    � t jD ]	}| j|d�V  qd S )N)Úsecret)r   ZSECRET_KEY_FALLBACKSrN   )r    Zfallback_secretr   r   r   Úget_session_auth_fallback_hash�   s   €
ÿz/AbstractBaseUser.get_session_auth_fallback_hashc                 C   s   d}t || j|dd� ¡ S )NzAdjango.contrib.auth.models.AbstractBaseUser.get_session_auth_hashÚsha256)rP   Ú	algorithm)r	   r.   Ú	hexdigest)r    rP   Zkey_saltr   r   r   rN   ‘   s   üûz'AbstractBaseUser._get_session_auth_hashc                 C   s   z| j W S  ty   Y dS w )Nr   )ZEMAIL_FIELDÚAttributeError)r   r   r   r   Úget_email_field_nameš   s
   ÿz%AbstractBaseUser.get_email_field_namec                 C   s   t |tƒrt d|¡S |S )NÚNFKC)Ú
isinstanceÚstrÚunicodedataÚ	normalize)r   r'   r   r   r   rB   ¡   s
   ÿÿýz#AbstractBaseUser.normalize_usernamer4   ) r)   r*   r+   r   Z	CharFieldÚ_r.   ZDateTimeFieldZ
last_loginZ	is_activeZREQUIRED_FIELDSr;   r2   r8   r:   r6   rC   rD   ÚpropertyrF   rH   rJ   r   rL   rM   rO   rQ   rN   r,   rV   rB   Ú__classcell__r   r   r>   r   r-   9   s6    


	
r-   )Ú__doc__rZ   r   Zdjango.confr   Zdjango.contrib.authr   Zdjango.contrib.auth.hashersr   r   r   Z	django.dbr   Zdjango.utils.cryptor   r	   Zdjango.utils.deprecationr
   Zdjango.utils.translationr   r\   ÚManagerr   ZModelr-   r   r   r   r   Ú<module>   s    $