
    f5                         d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 ddl
mZ  G d d	ej                        Z G d
 dej                        Zy)    )	timedelta)Optional)models)Q)timezone   )app_settingsc                   b    e Zd Zd Zd Zd ZddZd Zd Zde	e
   fdZd	 Zd
 Zd Zd Zd Zy)EmailAddressManagerc                     d}t         j                  ryt         j                  r3| j                  |      j	                         }|t         j                  k  }|S )NT)user)r	   CHANGE_EMAILMAX_EMAIL_ADDRESSESfiltercount)selfr   retr   s       S/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/account/managers.pycan_add_emailz!EmailAddressManager.can_add_email   sL    $$ --KKTK*002E,:::C
    c                     t         j                  sJ | j                  j                  j	                  |d      j                  d      j                         S )z^
        Returns the email address the user is in the process of changing to, if any.
        Fr   verifiedpk)r	   r   modelobjectsr   order_bylastr   r   s     r   get_newzEmailAddressManager.get_new   sI     ((((JJ%%4%%@II$OTTV	
r   c                 ,   t         j                  sJ | j                  |      }|j                         }|s(| j                  j
                  j                  ||      }n%||_        d|_        d|_	        |j                          |j                  |       |S )z
        Adds an email address the user wishes to change to, replacing his
        current email address once confirmed.
        r   emailF)r	   r   r    lowerr   r   creater#   r   primarysavesend_confirmation)r   requestr   r#   instances        r   add_new_emailz!EmailAddressManager.add_new_email!   s    
 ((((<<%zz))00d%0HH #HN %H$HMMO""7+r   c                     |j                         }| j                  ||d|i      \  }}|r|r|j                  ||       |S )Nr#   )r   r#   defaults)signup)r$   get_or_creater(   )r   r)   r   r#   confirmr.   email_addresscreateds           r   	add_emailzEmailAddressManager.add_email5   sS    !%!3!3Ugu-= "4 "
w w++GF+Cr   c                 d    | j                  |d      j                  dd      j                         S )NTr   z-primaryr   )r   r   firstr   s     r   get_verifiedz EmailAddressManager.get_verified@   s+    {{t{4==j$OUUWWr   c                 h    	 | j                  |d      S # | j                  j                  $ r Y y w xY w)NT)r   r&   )getr   DoesNotExistr   s     r   get_primaryzEmailAddressManager.get_primaryC   s6    	88t844zz&& 		s    11returnc                 d    ddl m} | j                  |      }|r|j                  }|S  ||      }|S )Nr   )
user_email)allauth.account.utilsr=   r:   r#   )r   r   r=   r&   r#   s        r   get_primary_emailz%EmailAddressManager.get_primary_emailI   s9    4""4(MME  t$Er   c                 ~    | j                  d|j                               D cg c]  }|j                   c}S c c}w )NT)r   r#   )r   r$   r   )r   r#   addresss      r   get_users_forz!EmailAddressManager.get_users_forS   s8     )-T(W
$GLL
 	
 
s   :c                     ||_         y)a  
        In a multi-db setup, inserting records and re-reading them later
        on may result in not being able to find newly inserted
        records. Therefore, we maintain a cache for the user so that
        we can avoid database access when we need to re-read..
        N)_emailaddress_cache)r   r   	addressess      r   fill_cache_for_userz'EmailAddressManager.fill_cache_for_userZ   s     $- r   c                     d}t        ||d       }|j                         }|| j                  ||      }||_        |S |D ]  }|j                  |k(  s|c S  | j
                  j                         )NrD   r"   )getattrr$   r8   r   r#   r   r9   )r   r   r#   	cache_keyrE   r   rA   s          r   get_for_userz EmailAddressManager.get_for_userc   s{    )	D)T2	((E(2C CHJ$ #==E)"N# **))++r   c                 `    | j                  |j                         d      j                         S )NT)r#   r   )r   r$   exists)r   r#   s     r   is_verifiedzEmailAddressManager.is_verifieds   s$    {{{>EEGGr   c                 h    | j                  |D cg c]  }|j                          c}      S c c}w )N)	email__in)r   r$   )r   emailses      r   lookupzEmailAddressManager.lookupv   s'    {{%@Aaggi%@{AA%@s   /N)FF)__name__
__module____qualname__r   r    r+   r3   r6   r:   r   strr?   rB   rF   rJ   rM   rR    r   r   r   r      sL    

(	X# 
-, HBr   r   c                   $    e Zd Zd Zd Zd Zd Zy)EmailConfirmationManagerc                 @    | j                  | j                               S N)r   	expired_qr   s    r   all_expiredz$EmailConfirmationManager.all_expired{   s    {{4>>+,,r   c                 `    | j                  | j                               j                  d      S )NF)email_address__verified)excluder\   r   r]   s    r   	all_validz"EmailConfirmationManager.all_valid~   s&    ||DNN,-44U4SSr   c                 x    t        j                         t        t        j                        z
  }t        |      S )N)days)sent__lt)r   nowr   r	   EMAIL_CONFIRMATION_EXPIRE_DAYSr   )r   sent_thresholds     r   r\   z"EmailConfirmationManager.expired_q   s/    !)<<+
 
 .))r   c                 @    | j                         j                          y r[   )r^   deleter]   s    r   delete_expired_confirmationsz5EmailConfirmationManager.delete_expired_confirmations   s    !!#r   N)rS   rT   rU   r^   rb   r\   rk   rW   r   r   rY   rY   z   s    -T*$r   rY   N)datetimer   typingr   	django.dbr   django.db.modelsr   django.utilsr    r	   Managerr   rY   rW   r   r   <module>rs      s<        ! lB&.. lB^$v~~ $r   