o
    ˷e                     @   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_name	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 dS )zEmailAddress.Metazemail addresszemail addresses)r   emailN)	__name__
__module____qualname___r   verbose_name_pluralr   UNIQUE_EMAILunique_together r#   r#   M/var/www/ideatree/venv/lib/python3.10/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   objectsget_primaryr   r   saver   r   )r(   conditional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   EMAIL_CONFIRMATION_HMACEmailConfirmationHMACEmailConfirmationcreatesend)r(   requestr0   confirmationr#   r#   r$   send_confirmation6   s
   

zEmailAddress.send_confirmationTc                 C   sv   t  - t| j| | j  || _d| _|   |r)| | W d   dS W d   dS 1 s4w   Y  dS )zH
        Given a new email address, change self and re-confirm.
        FN)r   atomicr   r   r,   r   r   r8   )r(   r6   	new_emailconfirmr#   r#   r$   change>   s   

"zEmailAddress.change)FNF)T)r   r   r   r   
ForeignKeyallauth_app_settings
USER_MODELr   CASCADEr   
EmailFieldr   r!   EMAIL_MAX_LENGTHr   BooleanFieldr   r   r   r*   r%   r)   r/   r8   r<   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 )r3   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%   Y   s    r%   c                 C   s
   d| j  S )Nzconfirmation for %semail_addressr'   r#   r#   r$   r)   ]      
zEmailConfirmation.__str__c                 C   s   t  |j}| jj||dS )N)rK   rH   )r   generate_emailconfirmation_keyr   _default_managerr4   )clsrK   rH   r#   r#   r$   r4   `   s   zEmailConfirmation.createc                 C   s    | j tjtjd }|t kS )N)days)rF   datetime	timedeltar   EMAIL_CONFIRMATION_EXPIRE_DAYSr   now)r(   expiration_dater#   r#   r$   key_expirede   s   zEmailConfirmation.key_expiredc                 C   sF   |   s| jjs!| j}t||| tjj| j||d |S d S d S N)senderr6   rK   )	rV   rK   r   r   confirm_emailr
   email_confirmedr5   	__class__r(   r6   rK   r#   r#   r$   r;   m   s   zEmailConfirmation.confirmNFc                 C   s>   t ||| | t | _|   tjj| j	|| |d d S N)rX   r6   r7   r0   )
r   send_confirmation_mailr   rT   rF   r,   r
   email_confirmation_sentr5   r[   r(   r6   r0   r#   r#   r$   r5   x   s   

zEmailConfirmation.sendr=   )r   r   r   r   r>   r   r   rA   rK   DateTimeFieldr   rT   rE   rF   	CharFieldrH   r   r*   r%   r)   classmethodr4   rV   booleanr;   r5   r#   r#   r#   r$   r3   L   s$    
r3   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 )r2   c                 C   s
   || _ d S r&   rJ   )r(   rK   r#   r#   r$   __init__   rL   zEmailConfirmationHMAC.__init__c                 C   s   t j| jjtjdS )N)objsalt)r   dumpsrK   pkr   SALTr'   r#   r#   r$   rH      s   zEmailConfirmationHMAC.keyc              
   C   s\   zdt j }tj||t jd}ttjj|dd}W |S  tj	tj
tjfy-   d }Y |S w )NiQ )max_agerg   F)ri   r   )r   rS   r   loadsrj   r2   r   r*   getSignatureExpiredBadSignatureDoesNotExist)rO   rH   rk   ri   retr#   r#   r$   from_key   s   

zEmailConfirmationHMAC.from_keyc                 C   s:   | j js| j }t||| tjj| j||d |S d S rW   )rK   r   r   rY   r
   rZ   r5   r[   r\   r#   r#   r$   r;      s   zEmailConfirmationHMAC.confirmNFc                 C   s,   t ||| | tjj| j|| |d d S r]   )r   r^   r
   r_   r5   r[   r`   r#   r#   r$   r5      s   
zEmailConfirmationHMAC.sendr=   )
r   r   r   re   propertyrH   rc   rr   r;   r5   r#   r#   r#   r$   r2      s    

r2   )rQ   django.corer   	django.dbr   r   django.utilsr   django.utils.translationr   r    r   r?   r
   adapterr   managersr   r   utilsr   Modelr   r3   r2   r#   r#   r#   r$   <module>   s    =8