o
    hg                      @   s  d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d
edefddZde	d
edefddZde	fddZd
efddZde	d
efddZde	dee deddfddZ	d*dedee dee fddZde	dedee fd d!Z	"d+dedee d#edeeef fd$d%Zdedee fd&d'Z dededee fd(d)Z!dS ),    )ListOptionalTuple)messages)AbstractBaseUser)HttpRequest)app_settingssignals)get_adapter)"raise_if_reauthentication_required)
user_email)EmailAddressemail_addressreturnc                 C   s   t  }|| S N)r
   can_delete_email)r   adapter r   b/var/www/html/pos/venv/lib/python3.10/site-packages/allauth/account/internal/flows/manage_email.pyr      s   
r   requestc                 C   s   t jrt|  d}t }t|s|| tjdd|ji |S |	  t
jjt| | j|d || tjdd|ji |d| jd|ji d}|S )	NFz0account/messages/cannot_delete_primary_email.txtemailsenderr   userr   z"account/messages/email_deleted.txtzaccount/email/email_deleteddeleted_emailT)r   REAUTHENTICATION_REQUIREDr   r
   r   add_messager   ERRORr   remover	   email_removedsendr   r   SUCCESSsend_notification_mail)r   r   successr   r   r   r   delete_email   s@   r$   c                 C   s<   t jrt|  || }|jrtjjt| | j	|d d S d S )Nr   )
r   r   r   savepkr	   email_addedr    r   r   )r   formr   r   r   r   	add_email9   s   

r)   c                 C   s   | j ptjj| jdd  S )NT)r   verified)r*   r   objectsfilterr   exists)r   r   r   r   can_mark_as_primaryG   s   r.   c                 C   s   t jrt|  d}t|st | tjd |S | jj	sJ t
jj| jdd }|  t }|| tjd t| || d}|S )NFz-account/messages/unverified_primary_email.txtT)r   primaryz&account/messages/primary_email_set.txt)r   r   r   r.   r
   r   r   r   r   is_authenticatedr   r+   r,   firstset_as_primaryr!   emit_email_changed)r   r   r#   from_email_addressr   r   r   r   mark_as_primaryP   s4   r5   r4   to_email_addressNc                 C   sH   |j }tjjt| |||d |r"t jd||j|jd|jd d S d S )N)r   r   r   r4   r6   zaccount/email/email_changed)
from_emailto_email)contextr   )r   r	   email_changedr    r   r
   r"   r   )r   r4   r6   r   r   r   r   r3   p   s$   
r3   r   r   c                    s   ddl m} tjsdS || } r fdd|D }t|dk}|s$dS tjs)dS tjtjjkr7tjs5J dS tjdkr>dS tjdu sEJ dS )	z
    True -- email is unique
    False -- email is already in use
    None -- email is in use, but we should hide that using email verification.
    r   )filter_users_by_emailTc                    s   g | ]
}|j  j kr|qS r   )r&   ).0ur   r   r   
<listcomp>   s    z'assess_unique_email.<locals>.<listcomp>FNstrict)	allauth.account.utilsr;   r   UNIQUE_EMAILlenPREVENT_ENUMERATIONEMAIL_VERIFICATIONEmailVerificationMethod	MANDATORY)r   r   r;   users_with_emailconflictr   r>   r   assess_unique_email   s(   

rJ   c                 C   s\   t tjj|jd}tjr,| jjr,ddl	m
} || }|r,|j}|j|jkr,|| |S )N)user_idr   )EmailVerificationProcess)listr   r+   r,   r&   r   "EMAIL_VERIFICATION_BY_CODE_ENABLEDr   r0   9allauth.account.internal.flows.email_verification_by_coderL   resumer   rK   append)r   r   	addressesrL   processr   r   r   r   list_email_addresses   s   

rT   Falways_raisec                 C   sf   t  }t| |d}|du rd}n|du r|d|du sJ d}|| } |r/|r/|d| |fS )z
    Throws a validation error (if allowed by enumeration prevention rules).
    Returns a tuple of [email, already_exists].
    r>   TFemail_takenN)r
   rJ   validation_errorvalidate_unique_email)r   r   rU   r   
assessmentalready_existsr   r   r   email_already_exists   s   


r[   c                 C   s   t | }|rt| |S dS )z
    Keep user.email in sync with user.emailaddress_set.

    Under some circumstances the user.email may not have ended up as
    an EmailAddress record, e.g. in the case of manually created admin
    users.
    N)r   sync_email_address)r   r   r   r   r   sync_user_email_address   s   
r]   c                 C   s>   t jj| j|d st jj| |dddd\}}|S d }|S )N)rK   r   F)r/   r*   )r   r   defaults)r   r+   r,   r&   r-   get_or_create)r   r   address_r   r   r   r\      s   
r\   r   )NF)"typingr   r   r   django.contribr   django.contrib.auth.base_userr   django.httpr   allauth.accountr   r	   allauth.account.adapterr
   /allauth.account.internal.flows.reauthenticationr    allauth.account.internal.userkitr   allauth.account.modelsr   boolr   r$   r)   r.   r5   r3   strrJ   rT   r[   r]   r\   r   r   r   r   <module>   sd    $	 

/


