U
    Md                     @   s   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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 )    N)signing)modelstransaction)timezone)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!   Z/var/www/html/crackeverytest/cet_env/lib/python3.8/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   s`   t j| j}|r(|rdS d|_|  d| _|   t| j| j tj	r\| jjtj	gd dS )NFTZupdate_fields)
r   objectsZget_primaryr   r   saver   r   r   USER_MODEL_EMAIL_FIELD)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_confirmation7   s
    

zEmailAddress.send_confirmationTc              	   C   s^   t  L t| j| tjr.| jjtjgd || _d| _|   |rP| 	| W 5 Q R X dS )zH
        Given a new email address, change self and re-confirm.
        r(   FN)
r   Zatomicr   r   r   r+   r*   r   r   r4   )r&   r2   Z	new_emailconfirmr!   r!   r"   change?   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  |j}| jj||dS )N)r@   r=   )r   Zgenerate_emailconfirmation_keyr   Z_default_managerr0   )clsr@   r=   r!   r!   r"   r0   b   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_expiredg   s    zEmailConfirmation.key_expiredc                 C   sB   |   s>| jjs>| j}t||| tjj| j||d |S d S N)senderr2   r@   )	rG   r@   r   r   confirm_emailr
   email_confirmedr1   	__class__r&   r2   r@   r!   r!   r"   r5   o   s    zEmailConfirmation.confirmNFc                 C   s>   t ||| | t | _|   tjj| j	|| |d d S N)rI   r2   r3   r-   )
r   send_confirmation_mailr   rF   r;   r*   r
   email_confirmation_sentr1   rL   r&   r2   r-   r!   r!   r"   r1   z   s    
zEmailConfirmation.send)NF)r   r   r   r   r7   r   r   r9   r@   ZDateTimeFieldr   rF   r:   r;   Z	CharFieldr=   r   r)   r#   r'   classmethodr0   rG   Zbooleanr5   r1   r!   r!   r!   r"   r/   N   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   s^   z4dt j }tj||t jd}ttjj|dd}W n$ tj	tj
tjfk
rX   d }Y nX |S )NiQ )max_agerU   F)rW   r   )r   rE   r   loadsrX   r.   r   r)   getZSignatureExpiredZBadSignatureZDoesNotExist)rA   r=   rY   rW   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 rH   )r@   r   r   rJ   r
   rK   r1   rL   rM   r!   r!   r"   r5      s    zEmailConfirmationHMAC.confirmNFc                 C   s,   t ||| | tjj| j|| |d d S rN   )r   rO   r
   rP   r1   rL   rQ   r!   r!   r"   r1      s    zEmailConfirmationHMAC.send)NF)
r   r   r   rS   propertyr=   rR   r]   r5   r1   r!   r!   r!   r"   r.      s   

r.   )rC   Zdjango.corer   Z	django.dbr   r   Zdjango.utilsr   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