o
    hX                     @   s|   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 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)HttpRequest)timezone   )app_settingsc                   @   s   e Zd Zdd Zdd Z	d dededef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   O/var/www/html/pos/venv/lib/python3.10/site-packages/allauth/account/managers.pycan_add_email   s   
z!EmailAddressManager.can_add_emailc                 C   s   | 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   order_bylastr   r   r   r   r   get_new   s   zEmailAddressManager.get_newTrequestemailsend_verificationc                 C   s^   ddl m} | |}| }|s| j||d}n||_d|_d|_|  |r-||| |S )z
        Adds an email address the user wishes to change to, replacing his
        current email address once confirmed.
        r   "send_verification_email_to_addressr   r   F)	1allauth.account.internal.flows.email_verificationr!   r   lowercreater   r   primarysave)r   r   r   r   r   r!   instancer   r   r   add_new_email   s   

z!EmailAddressManager.add_new_emailFc           	      C   sB   ddl m} | }| j||d|id\}}|r|r||| |S )Nr   r    r   )r   r   defaults)r#   r!   r$   get_or_create)	r   r   r   r   confirmsignupr!   email_addresscreatedr   r   r   	add_email9   s   


zEmailAddressManager.add_emailc                 C   s   | j |dddd S )NTr   z-primaryr   )r   r   firstr   r   r   r   get_verifiedH   s   z EmailAddressManager.get_verifiedc                 C   s*   z| j |ddW S  | jjy   Y d S w )NT)r   r&   )getmodelDoesNotExistr   r   r   r   get_primaryK   s
   zEmailAddressManager.get_primaryreturnc                 C   s0   ddl m} | |}|r|j}|S ||}|S )Nr   )
user_email)allauth.account.utilsr8   r6   r   )r   r   r8   r&   r   r   r   r   get_primary_emailQ   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>^   s    z5EmailAddressManager.get_users_for.<locals>.<listcomp>T)r   r   )r   r$   r   r   r   r   r   get_users_for[   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_userb   s   
z'EmailAddressManager.fill_cache_for_userc                 C   sb   d}t ||d }| }|d u r| j|| d}||_|S |D ]}|j|kr+|  S q | j )Nr@   r"   )getattrr$   r3   r   r   r4   r5   )r   r   r   	cache_keyrA   r   r<   r   r   r   get_for_userk   s   

z EmailAddressManager.get_for_userc                 C   s   | j | dd S )NT)r   r   )r   r$   existsr>   r   r   r   is_verified{      zEmailAddressManager.is_verifiedc                 C   s   | j dd |D dS )Nc                 S   s   g | ]}|  qS r   )r$   )r;   er   r   r   r=      s    z.EmailAddressManager.lookup.<locals>.<listcomp>)	email__in)r   )r   emailsr   r   r   lookup~   rH   zEmailAddressManager.lookupN)T)FF)__name__
__module____qualname__r   r   r   strboolr)   r0   r2   r6   r   r:   r?   rB   rE   rG   rL   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)excluderT   r   rU   r   r   r   	all_valid   rH   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   rT      s   
z"EmailConfirmationManager.expired_qc                 C   s   |     d S rS   )rV   deleterU   r   r   r   delete_expired_confirmations   s   z5EmailConfirmationManager.delete_expired_confirmationsN)rM   rN   rO   rV   rY   rT   r`   r   r   r   r   rR      s
    rR   N)datetimer   typingr   	django.dbr   django.db.modelsr   django.httpr   django.utilsr    r	   Managerr
   rR   r   r   r   r   <module>   s    v