o
    "4gG                     @   sp   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	 d	ejZG d
d dejZdS )    )	timedelta)Optional)models)Q)timezone   )app_settingsc                   @   sx   e Zd Zdd Zdd Zdd Zddd	Zd
d Zdd Zde	e
 fddZdd Zdd Zdd Zdd Zdd ZdS )EmailAddressManagerc                 C   s2   d}t jrdS t jr| j|d }|t jk }|S )NTuser)r   CHANGE_EMAILMAX_EMAIL_ADDRESSESfiltercount)selfr   retr    r   a/var/www/html/authentication-server/venv/lib/python3.10/site-packages/allauth/account/managers.pycan_add_email   s   
z!EmailAddressManager.can_add_emailc                 C   s&   t jsJ | jjj|ddd 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   r   r   r   get_new   s   
zEmailAddressManager.get_newc                 C   s\   t jsJ | |}| }|s| jjj||d}n||_d|_d|_	|
  || |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   instancer   r   r   add_new_email!   s   


z!EmailAddressManager.add_new_emailFc                 C   s:   |  }| j||d|id\}}|r|r|j||d |S )Nr   )r   r   defaults)signup)r    get_or_creater$   )r   r%   r   r   confirmr)   email_addresscreatedr   r   r   	add_email5   s   

zEmailAddressManager.add_emailc                 C   s   | j |dddd S )NTr   z-primaryr   )r   r   firstr   r   r   r   get_verified@   s   z EmailAddressManager.get_verifiedc                 C   s*   z| j |ddW S  | jjy   Y d S w )NT)r   r"   )getr   DoesNotExistr   r   r   r   get_primaryC   s
   zEmailAddressManager.get_primaryreturnc                 C   s0   ddl m} | |}|r|j}|S ||}|S )Nr   )
user_email)allauth.account.utilsr5   r3   r   )r   r   r5   r"   r   r   r   r   get_primary_emailI   s   
z%EmailAddressManager.get_primary_emailc                 C   s   dd | j d| dD S )Nc                 S   s   g | ]}|j qS r   r
   ).0addressr   r   r   
<listcomp>V   s    z5EmailAddressManager.get_users_for.<locals>.<listcomp>T)r   r   )r   r    r   r   r   r   r   get_users_forS   s   z!EmailAddressManager.get_users_forc                 C   s
   ||_ dS )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   	addressesr   r   r   fill_cache_for_userZ   s   
z'EmailAddressManager.fill_cache_for_userc                 C   s^   d}t ||d }| }|d u r| j||d}||_|S |D ]}|j|kr)|  S q| j )Nr=   r   )getattrr    r1   r   r   r   r2   )r   r   r   	cache_keyr>   r   r9   r   r   r   get_for_userc   s   

z EmailAddressManager.get_for_userc                 C   s   | j | dd S )NT)r   r   )r   r    existsr;   r   r   r   is_verifieds      zEmailAddressManager.is_verifiedc                 C   s   | j dd |D dS )Nc                 S   s   g | ]}|  qS r   )r    )r8   er   r   r   r:   w   s    z.EmailAddressManager.lookup.<locals>.<listcomp>)	email__in)r   )r   emailsr   r   r   lookupv   rE   zEmailAddressManager.lookupN)FF)__name__
__module____qualname__r   r   r'   r.   r0   r3   r   strr7   r<   r?   rB   rD   rI   r   r   r   r   r	      s    	

	r	   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
EmailConfirmationManagerc                 C   s   |  |  S N)r   	expired_qr   r   r   r   all_expired{   s   z$EmailConfirmationManager.all_expiredc                 C   s   |  |  jddS )NF)email_address__verified)excluderP   r   rQ   r   r   r   	all_valid~   rE   z"EmailConfirmationManager.all_validc                 C   s   t  ttjd }t|dS )N)days)sent__lt)r   nowr   r   EMAIL_CONFIRMATION_EXPIRE_DAYSr   )r   sent_thresholdr   r   r   rP      s   
z"EmailConfirmationManager.expired_qc                 C   s   |     d S rO   )rR   deleterQ   r   r   r   delete_expired_confirmations   s   z5EmailConfirmationManager.delete_expired_confirmationsN)rJ   rK   rL   rR   rU   rP   r\   r   r   r   r   rN   z   s
    rN   N)datetimer   typingr   	django.dbr   django.db.modelsr   django.utilsr    r   Managerr	   rN   r   r   r   r   <module>   s    o