
    )JfZ#                     J   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ej                  Z G d d          Z G d deej                  Z  G d dee!          Z" G 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                   ^   e Zd Z ej        ej         ed          ej                  Z	 ej
        ej         ed                    Z ej         ed          d          Z ej         ed          d          Z e            Z G d	 d
          Zd Zd ZddZddZddZd ZdS )EmailAddressuserverbose_name	on_deleteemail address)
max_lengthr   verifiedFr   defaultprimaryc                       e Zd Z ed          Z ed          ZdgZej        r e	dgd e
d                    gZ e ed          d	
          gZdS )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     Y/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/allauth/account/models.pyMetar    !   s        q))a 122,-$ 	  #90a...  K 5w.JKKKLr1   r3   c                     | j         S N)r!   selfs    r2   __str__zEmailAddress.__str__/   s
    zr1   c                     | j         rdS d}t          j        rQt          j                            | j                                      d| j                  	                                }| S )NTFpk)r   email__iexact)
r   r   r-   r   objectsexcluder;   filterr!   exists)r7   conflicts     r2   can_set_verifiedzEmailAddress.can_set_verified2   se    = 	4$ 	$,,,88TZ@@ 
 |r1   Tc                     | j         rdS |                                 r d| _         |r|                     dg           | j         S )NTr   )update_fields)r   rB   save)r7   commits     r2   set_verifiedzEmailAddress.set_verified>   sR    = 	4  "" 	6 DM 6			555}r1   c                    ddl m} t          j                            | j                  }|r|rdS d|_        |                                 d| _        |                                   || j        | j        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rF   )	allauth.account.utilsrJ   r   r=   get_primaryr   r   rE   r!   )r7   conditionalrJ   old_primarys       r2   set_as_primaryzEmailAddress.set_as_primaryG   s     	544444"*66tyAA 	 u"'K		
49dj6666tr1   Nc                     t           j        rt          |           }nt                              |           }|                    ||           |S )N)signup)r   EMAIL_CONFIRMATION_HMACEmailConfirmationHMACEmailConfirmationcreatesend)r7   requestrR   confirmations       r2   send_confirmationzEmailAddress.send_confirmationX   sN    / 	:066LL,33D99L'&111r1   c                 @   ddl m} |                                   || j                  | j        k    rjt
          j                            | j                                      d          	                                }d}|r|j        } || j        |d           d S d S )Nr   rI   )r   z	-verified TrK   )
