
    Sњh*              	          S SK r S SKJr  S SKJrJr  S SKJrJr  S SK	J
r
  S SKJr  S SKJrJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SK J!r!  S SK"J#r#  S\$4S jr%\4S\\&   4S jjr'S\S4S\&4S jjr(S&S\$4S jjr)     S'S jr*S&S jr+S r,S r-S r. S(S\&S \\$   S!\$S\4S" jjr/S# r0S\&4S$ jr1S% r2g))    N)OrderedDict)ListOptional)REDIRECT_FIELD_NAMEget_user_model)models)Q)base36_to_intint_to_base36)app_settings)get_adapter)flows)valid_email_or_none)default_user_display)user_display)
user_email)
user_field)user_username)Login)httpkit)get_request_paramreturnc                     [         R                  " SU 5      R                  5       n[         R                  " SU5      R                  5       nX#:H  $ )z
Perform case-insensitive comparison of two identifiers, using the
recommended algorithm from Unicode Technical Report 36, section
2.11.2(B)(2).
NFKC)unicodedata	normalizecasefold)s1s2norm_s1norm_s2s       PD:\Anime\Ugyen\janka_web_project\venv\Lib\site-packages\allauth/account/utils.py_unicode_ci_comparer#      sC     ##FB/88:G##FB/88:G    c                 j    [        X5      nU(       a   [        5       R                  U5      (       d  SnU$ )zS
Returns the next URL to redirect to, if it was explicitly passed
via the request.
N)r   r   is_safe_url)requestredirect_field_nameredirect_tos      r"   get_next_redirect_urlr*   #   s.     $GAK;=44[AAr$   Fc                     UnU(       a  [        U5      (       a  U" 5       nU(       d	  [        XS9nU(       d;  U(       a  [        5       R                  U 5      nU$ [        5       R	                  U 5      nU$ )N)r(   )callabler*   r   get_signup_redirect_urlget_login_redirect_url)r'   urlr(   signuprets        r"   r.   r.   0   sb     C
x}} e#GU-77@C J -66w?CJr$   c                     SSK Jn  S nU(       a,  Sn UR                  R                  X5      nUR                  nU$ UR                  R                  U SS9R                  5       nU$ ! UR
                   a     U$ f = f)N   EmailAddressFT)userverified)r   r5   objectsget_for_userr7   DoesNotExistfilterexists)r6   emailr5   emailaddressr1   s        r"   has_verified_emailr?   B   s    $L	'//<<TIL''C
 J ""))td)CJJLJ	 (( 	 J		s   'A& &A:9A:c           	      \    [        UUUUUUS9n[        R                  R                  X5      $ )N)r6   email_verificationredirect_urlsignal_kwargsr0   r=   )r   r   loginperform_login)r'   r6   rA   rB   rC   r0   r=   rD   s           r"   rE   rE   R   s7     -!#E ;;$$W44r$   c                 D    [         R                  R                  U UUUUS9$ )N)r6   rA   rB   rC   )r   r0   complete_signup)r'   r6   rA   success_urlrC   s        r"   rG   rG   f   s-    <<''- # (  r$   c                 h   SSK Jn  [        5       n[        5       n/ n/ n/ nU GH  n[	        UR
                  5      n	U	(       d  M"  Xl        [        R                  (       a7  [        R                  S:w  a#  UR                  R                  U	/5      (       a  Mt  [        R                  (       aG  [        R                  S:X  a3  UR                  (       a"  UR                  R                  U	5      (       a  M  UR                  U	5      n
U
(       aI  U
R                  =(       d    UR                  U
l        U
R                  =(       d    UR                  U
l        O9Un
U
R                  =(       d    UR                  X
R
                  5      U
l        XU	'   U
R                  (       a3  UR!                  U
5        U
R                  (       a  UR!                  U
5        U
R                  (       d  GM  UR!                  U
5        GM     U(       a  US   nO@U(       a  US   nO3U(       a  US   nO&U(       a  [#        UR%                  5       5      S   nOSnUR%                  5        H=  n
UR
                  R'                  5       U
R
                  R'                  5       :H  U
l        M?     [#        UR%                  5       5      U4$ )z
Takes a list of EmailAddress instances and cleans it up, making
sure only valid ones remain, without multiple primaries etc.

Order is important: e.g. if multiple primary email addresses
exist, the first one encountered will be kept as primary.
r3   r4   strictr   N)r   r5   r   r   r   r=   r   UNIQUE_EMAILPREVENT_ENUMERATIONr8   lookupr7   is_verifiedgetprimaryis_email_verifiedappendlistvalueslower)r'   	addressesr5   adaptere2aprimary_addressesverified_addressesprimary_verified_addressesaddressr=   aprimary_addresss               r"   cleanup_email_addressesr_   p   s    %mG
-C!##GMM2 %%00H<$$++UG44 %%00H<  $$0077 GGEN		4W__AI7w'7'7AJARw'@'@'''RAJJ99$$Q'zz*11!4:::%%a(G J "4Q7	,Q/	+A.	szz|,Q/ ZZ\#))//1QWW]]_D	 

..r$   c           	         SSK Jn  UR                  R                  US9R	                  5       (       a   e/ n[        5       nUR                  U 5      nU(       a%  UR                  U" XR                  5       SSS95        [        U5      nU(       a%  UR                  U" XR                  5       SSS95        [        XU-   5      u  p(U H  n	Xl        U	R                  5         M     UR                  R                  X5        U(       aZ  U=(       d    SR                  5       UR                  R                  5       :w  a%  [        XR                  5        UR                  5         U$ )z
Creates proper EmailAddress for the user that was just signed
up. Only sets up, doesn't do any other handling such as sending
out email confirmation mails etc.
r3   r4   )r6   T)r6   r=   rP   r7   F )r   r5   r8   r;   r<   r   unstash_verified_emailrR   rU   r   r_   r6   savefill_cache_for_userr=   )
r'   r6   rV   r5   priority_addressesrW   stashed_emailr=   rP   r]   s
             r"   setup_user_emailrg      s+    %##***5<<>>>>mG227;M!!!4!4!6t	

 tE!!d++-PUV	
 1i/I 	  ,,T=EKR&&(GMM,?,?,AA4'		Nr$   c            
         [         R                  (       ah  U  Vs/ s H!  n[        S0 [         R                  S-   U0D6PM#     nnUS   nUSS   H  nX4-  nM	     [	        5       R
                  R                  U5      nU$ [	        5       R
                  R                  " S0 [         R                  S-   U  Vs/ s H  oR                  5       PM     sn0D6nU$ s  snf s  snf )N__iexactr   r3   __in )r   PRESERVE_USERNAME_CASINGr	   USER_MODEL_USERNAME_FIELDr   _default_managerr;   rU   )usernameuqlistqq2r1   s         r"   filter_users_by_usernamert      s    ,, 
 I77*DaHI 	 
 !H)BA //66q9 J //66 
66.67h779h7
 J
 8s   (C4Cr=   	is_activeprefer_verifiedc                 L   SSK Jn  [        5       nU R                  5       n [	        UR
                  R                  U S9R                  S5      5      nSnU(       a!  [	        [        S U5      5      nU(       a  UnSn/ nU H;  n	[        U	R                  U 5      (       d  M   UR                  U	R                  5        M=     [        R                  (       a  U(       d  [        R                  U 0n
UR
                  R                  " S	0 U
D6nUR                  S5       H@  n[        U[        R                  5      n[        X5      (       d  M/  UR                  U5        MB     Ub,  [!        U5       Vs/ s H  oR"                  U:X  d  M  UPM     nn[	        [!        U5      5      $ s  snf )
a!  Return list of users by email address

Typically one, at most just a few in length.  First we look through
EmailAddress table, than customisable User model table. Add results
together avoiding SQL joins and deduplicate.

`prefer_verified`: When looking up users by email, there can be cases where
users with verified email addresses are preferable above users who did not
verify their email address. The password reset is such a use case -- if
there is a user with a verified email than that user should be returned, not
one of the other users.
r3   r4   )r=   r6   Fc                     U R                   $ N)r7   )es    r"   <lambda>'filter_users_by_email.<locals>.<lambda>  s    qzzr$   Ti  rk   )r   r5   r   rU   rS   r8   r;   select_relatedr#   r=   rR   r6   r   USER_MODEL_EMAIL_FIELDiteratorgetattrsetru   )r=   ru   rv   r5   UsermailsrN   verified_mailsusersrz   q_dictuser_qsr6   r   rp   s                  r"   filter_users_by_emailr      sJ    %DKKME%%,,5,9HHPQEKf%95AB"EKEqww..LL   **;55u=,,%%//$$T*D |'J'JKJ":55T" + JCJq++*BJCE
 Ds   .F!F!c                 Z    [        X5      nU(       a  [        R                  " XU05      nU$ ry   )r*   r   add_query_params)r'   r/   r(   next_urls       r"   passthrough_next_redirect_urlr     s)    $WBH&&s(,KLJr$   c                    [        5       n[        UR                  R                  5      n[	        U[
        R                  5      (       aA  [        U R                  [        5      (       a  U R                  $ U R                  R                  $ [	        U[
        R                  5      (       a  [        [        U R                  5      5      $ [        U R                  5      $ )z
This should return a string.
)r   type_metapk
issubclassr   	UUIDField
isinstancestrhexIntegerFieldr   int)r6   r   pk_field_classs      r"   user_pk_to_url_strr   #  s     D$**--(N.&"2"233dggs##77Nww{{	NF$7$7	8	8S\**tww<r$   c                    [        5       n[        UR                  R                  SS 5      nU(       aQ  [        USS 5      (       a?  UR                  R                  R                  R
                  R                  R                  nOUR                  R                  n[        U5      n[        U[        R                  5      (       a  [        U 5      nUR                  U5      nU$ UR                  U 5      nU$ )Nremote_fieldto)r   r   r   r   r   r   r   r   r   r   r
   	to_python)pk_strr   r   pk_fieldr   r   s         r"   url_str_to_user_pkr   2  s    D4::==.$?LdD99::==--006699::==(^N.&"5"5666" # I 'Ir$   ry   )NNNFN)NF)3r   collectionsr   typingr   r   django.contrib.authr   r   	django.dbr   django.db.modelsr	   django.utils.httpr
   r   allauth.accountr   allauth.account.adapterr   allauth.account.internalr   !allauth.account.internal.emailkitr    allauth.account.internal.userkitr   r   r   r   r   allauth.account.modelsr   allauth.core.internalr   allauth.utilsr   boolr#   r   r*   r.   r?   rE   rG   r_   rg   rt   r   r   r   r   rk   r$   r"   <module>r      s     # ! C   : ( / * A A 9 7 7 : ( ) +4  "5
c]
 +>u$D & 
5(F/R"J* KP''#D>'CG'	'T r$   