
    +h                         d Z ddl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  G d d	e	j                  Z G d
 de	j                  ZdS )zg
This module allows importing AbstractBaseUser even when django.contrib.auth is
not in INSTALLED_APPS.
    N)password_validation)check_passwordis_password_usablemake_password)models)get_random_stringsalted_hmac)gettext_lazyc                   6    e Zd Zed             Z	 	 ddZd ZdS )BaseUserManagerc                     |pd}	 |                                                     dd          \  }}|dz   |                                z   }n# t          $ r Y nw xY w|S )zS
        Normalize the email address by lowercasing the domain part of it.
         @   )striprsplitlower
ValueError)clsemail
email_namedomain_parts       a/var/www/html/e360mart/e360mart_env/lib/python3.11/site-packages/django/contrib/auth/base_user.pynormalize_emailzBaseUserManager.normalize_email   s|    
 	;&+kkmm&:&:3&B&B#J ${'8'8':'::EE  	 	 	D	 s   +A 
AA
   7abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789c                 "    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.
        )r   )selflengthallowed_charss      r   make_random_passwordz$BaseUserManager.make_random_password    s     !777    c                 4     | j         di | j        j        |iS )N )getmodelUSERNAME_FIELD)r   usernames     r   get_by_natural_keyz"BaseUserManager.get_by_natural_key+   s$    tx@@4:4h?@@@r"   N)r   r   )__name__
__module____qualname__classmethodr   r!   r)   r$   r"   r   r   r      s_          [ +-,6	8 	8 	8 	8A A A A Ar"   r   c                   @    e Zd Z ej         ed          d          Z ej         ed          dd          ZdZ	g Z
dZ G d d	          Zd
 Z fdZd Zd Zd Zed             Zed             Zd Zd Zd Zd Zd Zed             Zed             Z xZS )AbstractBaseUserpassword   )
max_lengthz
last loginT)blanknullNc                       e Zd ZdZdS )AbstractBaseUser.MetaTN)r*   r+   r,   abstractr$   r"   r   Metar6   ;   s        r"   r8   c                 *    |                                  S Nget_usernamer   s    r   __str__zAbstractBaseUser.__str__>   s      """r"   c                      t                      j        |i | | j        #t          j        | j        |            d | _        d S d S r:   )supersave	_passwordr   password_changed)r   argskwargs	__class__s      r   rA   zAbstractBaseUser.saveA   sN    d%f%%%>%0FFF!DNNN &%r"   c                 ,    t          | | j                  S )z"Return the username for this User.)getattrr'   r=   s    r   r<   zAbstractBaseUser.get_usernameG   s    tT0111r"   c                 |    t          | | j        |                     |                                                      d S r:   )setattrr'   normalize_usernamer<   r=   s    r   cleanzAbstractBaseUser.cleanK   s7    d)4+B+B4CTCTCVCV+W+WXXXXXr"   c                 ,    |                                  fS r:   r;   r=   s    r   natural_keyzAbstractBaseUser.natural_keyN   s    !!##%%r"   c                     dS )zj
        Always return False. This is a way of comparing User objects to
        anonymous users.
        Fr$   r=   s    r   is_anonymouszAbstractBaseUser.is_anonymousQ   s	     ur"   c                     dS )zt
        Always return True. This is a way to tell if the user has been
        authenticated in templates.
        Tr$   r=   s    r   is_authenticatedz!AbstractBaseUser.is_authenticatedY   s	     tr"   c                 <    t          |          | _        || _        d S r:   )r   r0   rB   )r   raw_passwords     r   set_passwordzAbstractBaseUser.set_passworda   s    %l33%r"   c                 :      fd}t          | j        |          S )z~
        Return a boolean of whether the raw_password was correct. Handles
        hashing formats behind the scenes.
        c                 n                         |            d _                            dg           d S )Nr0   )update_fields)rU   rB   rA   )rT   r   s    r   setterz/AbstractBaseUser.check_password.<locals>.setterj   s:    l+++!DNIIZLI11111r"   )r   r0   )r   rT   rY   s   `  r   r   zAbstractBaseUser.check_passworde   s2    
	2 	2 	2 	2 	2
 lDM6BBBr"   c                 .    t          d           | _        d S r:   )r   r0   r=   s    r   set_unusable_passwordz&AbstractBaseUser.set_unusable_passwordq   s    %d++r"   c                 *    t          | j                  S )zX
        Return False if set_unusable_password() has been called for this user.
        )r   r0   r=   s    r   has_usable_passwordz$AbstractBaseUser.has_usable_passwordu   s     "$-000r"   c                 X    d}t          || j        d                                          S )z7
        Return an HMAC of the password field.
        zAdjango.contrib.auth.models.AbstractBaseUser.get_session_auth_hashsha256)	algorithm)r	   r0   	hexdigest)r   key_salts     r   get_session_auth_hashz&AbstractBaseUser.get_session_auth_hash{   s7     WM
 
 
 )++		r"   c                 4    	 | j         S # t          $ r Y dS w xY w)Nr   )EMAIL_FIELDAttributeError)r   s    r   get_email_field_namez%AbstractBaseUser.get_email_field_name   s1    	?" 	 	 	77	s   	 
c                 Z    t          |t                    rt          j        d|          n|S )NNFKC)
isinstancestrunicodedata	normalize)r   r(   s     r   rK   z#AbstractBaseUser.normalize_username   s*    :DXs:S:Sa{$VX666Yaar"   )r*   r+   r,   r   	CharField_r0   DateTimeField
last_login	is_activeREQUIRED_FIELDSrB   r8   r>   rA   r<   rL   rN   propertyrP   rR   rU   r   r[   r]   rc   r-   rg   rK   __classcell__)rF   s   @r   r/   r/   /   s       v*#>>>H%%aaooTMMMJIO I       # # #" " " " "2 2 2Y Y Y& & &   X   X& & &
C 
C 
C, , ,1 1 1	 	 	   [ b b [b b b b br"   r/   )__doc__rl   django.contrib.authr   django.contrib.auth.hashersr   r   r   	django.dbr   django.utils.cryptor   r	   django.utils.translationr
   ro   Managerr   Modelr/   r$   r"   r   <module>r~      s        3 3 3 3 3 3                > > > > > > > > 6 6 6 6 6 6A A A A Afn A A A>`b `b `b `b `bv| `b `b `b `b `br"   