rL   rJ   deleter   r!   r   r=   r?   order_byfirst)r7   rJ   alt	alt_emails       r2   removezEmailAddress.remove`   s    444444:di  DJ..$+++;;+&& 
 I &I	Jty)D999999 /.r1   )T)FNF)r'   r(   r)   r   
ForeignKeyr   AUTH_USER_MODELr*   CASCADEr   
EmailFieldr   EMAIL_MAX_LENGTHr!   BooleanFieldr   r   r   r=   r3   r8   rB   rG   rP   rZ   rb   r0   r1   r2   r   r      sX       6 QvYY.  D
 F0Q''  E #v"*uMMMH!f!qq||UKKKG!!##GM M M M M M M M  
 
 
      "   : : : : :r1   r   c                       e Zd Zd ZddZdS )EmailConfirmationMixinc                     | j         }|j        sMt                                          ||          }|r+t          j                            | j        ||           |S d S d S )N)senderrX   email_address)rn   r   r   confirm_emailr   email_confirmedrW   	__class__)r7   rX   rn   	confirmeds       r2   confirmzEmailConfirmationMixin.confirmq   s}    *% 	%#33G]KKI %',,>#"/ -   
 %$	% 	%% %r1   NFc                     t                                          || |           t          j                            | j        || |           d S )N)rm   rX   rY   rR   )r   send_confirmation_mailr   email_confirmation_sentrW   rq   )r7   rX   rR   s      r2   rW   zEmailConfirmationMixin.send}   sV    ,,WdFCCC',,>	 	- 	
 	
 	
 	
 	
r1   rc   )r'   r(   r)   rs   rW   r0   r1   r2   rk   rk   p   s7        
% 
% 
%
 
 
 
 
 
r1   rk   c                   x    e Zd Z ej        e ed          ej                  Z ej	         ed          e
j                  Z ej	         ed          d          Z ej         ed          d	d
          Z e            Z G d d          Zd Zed             Zd Zde_         fdZd fd	Z xZS )rU   r   r   createdr   sentT)r   nullkey@   )r   r   uniquec                   :    e Zd Z ed          Z ed          ZdS )EmailConfirmation.Metazemail confirmationzemail confirmationsN)r'   r(   r)   r*   r   r+   r0   r1   r2   r3   r      s1        q-..a 566r1   r3   c                     d| j         z  S )Nzconfirmation for %srn   r6   s    r2   r8   zEmailConfirmation.__str__   s    $t'999r1   c                     t                                          |j                  }| j                            ||          S )N)rn   r{   )r   generate_emailconfirmation_keyr!   _default_managerrV   )clsrn   r{   s      r2   rV   zEmailConfirmation.create   s8    mm::=;NOO#**C*PPPr1   c                 ~    | j         t          j        t          j                  z   }|t          j                    k    S )N)days)ry   datetime	timedeltar   EMAIL_CONFIRMATION_EXPIRE_DAYSr   now)r7   expiration_dates     r2   key_expiredzEmailConfirmation.key_expired   s;    )h&8<'
 '
 '
 
 (,..00r1   c                 r    |                                  s!t                                          |          S d S r5   )r   superrs   )r7   rX   rq   s     r2   rs   zEmailConfirmation.confirm   s7    !! 	,77??7+++	, 	,r1   NFc                     t                                          ||           t          j                    | _        |                                  d S )N)rX   rR   )r   rW   r   r   ry   rE   )r7   rX   rR   rq   s      r2   rW   zEmailConfirmation.send   s;    WV444LNN			r1   rc   )r'   r(   r)   r   rd   r   r*   rf   rn   DateTimeFieldr   r   rx   ry   	CharFieldr{   r   r=   r3   r8   classmethodrV   r   booleanrs   rW   __classcell__)rq   s   @r2   rU   rU      sc       %F%Q''.  M
 #f")hlSSSG6QQvYYTBBBD
&
%R
M
M
MC&&((G7 7 7 7 7 7 7 7: : : Q Q [Q1 1 1 K, , , , ,         r1   rU   c                   @    e Zd Zd Zed             Zed             ZdS )rT   c                     || _         d S r5   r   )r7   rn   s     r2   __init__zEmailConfirmationHMAC.__init__   s    *r1   c                 V    t          j        | j        j        t          j                  S )N)objsalt)r   dumpsrn   r;   r   SALTr6   s    r2   r{   zEmailConfirmationHMAC.key   s     }!3!6\=NOOOOr1   c                 "   	 dt           j        z  }t          j        ||t           j                  }t          t          j                            |d                    }n.# t          j	        t          j
        t          j        f$ r d }Y nw xY w|S )NiQ )max_ager   F)r;   r   )r   r   r   loadsr   rT   r   r=   getSignatureExpiredBadSignatureDoesNotExist)r   r{   r   r;   rets        r2   from_keyzEmailConfirmationHMAC.from_key   s    		"\%PPGsG,:KLLLB'(<(@(@BQV(@(W(WXXCC$ %
 	 	 	
 CCC	 
s   AA! !(BBN)r'   r(   r)   r   propertyr{   r   r   r0   r1   r2   rT   rT      s\        + + + P P XP   [  r1   rT   c                   @    e Zd ZdZ	 	 	 	 	 ddZd Zed             ZdS )LoginzA
    Represents a user that is in the process of logging in.
    NFc                 p    || _         || _        || _        || _        || _        || _        |i n|| _        d S r5   )r   email_verificationredirect_urlsignal_kwargsrR   r!   state)r7   r   r   r   r   rR   r!   r   s           r2   r   zLogin.__init__   sD     	"4(*
 =RRe


r1   c                 
   ddl m} | j        }|B|                    d          }|+|                                }|                                |d<    || j                  | j        | j        | j	        | j
        || j        d}|S )Nr   )user_pk_to_url_strsociallogin)user_pkr   rR   r   r!   r   r   )rL   r   r   r   copy	serializer   r   rR   r   r!   r   )r7   r   r   r   datas        r2   r   zLogin.serialize   s    <<<<<< *$'++M::K& - 2 2 4 4/:/D/D/F/Fm, *)$)44"&"9k -Z*Z
 
 r1   c           	         ddl m} ddlm} t	                      j                             ||d                                                             }|t                      	 |d         }|C|	                    d          }|,|
                                }|                    |          |d<   t          ||d         |d	         |d
         ||d                   S # t          $ r t                      w xY w)Nr   )url_str_to_user_pk)SocialLoginr   r:   r   r   r   r   rR   r   )r   r   r   rR   r   r   )rL   r   allauth.socialaccount.modelsr   r   r=   r?   r_   
ValueErrorr   r   deserializer   KeyError)r   r   r   r   r   r   r   s          r2   r   zLogin.deserialize   s+   <<<<<<<<<<<< VV11$y/BBVCCUWW 	
 <,,	 1M(+//>>*$1$6$6$8$8M3>3J3J;3W3WM-0#'(<#=!.1H~+7m     	 	 	,,	s   &A9C   C9)NNFNN)r'   r(   r)   __doc__r   r   r   r   r0   r1   r2   r   r      sm          4 4 4 4$  ,   [  r1   r   )$r   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*   r\   r   r   adapterr   managersr   r   Modelr   rk   rU   objectrT   r   r0   r1   r2   <module>r      s                . . . . . .             % % % % % % % % 9 9 9 9 9 9 , , , , , , ! ! ! ! ! ! 6 6 6 6 6 6 # # # # # # # #             C C C C C C C C[: [: [: [: [:6< [: [: [:|
 
 
 
 
 
 
 
.' ' ' ' '. ' ' 'T    2F   .K K K K K K K K K Kr1   