o
    h*                     @   s  d dl Z d dl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 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 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!Z#G dd dZ$dd Z%dS )    N)DictOptional)settings)get_user_model)AbstractBaseUser)signing)models)Q)UniqueConstraint)timezone)gettext_lazy)app_settings)get_adapter)EmailAddressManagerEmailConfirmationManagerc                       s   e Zd ZejejedejdZ	ej
d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 fddZdd ZdddZdddZdddZdd Z  ZS )EmailAddressuserverbose_name	on_deleteTemail address)db_index
max_lengthr   verifiedFr   defaultprimaryc                   @   sb   e Zd ZedZedZdgZeddgdeddd	gZ	e
jr/e	ed
gdeddd	 dS dS )zEmailAddress.Metar   zemail addresses)r   emailr   r   unique_primary_emailT)r   )fieldsname	conditionr   unique_verified_email)r   N)__name__
__module____qualname___r   verbose_name_pluralunique_togetherr
   r	   constraintsr   UNIQUE_EMAILappend r,   r,   M/var/www/html/pos/venv/lib/python3.10/site-packages/allauth/account/models.pyMeta$   s&    r.   c                 C   s   | j S N)r   selfr,   r,   r-   __str__8   s   zEmailAddress.__str__c                    s   t    | j | _d S r/   )supercleanr   lowerr0   	__class__r,   r-   r4   ;   s   
zEmailAddress.cleanc                 C   s:   | j rdS d}tjrtjj| jdjd| jd	 }| S )NTFpk)r   r   )
r   r   r*   r   objectsexcluder9   filterr   exists)r1   conflictr,   r,   r-   can_set_verified?   s   zEmailAddress.can_set_verifiedc                 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_verifiedK   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rB   )	allauth.account.utilsrE   r   r:   get_primaryr   r   rA   r   )r1   conditionalrE   old_primaryr,   r,   r-   set_as_primaryT   s   zEmailAddress.set_as_primaryNc                 C   s"   t  }|| }|j||d |S )N)signup)get_emailconfirmation_modelcreatesend)r1   requestrL   modelconfirmationr,   r,   r-   send_confirmatione   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   rD   )r   z	-verified TrF   )
rG   rE   deleter   r   r   r:   r<   order_byfirst)r1   rE   alt	alt_emailr,   r,   r-   removek   s   zEmailAddress.remove)T)FNF)r#   r$   r%   r   
ForeignKeyr   AUTH_USER_MODELr&   CASCADEr   
EmailFieldr   EMAIL_MAX_LENGTHr   BooleanFieldr   r   r   r:   r.   r2   r4   r?   rC   rK   rS   rZ   __classcell__r,   r,   r6   r-   r      s,    

	
r   c                   @   s*   e Zd Zdee fddZdd	ddZdS )
EmailConfirmationMixinreturnc                 C   s   ddl m} | j}|||S )Nr   )mark_email_address_as_verified)1allauth.account.internal.flows.email_verificationre   email_address)r1   rP   re   rg   r,   r,   r-   confirm|   s   
zEmailConfirmationMixin.confirmNFc                 C   s   t  || | d S r/   )r   send_confirmation_mailr1   rP   rL   r,   r,   r-   rO      s   zEmailConfirmationMixin.sendr[   rd   N)r#   r$   r%   r   r   rh   rO   r,   r,   r,   r-   rc   {   s    rc   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edd Zdd Zde_dee f fddZdd fddZ  ZS )EmailConfirmationr   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rg   r0   r,   r,   r-   r2         
zEmailConfirmation.__str__c                 C   s   t  |j}| jj||dS )N)rg   rp   )r   generate_emailconfirmation_keyr   _default_managerrN   )clsrg   rp   r,   r,   r-   rN      s   zEmailConfirmation.createc                 C   s,   t j }|d}|j| d }|S )Nemail_address__user)rp   )rl   r:   	all_validselect_relatedr<   r5   rW   )rw   rp   qsemailconfirmationr,   r,   r-   from_key   s   

