a
    ,_2                     @   s   d dl mZ d dl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
dlmZmZ d
dlmZ d
dlmZmZ d
dlmZ G dd dejZG dd dejZG dd dZdS )    )unicode_literalsN)signing)modelstransaction)timezone)get_random_string)gettext_lazy   )app_settings   )r
   signals)get_adapter)EmailAddressManagerEmailConfirmationManager)
user_emailc                   @   s   e Zd ZejejedejdZ	ej
ejejeddZejedddZejedddZe ZG d	d
 d
Zdd ZdddZdddZdddZdS )EmailAddressuserverbose_nameZ	on_deletee-mail address)unique
max_lengthr   verifiedFr   defaultprimaryc                   @   s(   e Zd ZedZedZejs$dgZdS )zEmailAddress.Metazemail addresszemail addresses)r   emailN)	__name__
__module____qualname___r   verbose_name_pluralr
   UNIQUE_EMAILZunique_together r#   r#   N/var/www/html/Ranjet/env/lib/python3.9/site-packages/allauth/account/models.pyMeta#   s   r%   c                 C   s   | j S N)r   selfr#   r#   r$   __str__)   s    zEmailAddress.__str__c                 C   sR   t j| j}|r(|rdS d|_|  d| _|   t| j| j | j  dS )NFT)r   objectsZget_primaryr   r   saver   r   )r(   ZconditionalZold_primaryr#   r#   r$   set_as_primary,   s    
zEmailAddress.set_as_primaryNc                 C   s,   t jrt| }n
t| }|j||d |S )N)signup)r
   ZEMAIL_CONFIRMATION_HMACEmailConfirmationHMACEmailConfirmationcreatesend)r(   requestr-   confirmationr#   r#   r$   send_confirmation9   s
    

zEmailAddress.send_confirmationTc                 C   sd   t  H t| j| | j  || _d| _|   |rB| | W d   n1 sV0    Y  dS )zH
        Given a new email address, change self and re-confirm.
        FN)r   Zatomicr   r   r+   r   r   r4   )r(   r2   Z	new_emailconfirmr#   r#   r$   changeA   s    

zEmailAddress.change)F)NF)T)r   r   r   r   
ForeignKeyallauth_app_settingsZ
USER_MODELr    CASCADEr   Z
EmailFieldr
   r"   ZEMAIL_MAX_LENGTHr   ZBooleanFieldr   r   r   r*   r%   r)   r,   r4   r6   r#   r#   r#   r$   r      s$   

r   c                   @   s   e Zd ZejeedejdZej	ede
jdZej	edddZejedd	dd
Ze ZG dd dZdd Zedd Zdd Zde_dd ZdddZdS )r/   r   r   createdr   sentT)r   nullkey@   )r   r   r   c                   @   s   e Zd ZedZedZdS )zEmailConfirmation.Metazemail confirmationzemail confirmationsN)r   r   r   r    r   r!   r#   r#   r#   r$   r%   \   s   r%   c                 C   s
   d| j  S )Nzconfirmation for %semail_addressr'   r#   r#   r$   r)   `   s    zEmailConfirmation.__str__c                 C   s   t d }| jj||dS )Nr>   )r@   r=   )r   lowerZ_default_managerr0   )clsr@   r=   r#   r#   r$   r0   c   s    zEmailConfirmation.createc                 C   s    | j tjtjd }|t kS )N)days)r;   datetime	timedeltar
   EMAIL_CONFIRMATION_EXPIRE_DAYSr   now)r(   Zexpiration_dater#   r#   r$   key_expiredh   s    zEmailConfirmation.key_expiredc                 C   sB   |   s>| jjs>| j}t||| tjj| j||d |S d S N)senderr2   r@   )	rH   r@   r   r   confirm_emailr   email_confirmedr1   	__class__r(   r2   r@   r#   r#   r$   r5   p   s    zEmailConfirmation.confirmNFc                 C   s>   t ||| | t | _|   tjj| j	|| |d d S N)rJ   r2   r3   r-   )
r   send_confirmation_mailr   rG   r;   r+   r   email_confirmation_sentr1   rM   r(   r2   r-   r#   r#   r$   r1   {   s    
zEmailConfirmation.send)NF)r   r   r   r   r7   r   r    r9   r@   ZDateTimeFieldr   rG   r:   r;   Z	CharFieldr=   r   r*   r%   r)   classmethodr0   rH   Zbooleanr5   r1   r#   r#   r#   r$   r/   O   s"   
r/   c                   @   s>   e Zd Zdd Zedd Zedd Zdd ZdddZ	d	S )r.   c                 C   s
   || _ d S r&   r?   )r(   r@   r#   r#   r$   __init__   s    zEmailConfirmationHMAC.__init__c                 C   s   t j| jjtjdS )N)objsalt)r   dumpsr@   pkr
   SALTr'   r#   r#   r$   r=      s    zEmailConfirmationHMAC.keyc              
   C   sZ   z2dt j }tj||t jd}ttjj|d}W n" tj	tj
tjfyT   d }Y n0 |S )NiQ )max_agerV   )rX   )r
   rF   r   loadsrY   r.   r   r*   getZSignatureExpiredZBadSignatureZDoesNotExist)rB   r=   rZ   rX   retr#   r#   r$   from_key   s    


zEmailConfirmationHMAC.from_keyc                 C   s:   | j js6| j }t||| tjj| j||d |S d S rI   )r@   r   r   rK   r   rL   r1   rM   rN   r#   r#   r$   r5      s    zEmailConfirmationHMAC.confirmNFc                 C   s,   t ||| | tjj| j|| |d d S rO   )r   rP   r   rQ   r1   rM   rR   r#   r#   r$   r1      s    zEmailConfirmationHMAC.send)NF)
r   r   r   rT   propertyr=   rS   r^   r5   r1   r#   r#   r#   r$   r.      s   

r.   )
__future__r   rD   Zdjango.corer   Z	django.dbr   r   Zdjango.utilsr   Zdjango.utils.cryptor   Zdjango.utils.translationr   r     r
   r8   r   Zadapterr   Zmanagersr   r   utilsr   ZModelr   r/   r.   r#   r#   r#   r$   <module>   s   =8