
    f*                     V   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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"      Z$ G d d      Z%d Z&y)    N)DictOptional)settings)get_user_model)AbstractBaseUser)signing)models)Q)UniqueConstraint)timezone)gettext_lazy)app_settingssignals)get_adapter)EmailAddressManagerEmailConfirmationManagerc                   z    e Zd Z ej                  ej                   ed      ej                        Z	 ej                  d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 fdZd ZddZddZddZd Z xZS )EmailAddressuserverbose_name	on_deleteTemail address)db_index
max_lengthr   verifiedFr   defaultprimaryc            	           e Zd Z ed      Z ed      ZdgZ eddgd ed      	      gZ	e
j                  r#e	j                   ed
gd ed      	             yy)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     Q/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/account/models.pyMetar!   '   sw    ) 12,-	*+D/
 $$ #90. %r2   r4   c                     | j                   S N)r"   selfs    r3   __str__zEmailAddress.__str__;   s    zzr2   c                 `    t         |           | j                  j                         | _        y r6   )supercleanr"   lower)r8   	__class__s    r3   r<   zEmailAddress.clean>   s     ZZ%%'
r2   c                     | j                   ryd}t        j                  rSt        j                  j                  | j                        j                  d| j                        j                         }| S )NTFpk)r   r"   )
r   r   r/   r   objectsexcluderA   filterr"   exists)r8   conflicts     r3   can_set_verifiedzEmailAddress.can_set_verifiedB   s]    ==$$$$,,,8TZZ8 
 |r2   c                     | j                   ry| j                         rd| _         |r| j                  dg       | j                   S )NTr   )update_fields)r   rG   save)r8   commits     r3   set_verifiedzEmailAddress.set_verifiedN   s<    ==  " DM			5}}r2   c                    ddl m} t        j                  j	                  | j
                        }|r|ryd|_        |j                          d| _        | j                           || j
                  | j                  d       y)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rK   )	allauth.account.utilsrO   r   rB   get_primaryr   r   rJ   r"   )r8   conditionalrO   old_primarys       r3   set_as_primaryzEmailAddress.set_as_primaryW   se     	5"**66tyyA"'K		499djj6r2   c                 b    t               }|j                  |       }|j                  ||       |S )N)signup)get_emailconfirmation_modelcreatesend)r8   requestrW   modelconfirmations        r3   send_confirmationzEmailAddress.send_confirmationh   s1    +-||D)'&1r2   c                 H   ddl m} | j                           || j                        | j                  k(  rmt
        j                  j                  | j                        j                  d      j                         }d}|r|j                  } || j                  |d       y y )Nr   rN   )r   z	-verified TrP   )
rQ   rO   deleter   r"   r   rB   rD   order_byfirst)r8   rO   alt	alt_emails       r3   removezEmailAddress.removen   s|    4dii DJJ.$$+++;+& 
 III	tyy)D9 /r2   )T)FNF)r(   r)   r*   r	   
ForeignKeyr   AUTH_USER_MODELr+   CASCADEr   
EmailFieldr   EMAIL_MAX_LENGTHr"   BooleanFieldr   r   r   rB   r4   r9   r<   rG   rL   rU   r^   rf   __classcell__r>   s   @r3   r   r      s    6  vY..D
 F00'E
 #v""*uMH!f!!q|UKG!#G ((
