
    (ph                         S r SSKrSSKrSSKJr  SSKJr  SSKJrJ	r	J
r
Jr  SSKJr  SSKJrJr  SSKJr  SS	KJr   " S
 S\R,                  5      r " S S\R0                  5      rg)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                   8    \ rS rSr\S 5       r  SS jrS rSrg)BaseUserManager   c                     U=(       d    Sn UR                  5       R                  SS5      u  p#US-   UR                  5       -   nU$ ! [         a     U$ f = f)zC
Normalize the email address by lowercasing the domain part of it.
 @   )striprsplitlower
ValueError)clsemail
email_namedomain_parts       P/var/www/html/venv/lib/python3.13/site-packages/django/contrib/auth/base_user.pynormalize_emailBaseUserManager.normalize_email   sg    
 	;&+kkm&:&:3&B#J ${'8'8'::E	  	 		s   "A 
AAc                 L    [         R                  " S[        SS9  [        X5      $ )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_password$BaseUserManager.make_random_password&   s&     	C-	

 !77    c                 R    U R                   " S0 U R                  R                  U0D6$ )N )getmodelUSERNAME_FIELD)r&   usernames     r   get_by_natural_key"BaseUserManager.get_by_natural_key7   s#    xx@4::44h?@@r+   r-   N)
   7abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789)	__name__
__module____qualname____firstlineno__classmethodr   r)   r2   __static_attributes__r-   r+   r   r   r      s'      O8"Ar+   r   c                   2  ^  \ rS rSr\R
                  " \" S5      SS9r\R                  " \" S5      SSS9r	Sr
/ rSr " S	 S
5      rS rU 4S jrS rS rS r\S 5       r\S 5       rS rS rS rS rS rS rS rSS jr\S 5       r\S 5       r Sr!U =r"$ )AbstractBaseUser;   password   )
max_lengthz
last loginT)blanknullNc                       \ rS rSrSrSrg)AbstractBaseUser.MetaG   Tr-   N)r6   r7   r8   r9   abstractr;   r-   r+   r   MetarE   G   s    r+   rH   c                 "    U R                  5       $ Nget_usernamer&   s    r   __str__AbstractBaseUser.__str__J   s      ""r+   c                    > [         TU ]  " U0 UD6  U R                  b)  [        R                  " U R                  U 5        S U l        g g rJ   )supersave	_passwordr   password_changed)r&   argskwargs	__class__s      r   rR   AbstractBaseUser.saveM   s>    d%f%>>%00F!DN &r+   c                 ,    [        X R                  5      $ )z"Return the username for this User.)getattrr0   rM   s    r   rL   AbstractBaseUser.get_usernameS   s    t0011r+   c                 j    [        X R                  U R                  U R                  5       5      5        g rJ   )setattrr0   normalize_usernamerL   rM   s    r   cleanAbstractBaseUser.cleanW   s&    ))4+B+B4CTCTCV+WXr+   c                 $    U R                  5       4$ rJ   rK   rM   s    r   natural_keyAbstractBaseUser.natural_keyZ   s    !!#%%r+   c                     g)zR
Always return False. This is a way of comparing User objects to
anonymous users.
Fr-   rM   s    r   is_anonymousAbstractBaseUser.is_anonymous]   s     r+   c                     g)z\
Always return True. This is a way to tell if the user has been
authenticated in templates.
Tr-   rM   s    r   is_authenticated!AbstractBaseUser.is_authenticatede   s     r+   c                 0    [        U5      U l        Xl        g rJ   )r   r?   rS   )r&   raw_passwords     r   set_passwordAbstractBaseUser.set_passwordm   s    %l3%r+   c                 >   ^  U 4S jn[        UT R                  U5      $ )zf
Return a boolean of whether the raw_password was correct. Handles
hashing formats behind the scenes.
c                 V   > TR                  U 5        S Tl        TR                  S/S9  g Nr?   )update_fields)rl   rS   rR   rk   r&   s    r   setter/AbstractBaseUser.check_password.<locals>.setterw   s(    l+!DNIIZLI1r+   )r   r?   r&   rk   rs   s   `  r   r   AbstractBaseUser.check_passwordq   s    	2 lDMM6BBr+   c                 Z   ^ #    U 4S jn[        UT R                  U5      I Sh  vN $  N7f)zSee check_password().c                 r   >#    TR                  U 5        S Tl        TR                  S/S9I S h  vN   g  N7frp   )rl   rS   asaverr   s    r   rs   0AbstractBaseUser.acheck_password.<locals>.setter   s1     l+!DN**J<*888s   ,757N)r   r?   ru   s   `  r   r    AbstractBaseUser.acheck_password   s&     	9 %\4==&IIIIs   !+)+c                 $    [        S 5      U l        g rJ   )r   r?   rM   s    r   set_unusable_password&AbstractBaseUser.set_unusable_password   s    %d+r+   c                 ,    [        U R                  5      $ )zH
Return False if set_unusable_password() has been called for this user.
)r   r?   rM   s    r   has_usable_password$AbstractBaseUser.has_usable_password   s     "$--00r+   c                 "    U R                  5       $ )z'
Return an HMAC of the password field.
)_get_session_auth_hashrM   s    r   get_session_auth_hash&AbstractBaseUser.get_session_auth_hash   s     **,,r+   c              #   \   #    [         R                   H  nU R                  US9v   M     g 7f)N)secret)r   SECRET_KEY_FALLBACKSr   )r&   fallback_secrets     r   get_session_auth_fallback_hash/AbstractBaseUser.get_session_auth_fallback_hash   s)     '<<O--_-EE  =s   *,c                 N    Sn[        UU R                  USS9R                  5       $ )NzAdjango.contrib.auth.models.AbstractBaseUser.get_session_auth_hashsha256)r   	algorithm)r   r?   	hexdigest)r&   r   key_salts      r   r   'AbstractBaseUser._get_session_auth_hash   s-    VMM	

 )+	r+   c                 <     U R                   $ ! [         a     gf = f)Nr   )EMAIL_FIELDAttributeError)r   s    r   get_email_field_name%AbstractBaseUser.get_email_field_name   s#    	??" 		s    
c                 ^    [        U[        5      (       a  [        R                  " SU5      $ U$ )NNFKC)
isinstancestrunicodedata	normalize)r   r1   s     r   r^   #AbstractBaseUser.normalize_username   s2     (C(( !!&(3	
 	
r+   )rS   r?   rJ   )#r6   r7   r8   r9   r	   	CharField_r?   DateTimeField
last_login	is_activeREQUIRED_FIELDSrS   rH   rN   rR   rL   r_   rb   propertyre   rh   rl   r   r   r}   r   r   r   r   r:   r   r^   r;   __classcell__)rW   s   @r   r=   r=   ;   s    *#>H%%aoTMJIO I #"2Y&    &C	J,1-F   
 
r+   r=   )__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   Modelr=   r-   r+   r   <module>r      sU   
     3   > = 6!Afnn !AHy
v|| y
r+   