
    h                         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	 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y)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)gettext_lazyc                   .    e Zd Zed        Z	 	 ddZd Zy)BaseUserManagerc                     |xs d}	 |j                         j                  dd      \  }}|dz   |j                         z   }|S # t        $ r Y |S w xY w)zS
        Normalize the email address by lowercasing the domain part of it.
         @   )striprsplitlower
ValueError)clsemail
email_namedomain_parts       `/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/django/contrib/auth/base_user.pynormalize_emailzBaseUserManager.normalize_email   si    
 	;&+kkm&:&:3&B#J ${'8'8'::E	  	 		s   #A 	AAc                     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    c                 R     | 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%    txx@4::44h?@@r!   N)
   7abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789)__name__
__module____qualname__classmethodr   r    r(   r#   r!   r   r   r      s)      +-,6	8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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y)AbstractBaseUser.MetaTN)r+   r,   r-   abstractr#   r!   r   Metar7   <   s    r!   r9   c                 "    | j                         S Nget_usernamer   s    r   __str__zAbstractBaseUser.__str__?   s      ""r!   c                     t        |   |i | | j                  (t        j                  | j                  |        d | _        y y r;   )supersave	_passwordr   password_changed)r   argskwargs	__class__s      r   rB   zAbstractBaseUser.saveB   s>    d%f%>>%00F!DN &r!   c                 .    t        | | j                        S )z"Return the username for this User.)getattrr&   r>   s    r   r=   zAbstractBaseUser.get_usernameH   s    tT0011r!   c                 l    t        | | j                  | j                  | j                                      y r;   )setattrr&   normalize_usernamer=   r>   s    r   cleanzAbstractBaseUser.cleanL   s(    d))4+B+B4CTCTCV+WXr!   c                 $    | j                         fS r;   r<   r>   s    r   natural_keyzAbstractBaseUser.natural_keyO   s    !!#%%r!   c                      y)zj
        Always return False. This is a way of comparing User objects to
        anonymous users.
        Fr#   r>   s    r   is_anonymouszAbstractBaseUser.is_anonymousR   s     r!   c                      y)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_authenticatedZ   s     r!   c                 2    t        |      | _        || _        y r;   )r   r1   rC   )r   raw_passwords     r   set_passwordzAbstractBaseUser.set_passwordb   s    %l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                 \    j                  |        d _        j                  dg       y )Nr1   )update_fields)rV   rC   rB   )rU   r   s    r   setterz/AbstractBaseUser.check_password.<locals>.setterk   s(    l+!DNIIZLI1r!   )r   r1   )r   rU   rZ   s   `  r   r   zAbstractBaseUser.check_passwordf   s    
	2
 lDMM6BBr!   c                 $    t        d       | _        y r;   )r   r1   r>   s    r   set_unusable_passwordz&AbstractBaseUser.set_unusable_passwordr   s    %d+r!   c                 ,    t        | j                        S )zX
        Return False if set_unusable_password() has been called for this user.
        )r   r1   r>   s    r   has_usable_passwordz$AbstractBaseUser.has_usable_passwordv   s     "$--00r!   c                 R    d}t        || j                  d      j                         S )NAdjango.contrib.auth.models.AbstractBaseUser.get_session_auth_hashsha1	algorithm)r
   r1   	hexdigestr   key_salts     r   _legacy_get_session_auth_hashz.AbstractBaseUser._legacy_get_session_auth_hash|   s#    V8T]]fEOOQQr!   c                 n    d}t        || j                  t        j                        j	                         S )z7
        Return an HMAC of the password field.
        r`   rb   )r
   r1   r   DEFAULT_HASHING_ALGORITHMrd   re   s     r   get_session_auth_hashz&AbstractBaseUser.get_session_auth_hash   s5     WMM 88
 )+	r!   c                 :    	 | j                   S # t        $ r Y yw xY w)Nr   )EMAIL_FIELDAttributeError)r   s    r   get_email_field_namez%AbstractBaseUser.get_email_field_name   s#    	??" 		s    	c                 R    t        |t              rt        j                  d|      S |S )NNFKC)
isinstancestrunicodedata	normalize)r   r'   s     r   rL   z#AbstractBaseUser.normalize_username   s$    :DXs:S{$$VX6aYaar!   )r+   r,   r-   r   	CharField_r1   DateTimeField
last_login	is_activeREQUIRED_FIELDSrC   r9   r?   rB   r=   rM   rO   propertyrQ   rS   rV   r   r\   r^   rg   rj   r.   rn   rL   __classcell__)rG   s   @r   r0   r0   0   s    v*#>H%%%aoTMJIO I #"2Y&    &
C,1R
   b br!   r0   )__doc__rs   django.confr   django.contrib.authr   django.contrib.auth.hashersr   r   r   	django.dbr   django.utils.cryptor	   r
   django.utils.translationr   rv   Managerr   Modelr0   r#   r!   r   <module>r      sP       3   > 6Afnn A>hbv|| hbr!   