
    `f                         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
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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)settings)password_validation)acheck_passwordcheck_passwordis_password_usablemake_password)models)get_random_stringsalted_hmac)RemovedInDjango51Warning)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       O/var/www/html/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                 Z    t          j        dt          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
stacklevel)warningswarnr   r
   )selflengthallowed_charss      r   make_random_passwordz$BaseUserManager.make_random_password%   s8     	C-	
 	
 	
 	

 !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_key6   s$    tx@@4:4h?@@@r*   N)r   r   )__name__
__module____qualname__classmethodr   r)   r1   r,   r*   r   r   r      s]          [ O8 8 8 8"A A A A Ar*   r   c                   T    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d Zd Zd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)r2   r3   r4   abstractr,   r*   r   Metar>   F   s        r*   r@   c                 *    |                                  S Nget_usernamer&   s    r   __str__zAbstractBaseUser.__str__I   s      """r*   c                      t                      j        |i | | j        #t          j        | j        |            d | _        d S d S rB   )supersave	_passwordr   password_changed)r&   argskwargs	__class__s      r   rI   zAbstractBaseUser.saveL   sN    d%f%%%>%0FFF!DNNN &%r*   c                 ,    t          | | j                  S )z"Return the username for this User.)getattrr/   rE   s    r   rD   zAbstractBaseUser.get_usernameR   s    tT0111r*   c                 |    t          | | j        |                     |                                                      d S rB   )setattrr/   normalize_usernamerD   rE   s    r   cleanzAbstractBaseUser.cleanV   s7    d)4+B+B4CTCTCVCV+W+WXXXXXr*   c                 ,    |                                  fS rB   rC   rE   s    r   natural_keyzAbstractBaseUser.natural_keyY   s    !!##%%r*   c                     dS )zj
        Always return False. This is a way of comparing User objects to
        anonymous users.
        Fr,   rE   s    r   is_anonymouszAbstractBaseUser.is_anonymous\   s	     ur*   c                     dS )zt
        Always return True. This is a way to tell if the user has been
        authenticated in templates.
        Tr,   rE   s    r   is_authenticatedz!AbstractBaseUser.is_authenticatedd   s	     tr*   c                 <    t          |          | _        || _        d S rB   )r   r8   rJ   )r&   raw_passwords     r   set_passwordzAbstractBaseUser.set_passwordl   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 Nr8   )update_fields)r]   rJ   rI   r\   r&   s    r   setterz/AbstractBaseUser.check_password.<locals>.setterv   s:    l+++!DNIIZLI11111r*   )r   r8   r&   r\   rc   s   `  r   r   zAbstractBaseUser.check_passwordp   s2    	2 	2 	2 	2 	2 lDM6BBBr*   c                 J    K    fd}t          | j        |           d{V S )zSee check_password().c                 ~   K                        |            d _                            dg           d {V  d S r`   )r]   rJ   asaverb   s    r   rc   z0AbstractBaseUser.acheck_password.<locals>.setter   sP      l+++!DN**J<*88888888888r*   N)r   r8   rd   s   `  r   r   z AbstractBaseUser.acheck_password~   sH      	9 	9 	9 	9 	9 %\4=&IIIIIIIIIr*   c                 .    t          d           | _        d S rB   )r   r8   rE   s    r   set_unusable_passwordz&AbstractBaseUser.set_unusable_password   s    %d++r*   c                 *    t          | j                  S )zX
        Return False if set_unusable_password() has been called for this user.
        )r   r8   rE   s    r   has_usable_passwordz$AbstractBaseUser.has_usable_password   s     "$-000r*   c                 *    |                                  S )z7
        Return an HMAC of the password field.
        )_get_session_auth_hashrE   s    r   get_session_auth_hashz&AbstractBaseUser.get_session_auth_hash   s     **,,,r*   c              #   X   K   t           j        D ]}|                     |          V  d S )N)secret)r   SECRET_KEY_FALLBACKSrm   )r&   fallback_secrets     r   get_session_auth_fallback_hashz/AbstractBaseUser.get_session_auth_fallback_hash   sF      '< 	F 	FO--_-EEEEEE	F 	Fr*   c                 Z    d}t          || j        |d                                          S )NzAdjango.contrib.auth.models.AbstractBaseUser.get_session_auth_hashsha256)rp   	algorithm)r   r8   	hexdigest)r&   rp   key_salts      r   rm   z'AbstractBaseUser._get_session_auth_hash   s7    V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   r0   s     r   rS   z#AbstractBaseUser.normalize_username   s0     (C((K!&(333	
r*   rB   )!r2   r3   r4   r	   	CharField_r8   DateTimeField
last_login	is_activeREQUIRED_FIELDSrJ   r@   rF   rI   rD   rT   rV   propertyrX   rZ   r]   r   r   ri   rk   rn   rs   rm   r5   r|   rS   __classcell__)rN   s   @r   r7   r7   :   s       v*#>>>H%%aaooTMMMJIO I       # # #" " " " "2 2 2Y Y Y& & &   X   X& & &C C C	J 	J 	J, , ,1 1 1- - -F F F      [ 
 
 [
 
 
 
 
r*   r7   )__doc__r   r$   django.confr   django.contrib.authr   django.contrib.auth.hashersr   r   r   r   	django.dbr	   django.utils.cryptor
   r   django.utils.deprecationr   django.utils.translationr   r   Managerr   Modelr7   r,   r*   r   <module>r      sK                     3 3 3 3 3 3                  > > > > > > > > = = = = = = 6 6 6 6 6 6!A !A !A !A !Afn !A !A !AHy
 y
 y
 y
 y
v| y
 y
 y
 y
 y
r*   