o
    LfZ#                     @   s   d dl 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 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 G dd dejZG dd dZG dd deejZ G dd dee!Z"G dd dZ#dS )    N)settings)get_user_model)signing)models)IndexQ)UniqueConstraint)Upper)timezone)gettext_lazy   )app_settingssignals)get_adapter)EmailAddressManagerEmailConfirmationManagerc                   @   s   e Zd ZejejedejdZ	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 ZdddZdddZdddZdd ZdS )EmailAddressuserverbose_name	on_deleteemail address)
max_lengthr   verifiedFr   defaultprimaryc                   @   sR   e Zd ZedZedZdgZejre	dgde
dddgZeedd	d
gZdS )zEmailAddress.Metar   zemail addresses)r   emailr   unique_verified_emailT)r   )fieldsname	conditionaccount_emailaddress_upper)r    N)__name__
__module____qualname___r   verbose_name_pluralunique_togetherr   UNIQUE_EMAILr   r   constraintsr   r	   indexes r,   r,   W/var/www/html/humari/django-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   s:   | j rdS d}tjrtjj| jdjd| jd	 }| S )NTFpk)r   email__iexact)
r   r   r)   r   objectsexcluder4   filterr   exists)r1   conflictr,   r,   r-   can_set_verified2   s   zEmailAddress.can_set_verifiedTc                 C   s0   | j rdS |  rd| _ |r| jdgd | j S )NTr   )update_fields)r   r;   save)r1   commitr,   r,   r-   set_verified>   s   zEmailAddress.set_verifiedc                 C   sX   ddl m} tj| j}|r|rdS d|_|  d| _|   || j| jdd dS )zMarks the email address as primary. In case of `conditional`, it is
        only marked as primary if there is no other primary email address set.
        r   
user_emailFTr>   )	allauth.account.utilsrA   r   r6   get_primaryr   r   r=   r   )r1   conditionalrA   old_primaryr,   r,   r-   set_as_primaryG   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)r1   requestrH   confirmationr,   r,   r-   send_confirmationX   s
   

zEmailAddress.send_confirmationc                 C   sd   ddl m} |   || j| jkr0tjj| jdd	 }d}|r&|j}|| j|dd d S d S )Nr   r@   )r   z	-verified TrB   )
rC   rA   deleter   r   r   r6   r8   order_byfirst)r1   rA   alt	alt_emailr,   r,   r-   remove`   s   zEmailAddress.remove)T)FNF)r#   r$   r%   r   
ForeignKeyr   AUTH_USER_MODELr&   CASCADEr   
EmailFieldr   EMAIL_MAX_LENGTHr   BooleanFieldr   r   r   r6   r.   r2   r;   r?   rG   rP   rW   r,   r,   r,   r-   r      s(    

	
r   c                   @   s   e Zd Zdd ZdddZdS )EmailConfirmationMixinc                 C   s>   | j }|jst ||}|rtjj| j||d |S d S d S )N)senderrN   email_address)ra   r   r   confirm_emailr   email_confirmedrM   	__class__)r1   rN   ra   	confirmedr,   r,   r-   confirmq   s   zEmailConfirmationMixin.confirmNFc                 C   s*   t  || | tjj| j|| |d d S )N)r`   rN   rO   rH   )r   send_confirmation_mailr   email_confirmation_sentrM   rd   r1   rN   rH   r,   r,   r-   rM   }   s   
zEmailConfirmationMixin.sendrX   )r#   r$   r%   rf   rM   r,   r,   r,   r-   r_   p   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_ fddZd fdd	Z  ZS )rK   r   r   createdr   sentT)r   nullkey@   )r   r   uniquec                   @   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ra   r0   r,   r,   r-   r2         
zEmailConfirmation.__str__c                 C   s   t  |j}| jj||dS )N)ra   rm   )r   generate_emailconfirmation_keyr   _default_managerrL   )clsra   rm   r,   r,   r-   rL      s   zEmailConfirmation.createc                 C   s    | j tjtjd }|t kS )N)days)rk   datetime	timedeltar   EMAIL_CONFIRMATION_EXPIRE_DAYSr
   now)r1   expiration_dater,   r,   r-   key_expired   s   zEmailConfirmation.key_expiredc                    s   |   s
t |S d S r/   )r{   superrf   )r1   rN   rd   r,   r-   rf      s   zEmailConfirmation.confirmNFc                    s&   t  j||d t | _|   d S )N)rN   rH   )r|   rM   r
   ry   rk   r=   ri   r}   r,   r-   rM      s   
zEmailConfirmation.sendrX   )r#   r$   r%   r   rY   r   r&   r[   ra   DateTimeFieldr
   ry   rj   rk   	CharFieldrm   r   r6   r.   r2   classmethodrL   r{   booleanrf   rM   __classcell__r,   r,   r}   r-   rK      s$    
rK   c                   @   s,   e Zd Zdd Zedd Zedd ZdS )rJ   c                 C   s
   || _ d S r/   rp   )r1   ra   r,   r,   r-   __init__   rq   zEmailConfirmationHMAC.__init__c                 C   s   t j| jjtjdS )N)objsalt)r   dumpsra   r4   r   SALTr0   r,   r,   r-   rm      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_ager   F)r4   r   )r   rx   r   loadsr   rJ   r   r6   getSignatureExpiredBadSignatureDoesNotExist)rt   rm   r   r4   retr,   r,   r-   from_key   s   

zEmailConfirmationHMAC.from_keyN)r#   r$   r%   r   propertyrm   r   r   r,   r,   r,   r-   rJ      s    
rJ   c                   @   s8   e Zd ZdZ					d
ddZdd Zedd	 ZdS )LoginzA
    Represents a user that is in the process of logging in.
    NFc                 C   s@   || _ || _|| _|| _|| _|| _|d u ri | _d S || _d S r/   )r   email_verificationredirect_urlsignal_kwargsrH   r   state)r1   r   r   r   r   rH   r   r   r,   r,   r-   r      s   
zLogin.__init__c                 C   sh   ddl m} | j}|d ur |d}|d ur | }| |d< || j| j| j| j	| j
|| jd}|S )Nr   )user_pk_to_url_strsociallogin)user_pkr   rH   r   r   r   r   )rC   r   r   r   copy	serializer   r   rH   r   r   r   )r1   r   r   r   datar,   r,   r-   r      s    
	zLogin.serializec                 C   s   ddl m} ddlm} t jj||d d }|d u r!t z/|d }|d ur>|	d}|d ur>|
 }|||d< t||d |d	 |d
 ||d dW S  tyZ   t w )Nr   )url_str_to_user_pk)SocialLoginr   r3   r   r   r   r   rH   r   )r   r   r   rH   r   r   )rC   r   allauth.socialaccount.modelsr   r   r6   r8   rT   
ValueErrorr   r   deserializer   KeyError)rt   r   r   r   r   r   r   r,   r,   r-   r      s6   
zLogin.deserialize)NNFNN)r#   r$   r%   __doc__r   r   r   r   r,   r,   r,   r-   r      s    
r   )$rv   django.confr   django.contrib.authr   django.corer   	django.dbr   django.db.modelsr   r   django.db.models.constraintsr   django.db.models.functionsr	   django.utilsr
   django.utils.translationr   r&   rQ   r   r   adapterr   managersr   r   Modelr   r_   rK   objectrJ   r   r,   r,   r,   r-   <module>   s$    ^*