o
    (S-g7  ã                   @   sˆ   d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
 ddl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)Úacheck_passwordÚcheck_passwordÚis_password_usableÚmake_password)Úmodels)Úsalted_hmac)Úgettext_lazyc                   @   s    e Zd Ze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.
        Ú ú@é   )ÚstripÚrsplitÚ
ValueErrorÚlower)ÚclsÚemailÚ
email_nameÚdomain_part© r   ú\/var/www/html/map_library/venv/lib/python3.10/site-packages/django/contrib/auth/base_user.pyÚnormalize_email   s   üzBaseUserManager.normalize_emailc                 C   s   | j di | jj|i¤ŽS )Nr   )ÚgetÚmodelÚUSERNAME_FIELD)ÚselfÚusernamer   r   r   Úget_by_natural_key$   s   z"BaseUserManager.get_by_natural_keyN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr   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%„ Zd,d&d'„Zed(d)„ ƒZed*d+„ ƒZ‡  Z S )-ÚAbstractBaseUserÚpasswordé€   )Ú
max_lengthz
last loginT)ÚblankÚnullNc                   @   s   e Zd ZdZdS )zAbstractBaseUser.MetaTN)r    r!   r"   Úabstractr   r   r   r   ÚMeta4   s    r+   c                 C   ó   |   ¡ S ©N©Úget_username©r   r   r   r   Ú__str__7   s   zAbstractBaseUser.__str__c                    s8   t ƒ j|i |¤Ž | jd urt | j| ¡ d | _d S d S r-   )ÚsuperÚsaveÚ	_passwordr   Úpassword_changed)r   ÚargsÚkwargs©Ú	__class__r   r   r3   =   s
   

þzAbstractBaseUser.savec                 C   s   t | | jƒS )z"Return the username for this User.)Úgetattrr   r0   r   r   r   r/   C   s   zAbstractBaseUser.get_usernamec                 C   s   t | | j|  |  ¡ ¡ƒ d S r-   )Úsetattrr   Únormalize_usernamer/   r0   r   r   r   ÚcleanG   s   zAbstractBaseUser.cleanc                 C   s
   |   ¡ fS r-   r.   r0   r   r   r   Únatural_keyJ   s   
zAbstractBaseUser.natural_keyc                 C   ó   dS )zj
        Always return False. This is a way of comparing User objects to
        anonymous users.
        Fr   r0   r   r   r   Úis_anonymousM   ó   zAbstractBaseUser.is_anonymousc                 C   r?   )zt
        Always return True. This is a way to tell if the user has been
        authenticated in templates.
        Tr   r0   r   r   r   Úis_authenticatedU   rA   z!AbstractBaseUser.is_authenticatedc                 C   s   t |ƒ| _|| _d S r-   )r   r%   r4   )r   Úraw_passwordr   r   r   Úset_password]   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%   )Úupdate_fields)rD   r4   r3   ©rC   r0   r   r   Úsetterg   s   
z/AbstractBaseUser.check_password.<locals>.setter)r   r%   ©r   rC   rH   r   r0   r   r   a   s   zAbstractBaseUser.check_passwordc                 ƒ   s"   �‡ fdd„}t |ˆ j|ƒI dH S )zSee check_password().c                 “   s*   �ˆ   | ¡ d ˆ _ˆ jdgd�I d H  d S rE   )rD   r4   ÚasaverG   r0   r   r   rH   r   s   €
z0AbstractBaseUser.acheck_password.<locals>.setterN)r   r%   rI   r   r0   r   r   o   s   €z AbstractBaseUser.acheck_passwordc                 C   s   t d ƒ| _d S r-   )r   r%   r0   r   r   r   Úset_unusable_passwordz   s   z&AbstractBaseUser.set_unusable_passwordc                 C   s
   t | jƒS )zX
        Return False if set_unusable_password() has been called for this user.
        )r   r%   r0   r   r   r   Úhas_usable_password~   s   
z$AbstractBaseUser.has_usable_passwordc                 C   r,   )z7
        Return an HMAC of the password field.
        )Ú_get_session_auth_hashr0   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   ÚSECRET_KEY_FALLBACKSrM   )r   Ú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)rO   Ú	algorithm)r	   r%   Ú	hexdigest)r   rO   Úkey_saltr   r   r   rM   Ž   s   üûz'AbstractBaseUser._get_session_auth_hashc                 C   s   z| j W S  ty   Y dS w )Nr   )Ú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   r<   ž   s
   ÿÿýz#AbstractBaseUser.normalize_usernamer-   )!r    r!   r"   r   Ú	CharFieldÚ_r%   ÚDateTimeFieldÚ
last_loginÚ	is_activeÚREQUIRED_FIELDSr4   r+   r1   r3   r/   r=   r>   Úpropertyr@   rB   rD   r   r   rK   rL   rN   rR   rM   r#   rY   r<   Ú__classcell__r   r   r8   r   r$   (   s8    


	
r$   )Ú__doc__r]   Údjango.confr   Údjango.contrib.authr   Údjango.contrib.auth.hashersr   r   r   r   Ú	django.dbr   Údjango.utils.cryptor	   Údjango.utils.translationr
   r`   ÚManagerr   ÚModelr$   r   r   r   r   Ú<module>   s    