":r2   r   c                       e Zd Zd ZddZy)EmailConfirmationMixinc                 r    | j                   }|j                  st               j                  ||      }|r|S y y r6   )email_addressr   r   confirm_email)r8   r[   rs   	confirmeds       r3   confirmzEmailConfirmationMixin.confirm   s=    **%%#33G]KI$$  &r2   Nc                     t               j                  || |       t        j                  j	                  | j
                  || |       y )N)senderr[   r]   rW   )r   send_confirmation_mailr   email_confirmation_sentrZ   r>   )r8   r[   rW   s      r3   rZ   zEmailConfirmationMixin.send   s?    ,,WdFC'',,>>	 	- 	
r2   rg   )r(   r)   r*   rv   rZ   r1   r2   r3   rq   rq   ~   s    %
r2   rq   c                       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ed        Zd Zde_         fdZd fd	Z xZS )EmailConfirmationr   r   createdr   sentT)r   nullkey@   )r   r   uniquec                   ,    e Zd Z ed      Z ed      Zy)EmailConfirmation.Metazemail confirmationzemail confirmationsN)r(   r)   r*   r+   r   r,   r1   r2   r3   r4   r      s    -. 56r2   r4   c                      d| j                   z  S )Nzconfirmation for %srs   r7   s    r3   r9   zEmailConfirmation.__str__   s    $t'9'999r2   c                     t               j                  |j                        }| j                  j	                  ||      S )N)rs   r   )r   generate_emailconfirmation_keyr"   _default_managerrY   )clsrs   r   s      r3   rY   zEmailConfirmation.create   s6    m::=;N;NO##**C*PPr2   c                     t         j                  j                         }|j                  d      }|j	                  |j                               j                         }|S )Nemail_address__user)r   )r|   rB   	all_validselect_relatedrD   r=   rc   )r   r   qsemailconfirmations       r3   from_keyzEmailConfirmation.from_key   sM    &&00245II#))+I6<<>  r2   c                     | j                   t        j                  t        j                        z   }|t        j                         k  S )N)days)r~   datetime	timedeltar   EMAIL_CONFIRMATION_EXPIRE_DAYSr   now)r8   expiration_dates     r3   key_expiredzEmailConfirmation.key_expired   s9    ))h&8&8<<'
 
 (,,.00r2   c                 D    | j                         st        | 	  |      S y r6   )r   r;   rv   )r8   r[   r>   s     r3   rv   zEmailConfirmation.confirm   s#    !7?7++ "r2   c                 z    t         |   ||       t        j                         | _        | j                          y )N)r[   rW   )r;   rZ   r   r   r~   rJ   )r8   r[   rW   r>   s      r3   rZ   zEmailConfirmation.send   s)    WV4LLN			r2   rg   )r(   r)   r*   r	   rh   r   r+   rj   rs   DateTimeFieldr   r   r}   r~   	CharFieldr   r   rB   r4   r9   classmethodrY   r   r   booleanrv   rZ   rn   ro   s   @r3   r|   r|      s    %F%%'..M
 #f"")hllSG6QvYTBD
&

%R
MC&(G7 7: Q Q ! !1 K, r2   r|   c                   H    e Zd Zd Zed        Zed        Zed        Zd Z	y)EmailConfirmationHMACc                     || _         y r6   r   )r8   rs   s     r3   __init__zEmailConfirmationHMAC.__init__   s
    *r2   c                     t        |      S r6   )r   )r   rs   s     r3   rY   zEmailConfirmationHMAC.create   s    $]33r2   c                 t    t        j                  | j                  j                  t        j
                        S )N)objsalt)r   dumpsrs   rA   r   SALTr7   s    r3   r   zEmailConfirmationHMAC.key   s%    }}!3!3!6!6\=N=NOOr2   c                 D   	 dt         j                  z  }t        j                  ||t         j                        }t        t        j                  j                  |d            }|S # t        j                  t        j                  t        j                  f$ r d }Y |S w xY w)NiQ )max_ager   F)rA   r   )r   r   r   loadsr   r   r   rB   getSignatureExpiredBadSignatureDoesNotExist)r   r   r   rA   rets        r3   r   zEmailConfirmationHMAC.from_key   s    		"\%P%PPGsG,:K:KLB'(<(<(@(@BQV(@(WXC 
 $$  %%
 	
 C
	s   A#A' '4BBc                      yrg   r1   r7   s    r3   r   z!EmailConfirmationHMAC.key_expired   s    r2   N)
r(   r)   r*   r   r   rY   propertyr   r   r   r1   r2   r3   r   r      sJ    + 4 4 P P  r2   r   c                       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d<   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   fdZd Zed        Zy	)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_kwargsrW   r"   stateinitiated_atNredirect_urlc	                     || _         |st        j                  }|| _        || _        || _        || _        || _        |i n|| _        |r|| _
        y t        j                         | _
        y r6   )r   r   EMAIL_VERIFICATIONr   r   r   rW   r"   r   timer   )	r8   r   r   r   r   rW   r"   r   r   s	            r3   r   zLogin.__init__   sd     	!!-!@!@"4(*
 =Re
,8Ldiikr2   c           	      d   ddl m} | j                  }|6|j                  d      }|#|j	                         }|j                         |d<   | j                  r || j                        nd | j                  | j                  | j                  | j                  || j                  | j                  d}|S )Nr   )user_pk_to_url_strsociallogin)user_pkr   rW   r   r"   r   r   r   )rQ   r   r   r   copy	serializer   r   rW   r   r"   r   r   )r8   r   r   r   datas        r3   r   zLogin.serialize
  s    < **$'++M:K& - 2 2 4/:/D/D/Fm, 9=		)$))4t"&"9"9kk --ZZ*ZZ --	
 r2   c           
         ddl m} d }|d   }|8t               j                  j	                   ||            j                         }	 |d   }|=|j                  d      }|*ddlm} |j                         }|j                  |      |d<   t        ||d   |d	   |d
   ||d   |d         S # t        $ r t               w xY w)Nr   )url_str_to_user_pkr   r@   r   r   )SocialLoginr   r   rW   r   r   )r   r   r   rW   r   r   r   )rQ   r   r   rB   rD   rc   r   allauth.socialaccount.modelsr   r   deserializer   KeyError
ValueError)r   r   r   r   r   r   r   r   s           r3   r   zLogin.deserialize!  s    <y/ ((//3Eg3N/OUUW 	 1M(+//>*H$1$6$6$8M3>3J3J;3WM-0#'(<#=!.1H~+7m!.1   	,	s   	A$B. .C)NNNFNNN)r(   r)   r*   __doc__r   r   __annotations__r   EmailVerificationMethodr   boolstrfloatr   r   r   r   r1   r2   r3   r   r      s     #
$$$<<<D>!LC=K
 NR&*(,# $(,J %\%I%IJJ sm	J
  ~J J }J ~J uoJ,.  r2   r   c                  r    t         j                  rddlm}  | S t         j                  rt
        }|S t        }|S )Nr   )EmailVerificationModel)r   "EMAIL_VERIFICATION_BY_CODE_ENABLED9allauth.account.internal.flows.email_verification_by_coder   EMAIL_CONFIRMATION_HMACr   r|   )r   r\   s     r3   rX   rX   C  s9    66	
 &%		-	-% L "Lr2   )'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   r   allauth.account.adapterr   allauth.account.managersr   r   Modelr   rq   r|   r   r   rX   r1   r2   r3   <module>r      s      !   . 7    9 ! 6 1 /d:6<< d:N
 
$.. .b2 <a aHr2   