
    0~h                         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j0                        Zy)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                   .    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       f/var/www/peopleoo.sandbox-dev.co.uk/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                 R    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%   s(     	C-	

 !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_key6   s%    txx@4::44h?@@r(   N)
   7abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789)__name__
__module____qualname__classmethodr   r'   r/   r*   r(   r   r   r      s'      O8"Ar(   r   c                   2    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y)AbstractBaseUser.MetaTN)r2   r3   r4   abstractr*   r(   r   Metar>   F   s    r(   r@   c                 "    | j                         S Nget_usernamer$   s    r   __str__zAbstractBaseUser.__str__I   s      ""r(   c                     t        |   |i | | j                  (t        j                  | j                  |        d | _        y y rB   )supersave	_passwordr   password_changed)r$   argskwargs	__class__s      r   rI   zAbstractBaseUser.saveL   s>    d%f%>>%00F!DN &r(   c                 .    t        | | j                        S )z"Return the username for this User.)getattrr-   rE   s    r   rD   zAbstractBaseUser.get_usernameR   s    tT0011r(   c                 l    t        | | j                  | j                  | j                                      y rB   )setattrr-   normalize_usernamerD   rE   s    r   cleanzAbstractBaseUser.cleanV   s(    d))4+B+B4CTCTCV+WXr(   c                 $    | j                         fS rB   rC   rE   s    r   natural_keyzAbstractBaseUser.natural_keyY   s    !!#%%r(   c                      y)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     r(   c                      y)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     r(   c                 2    t        |      | _        || _        y rB   )r   r8   rJ   )r$   raw_passwords     r   set_passwordzAbstractBaseUser.set_passwordl   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 Nr8   )update_fields)r]   rJ   rI   r\   r$   s    r   setterz/AbstractBaseUser.check_password.<locals>.setterv   s(    l+!DNIIZLI1r(   )r   r8   r$   r\   rc   s   `  r   r   zAbstractBaseUser.check_passwordp   s    	2 lDMM6BBr(   c                 X    K    fd}t        | j                  |       d{   S 7 w)zSee check_password().c                 x   K   j                  |        d _        j                  dg       d {    y 7 wr`   )r]   rJ   asaverb   s    r   rc   z0AbstractBaseUser.acheck_password.<locals>.setter   s2     l+!DN**J<*888s   /:8:N)r   r8   rd   s   `  r   r   z AbstractBaseUser.acheck_password~   s'     	9 %\4==&IIIIs    *(*c                 $    t        d       | _        y 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0r(   c                 "    | j                         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              #   ^   K   t         j                  D ]  }| j                  |        y w)N)secret)r   SECRET_KEY_FALLBACKSrm   )r$   fallback_secrets     r   get_session_auth_fallback_hashz/AbstractBaseUser.get_session_auth_fallback_hash   s1     '<< 	FO--_-EE	Fs   +-c                 T    d}t        || j                  |d      j                         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   s-    VMM	

 )+	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   rS   z#AbstractBaseUser.normalize_username   s/     (C( !!&(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%%%aoTMJIO I #"2Y&    &C	J,1-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      sU        3   > = 6!Afnn !AHy
v|| y
r(   