zEmailConfirmation.from_keyc                 C   s    | j tjtjd }|t kS )N)days)rn   datetime	timedeltar   EMAIL_CONFIRMATION_EXPIRE_DAYSr   now)r1   expiration_dater,   r,   r-   key_expired   s   zEmailConfirmation.key_expiredrd   c                    s   |   s
t |S d S r/   )r   r3   rh   )r1   rP   r6   r,   r-   rh      s   zEmailConfirmation.confirmNFc                    s&   t  j||d t | _|   d S )N)rP   rL   )r3   rO   r   r   rn   rA   rj   r6   r,   r-   rO      s   
zEmailConfirmation.sendr[   rk   )r#   r$   r%   r   r\   r   r&   r^   rg   DateTimeFieldr   r   rm   rn   	CharFieldrp   r   r:   r.   r2   classmethodrN   r}   r   booleanr   rh   rO   rb   r,   r,   r6   r-   rl      s(    

rl   c                   @   s@   e Zd Zdd Zedd Zedd Zedd Zd	d
 Z	dS )EmailConfirmationHMACc                 C   s
   || _ d S r/   rs   )r1   rg   r,   r,   r-   __init__   rt   zEmailConfirmationHMAC.__init__c                 C   s   t |S r/   )r   )rw   rg   r,   r,   r-   rN      s   zEmailConfirmationHMAC.createc                 C   s   t j| jjtjdS )N)objsalt)r   dumpsrg   r9   r   SALTr0   r,   r,   r-   rp      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)r9   r   )r   r   r   loadsr   r   r   r:   getSignatureExpiredBadSignatureDoesNotExist)rw   rp   r   r9   retr,   r,   r-   r}      s   

zEmailConfirmationHMAC.from_keyc                 C   s   dS r[   r,   r0   r,   r,   r-   r      s   z!EmailConfirmationHMAC.key_expiredN)
r#   r$   r%   r   r   rN   propertyrp   r}   r   r,   r,   r,   r-   r      s    


r   c                   @   s   e Zd ZU dZee ed< ejed< ee	 ed< e
ed< ee ed< ee ed< e	ed< eed	< ee ed
< 								ddeej d
ee dee	 de
dee dee	 d	ee dee fddZdd Zedd ZdS )Logina  
    Represents a user that is in the process of logging in.

    Keyword arguments:

    signup -- Indicates whether or not sending the
    email is essential (during signup), or if it can be skipped (e.g. in
    case email verification is optional and we are only logging in).
    r   email_verificationsignal_kwargsrL   r   phonestateinitiated_atredirect_urlNFc
           
      C   sb   || _ |stj}|| _|| _|| _|| _|| _|	| _|d u r i n|| _	|r*|| _d S t

 | _d S r/   )r   r   EMAIL_VERIFICATIONr   r   r   rL   r   r   r   timer   )
r1   r   r   r   r   rL   r   r   r   r   r,   r,   r-   r      s   zLogin.__init__c              
   C   sz   ddl m} | j}|d ur |d}|d ur | }| |d< | jr(|| jnd | j| j| j	| j
| j|| j| jd	}|S )Nr   )user_pk_to_url_strsociallogin)	user_pkr   rL   r   r   r   r   r   r   )rG   r   r   r   copy	serializer   r   rL   r   r   r   r   r   )r1   r   r   r   datar,   r,   r-   r     s$   
zLogin.serializec                 C   s   ddl m} d }|d }|d urt jj||d }z>|d }|d ur?|d}|d ur?ddlm} |	 }|
||d< t||d |d	 |d
 |d |d ||d |d d	W S  tyd   t w )Nr   )url_str_to_user_pkr   r8   r   r   )SocialLoginr   r   r   r   rL   r   r   )	r   r   r   r   r   rL   r   r   r   )rG   r   r   r:   r<   rW   r   allauth.socialaccount.modelsr   r   deserializer   KeyError
ValueError)rw   r   r   r   r   r   r   r   r,   r,   r-   r     s8   
zLogin.deserialize)NNNFNNNN)r#   r$   r%   __doc__r   r   __annotations__r   EmailVerificationMethodr   boolstrfloatr   r   r   r   r,   r,   r,   r-   r      sN   
 
	

r   c                  C   s    t jrtt jrt} | S t} | S r/   )r   "EMAIL_VERIFICATION_BY_CODE_ENABLEDNotImplementedErrorEMAIL_CONFIRMATION_HMACr   rl   )rQ   r,   r,   r-   rM   C  s   rM   )&r   r   typingr   r   django.confr   django.contrib.authr   django.contrib.auth.modelsr   django.corer   	django.dbr   django.db.modelsr	   django.db.models.constraintsr
   django.utilsr   django.utils.translationr   r&   allauth.accountr   allauth.account.adapterr   allauth.account.managersr   r   Modelr   rc   rl   r   r   rM   r,   r,   r,   r-   <module>   s*    g2k