Ë
    ûûàg»0  ã            	       óÆ  — d dl 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
 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 d dlmZ d dl m!Z!m"Z"m#Z# de$fd„Z%e	fdee&   fd„Z'de	dfde&fd„Z(da)de&fd„Z*de&fd„Z+ddœd„Z,ddœd„Z-d*de$fd„Z.	 	 	 	 	 d+d„Z/d*d„Z0d„ Z1d„ Z2d,de$fd „Z3d!„ Z4d"„ Z5	 d-d#e&d$ee$   d%e$defd&„Z6d'„ Z7de&fd(„Z8d)„ Z9y).é    N)ÚOrderedDict)ÚListÚOptional)Úsettings)ÚREDIRECT_FIELD_NAMEÚget_user_model)Úmodels)ÚQ)Ú	force_str)Úbase36_to_intÚint_to_base36)Úapp_settings)Úget_adapter)Úflows)Ú
user_field)ÚLogin)Úhttpkit)Úget_request_paramÚimport_callableÚvalid_email_or_noneÚreturnc                 óœ   — t        j                  d| «      j                  «       }t        j                  d|«      j                  «       }||k(  S )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       úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/allauth/account/utils.pyÚ_unicode_ci_comparer"      sE   € ô ×#Ñ# F¨BÓ/×8Ñ8Ó:€GÜ×#Ñ# F¨BÓ/×8Ñ8Ó:€GØ�gÑÐó    c                 óX   — t        | |«      }|rt        «       j                  |«      sd}|S )z_
    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Ð-@ÓA€KÙœ;›=×4Ñ4°[ÔAØˆØÐr#   Fc                 óÀ   — |}|rt        |«      r |«       }|st        | |¬«      }|s6|rt        «       j                  | «      }|S t        «       j	                  | «      }|S )N)r'   )Úcallabler)   r   Úget_signup_redirect_urlÚget_login_redirect_url)r&   Úurlr'   ÚsignupÚrets        r!   r-   r-   1   sc   € ð €CÙ
Œx˜Œ}ñ ‹eˆÙÜ# GÐATÔUˆÙÙÜ“-×7Ñ7¸Ó@ˆCð €Jô “-×6Ñ6°wÓ?ˆCØ€Jr#   c                 ó¨   — d}t         j                  rt        | t         j                  «      }|xs# t        | «      xs | j                  j
                  S )NÚ )r   ÚUSER_MODEL_USERNAME_FIELDÚgetattrr   Ú_metaÚverbose_name)Úuserr0   s     r!   Údefault_user_displayr8   F   s@   € Ø
€CÜ×-Ò-Ü�dœL×BÑBÓCˆØÒ<”)˜D“/Ò< T§Z¡Z×%<Ñ%<Ð<r#   c                 ód   — t         s t        t        dt        «      }t	        |«      a t        | «      S )NÚACCOUNT_USER_DISPLAY)Ú_user_display_callabler4   r   r8   r   )r7   Úfs     r!   Úuser_displayr=   M   s+   € å!Ü”HÐ4Ô6JÓKˆÜ!0°Ó!3ÐÜ! $Ó'Ð'r#   )Úcommitc                óŽ   — |r)t         j                  s|d   r|d   j                  «       g}t        | t         j                  g|¢­Ž S )Nr   )r   ÚPRESERVE_USERNAME_CASINGÚlowerr   r3   )r7   r>   Úargss      r!   Úuser_usernamerC   U   s=   € Ù”L×9Ò9¸dÀ1ºgØ�Q‘—‘“Ð ˆÜ�dœL×BÑBÐJÀTÒJÐJr#   c                óœ   — |r|d   r|d   j                  «       g}t        | t        j                  g|¢­d|iŽ}|r|j                  «       }|S )Nr   r>   )rA   r   r   ÚUSER_MODEL_EMAIL_FIELD)r7   r>   rB   r0   s       r!   Ú
user_emailrF   [   sL   € Ù��Q’Ø�Q‘—‘“Ð ˆÜ
�Tœ<×>Ñ>Ð
UÀÒ
UÈfÑ
U€CÙ
Ø�i‰i‹kˆØ€Jr#   c                 óö   — ddl m} d }|r-d}	 |j                  j                  | |«      }|j                  }|S |j                  j                  | d¬«      j                  «       }|S # |j
                  $ r Y |S w xY w)Né   ©ÚEmailAddressFT)r7   Úverified)r	   rJ   ÚobjectsÚget_for_userrK   ÚDoesNotExistÚfilterÚexists)r7   ÚemailrJ   Úemailaddressr0   s        r!   Úhas_verified_emailrS   d   s�   € Ý$à€LÙØˆð	Ø'×/Ñ/×<Ñ<¸TÀ5ÓIˆLØ×'Ñ'ˆCð
 €Jð ×"Ñ"×)Ñ)¨t¸dÐ)ÓC×JÑJÓLˆØ€Jøð	 ×(Ñ(ò 	Øð €Jð		ús   Ž(A% Á%A8Á7A8c                 ód   — t        ||||||¬«      }t        j                  j                  | |«      S )N)r7   Úemail_verificationÚredirect_urlÚsignal_kwargsr/   rQ   )r   r   ÚloginÚperform_login)r&   r7   rU   rV   rW   r/   rQ   rX   s           r!   rY   rY   t   s9   € ô ØØ-Ø!Ø#ØØô€Eô �;‰;×$Ñ$ W¨eÓ4Ð4r#   c                 óJ   — t         j                  j                  | ||||¬«      S )N)r7   rU   rV   rW   )r   r/   Úcomplete_signup)r&   r7   rU   Úsuccess_urlrW   s        r!   r[   r[   ˆ   s-   € Ü�<‰<×'Ñ'ØØØ-Ø Ø#ð (ó ð r#   c                 ó°  — ddl m} t        «       }t        «       }g }g }g }|D �]Ž  }t	        |j
                  «      }	|	sŒ|	|_        t        j                  r0t        j                  dk7  r|j                  j                  |	g«      rŒct        j                  r;t        j                  dk(  r(|j                  r|j                  j                  |	«      rŒ®|j                  |	«      }
|
r?|
j                  xs |j                  |
_        |
j                  xs |j                  |
_        n6|}
|
j                  xs |j                  | |
j
                  «      |
_        |
||	<   |
j                  r.|j!                  |
«       |
j                  r|j!                  |
«       |
j                  s�Œ~|j!                  |
«       �Œ‘ |r|d   }n1|r|d   }n)|r|d   }n!|rt#        |j%                  «       «      d   }nd}|j%                  «       D ]<  }
|j
                  j'                  «       |
j
                  j'                  «       k(  |
_        Œ> t#        |j%                  «       «      |fS )a
  
    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.
    rH   rI   Ústrictr   N)r	   rJ   r   r   r   rQ   r   ÚUNIQUE_EMAILÚPREVENT_ENUMERATIONrL   ÚlookuprK   Úis_verifiedÚgetÚprimaryÚis_email_verifiedÚappendÚlistÚvaluesrA   )r&   Ú	addressesrJ   ÚadapterÚe2aÚprimary_addressesÚverified_addressesÚprimary_verified_addressesÚaddressrQ   ÚaÚprimary_addresss               r!   Úcleanup_email_addressesrr   ’   s  € õ %ä‹m€Gä
‹-€CØÐØÐØ!#ÐØó #)ˆä# G§M¡MÓ2ˆÙØØˆŒô ×%Ò%Ü×0Ñ0°HÒ<Ø×$Ñ$×+Ñ+¨U¨GÔ4ð ä×%Ò%Ü×0Ñ0°HÒ<Ø× Ò Ø×$Ñ$×0Ñ0°Ô7ð Ø�G‰G�E‹NˆÙØŸ	™	Ò4 W§_¡_ˆAŒIØŸ™Ò7 w×'7Ñ'7ˆA�JàˆAØŸ™ÒR w×'@Ñ'@ÀÈ!Ï'É'Ó'RˆAŒJØˆC�‰JØ�9Š9Ø×$Ñ$ QÔ'Ø�zŠzØ*×1Ñ1°!Ô4Ø�:Œ:Ø×%Ñ% aÖ(ðG#)ñJ "Ø4°QÑ7‰Ù	à,¨QÑ/‰Ù	à+¨AÑ.‰Ù	ä˜sŸz™z›|Ó,¨QÑ/‰ð ˆà�Z‰Z‹\ò EˆØ#×)Ñ)×/Ñ/Ó1°Q·W±W·]±]³_ÑDˆ�	ðEä�—
‘
“Ó˜Ð.Ð.r#   c                 ó¬  — ddl m} |j                  j                  |¬«      j	                  «       rJ ‚g }t        «       }|j                  | «      }|r)|j                   |||j                  «       dd¬«      «       t        |«      }|r)|j                   |||j                  «       dd¬«      «       t        | ||z   «      \  }}|D ]  }	||	_        |	j                  «        Œ |j                  j                  ||«       |rU|xs dj                  «       |j                  j                  «       k7  r&t        ||j                  «       |j                  «        |S )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.
    rH   rI   )r7   T)r7   rQ   rd   rK   Fr2   )r	   rJ   rL   rO   rP   r   Úunstash_verified_emailrf   rA   rF   rr   r7   ÚsaveÚfill_cache_for_userrQ   )
r&   r7   ri   rJ   Úpriority_addressesrj   Ústashed_emailrQ   rd   rp   s
             r!   Úsetup_user_emailry   Û   s<  € õ %à×#Ñ#×*Ñ*°Ð*Ó5×<Ñ<Ô>Ð>Ð>ØÐä‹m€GØ×2Ñ2°7Ó;€MÙØ×!Ñ!ÙØ ×!4Ñ!4Ó!6ÀÈtôô	
ô
 �tÓ€EÙØ×!Ñ!Ù˜d¨%¯+©+«-ÀÐPUÔVô	
ô 1ØÐ# iÑ/óÑ€Iˆwð ò ˆØˆŒØ	�‰�ðð ×Ñ×,Ñ,¨T°9Ô=Ù�E’K˜R×&Ñ&Ó(¨G¯M©M×,?Ñ,?Ó,AÒAÜ�4˜Ÿ™Ô'Ø�	‰	ŒØ€Nr#   c                 óH   — t         j                  j                  | |||¬«      S )N)r/   rQ   )r   rU   Úsend_verification_email)r&   r7   r/   rQ   s       r!   Úsend_email_confirmationr|      s)   € Ü×#Ñ#×;Ñ;Ø�˜f¨Eð <ó ð r#   c                 óÆ   — ddl m} t        | «      }|rN|j                  j	                  | |¬«      j                  «       s"|j                  j                  | |dddœ¬«       yyy)zÕ
    Keep user.email in sync with user.emailaddress_set.

    Under some circumstances the user.email may not have ended up as
    an EmailAddress record, e.g. in the case of manually created admin
    users.
    rH   rI   )r7   rQ   F)rd   rK   )r7   rQ   ÚdefaultsN)r	   rJ   rF   rL   rO   rP   Úget_or_create)r7   rJ   rQ   s      r!   Úsync_user_email_addressesr€     sb   € õ %ä�tÓ€EÙ�\×)Ñ)×0Ñ0°dÀ%Ð0ÓH×OÑOÔQà×Ñ×*Ñ*Ø˜U¸ÈEÑ-Rð 	+õ 	
ð R€ur#   c            
      ó¨  — t         j                  rd| D �cg c]   }t        di t         j                  dz   |i¤Ž‘Œ" }}|d   }|dd  D ]  }||z  }Œ	 t	        «       j
                  j                  |«      }|S  t	        «       j
                  j                  di t         j                  dz   | D �cg c]  }|j                  «       ‘Œ c}i¤Ž}|S c c}w c c}w )NÚ__iexactr   rH   Ú__in© )r   r@   r
   r3   r   Ú_default_managerrO   rA   )ÚusernameÚuÚqlistÚqÚq2r0   s         r!   Úfilter_users_by_usernamer‹     sè   € Ü×,Ò,ð ö
àô ÑI”×7Ñ7¸*ÑDÀaÐHÓIð
ˆð 
ð �!‰HˆØ˜˜�)ò 	ˆBØ�B‘‰Að	äÓ×/Ñ/×6Ñ6°qÓ9ˆð €Jð 7ŒnÓ×/Ñ/×6Ñ6ñ 
ä×6Ñ6ØñØ.6Ö7¨˜1Ÿ7™7�9Ò7ðñ
ˆð €Jùò
ùò 8s   •%C
Â+CrQ   Ú	is_activeÚprefer_verifiedc                 ó  — ddl m} t        «       }| j                  «       } t	        |j
                  j                  | ¬«      j                  d«      «      }d}|rt	        t        d„ |«      «      }|r|}d}g }|D ]4  }	t        |	j                  | «      sŒ|j                  |	j                  «       Œ6 t        j                  r~|s|t        j                  | i}
 |j
                  j                  d	i |
¤Ž}|j                  d«      D ]:  }t        |t        j                  «      }t        || «      sŒ*|j                  |«       Œ< |�(t!        |«      D �cg c]  }|j"                  |k(  sŒ|‘Œ }}t	        t!        |«      «      S c c}w )
aE  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.
    rH   rI   )rQ   r7   Fc                 ó   — | j                   S ©N)rK   )Úes    r!   ú<lambda>z'filter_users_by_email.<locals>.<lambda>B  s
   € ¨q¯z©z€ r#   TiÐ  r„   )r	   rJ   r   rA   rg   rL   rO   Úselect_relatedr"   rQ   rf   r7   r   rE   Úiteratorr4   ÚsetrŒ   )rQ   rŒ   r�   rJ   ÚUserÚmailsrb   Úverified_mailsÚusersr‘   Úq_dictÚuser_qsr7   rF   r‡   s                  r!   Úfilter_users_by_emailrœ   ,  sS  € õ %äÓ€DØ�K‰K‹M€EÜ�×%Ñ%×,Ñ,°5Ð,Ó9×HÑHÈÓPÓQ€EØ€KÙÜœfÑ%9¸5ÓAÓBˆÙØ"ˆEØˆKØ€EØò !ˆÜ˜qŸw™w¨Õ.Ø�L‰L˜Ÿ™Õ ð!ô ×*Ò*±;Ü×5Ñ5°uÐ=ˆØ%�$—,‘,×%Ñ%Ñ/¨Ñ/ˆØ×$Ñ$ TÓ*ò 	#ˆDÜ  ¤|×'JÑ'JÓKˆJÜ" :¨uÕ5Ø—‘˜TÕ"ð	#ð ÐÜ ›JÖC�q¨!¯+©+¸Ó*B’ÐCˆÐCÜ”�E“
ÓÐùò Ds   ÅE<Å"E<c                 óR   — t        | |«      }|rt        j                  |||i«      }|S r�   )r)   r   Úadd_query_params)r&   r.   r'   Únext_urls       r!   Úpassthrough_next_redirect_urlr    V  s/   € Ü$ WÐ.AÓB€HÙÜ×&Ñ& sÐ-@À(Ð,KÓLˆØ€Jr#   c                 óš  — t        «       }t        |j                  j                  «      }t	        |t
        j                  «      r<t        | j                  t        «      r| j                  S | j                  j                  S t	        |t
        j                  «      rt        t        | j                  «      «      S t        | j                  «      S )z&
    This should return a string.
    )r   Útyper5   ÚpkÚ
issubclassr	   Ú	UUIDFieldÚ
isinstanceÚstrÚhexÚIntegerFieldr   Úint)r7   r–   Úpk_field_classs      r!   Úuser_pk_to_url_strr¬   ]  s„   € ô Ó€DÜ˜$Ÿ*™*Ÿ-™-Ó(€NÜ�.¤&×"2Ñ"2Ô3Ü�d—g‘gœsÔ#Ø—7‘7ˆNØ�w‰w�{‰{ÐÜ	�N¤F×$7Ñ$7Ô	8ÜœS §¡›\Ó*Ð*Üˆt�w‰w‹<Ðr#   c                 óÌ  — t        «       }t        |j                  j                  dd «      }|rLt        |dd «      r?|j                  j                  j                  j
                  j                  j                  }n|j                  j                  }t        |«      }t        |t        j                  «      rt        | «      }|j                  |«      }|S |j                  | «      }|S )NÚremote_fieldÚto)r   r4   r5   r£   r®   r¯   r¢   r¤   r	   r©   r   Ú	to_python)Úpk_strr–   r®   Úpk_fieldr«   r£   s         r!   Úurl_str_to_user_pkr³   l  s³   € ÜÓ€DÜ˜4Ÿ:™:Ÿ=™=¨.¸$Ó?€LÙœ ¨d°DÔ9Ø—:‘:—=‘=×-Ñ-×0Ñ0×6Ñ6×9Ñ9‰à—:‘:—=‘=ˆÜ˜(“^€NÜ�.¤&×"5Ñ"5Ô6Ü˜6Ó"ˆð ×Ñ Ó#ˆð €Ið ×Ñ Ó'ˆØ€Ir#   r�   )NNNFN)FN)NF):r   Úcollectionsr   Útypingr   r   Údjango.confr   Údjango.contrib.authr   r   Ú	django.dbr	   Údjango.db.modelsr
   Údjango.utils.encodingr   Údjango.utils.httpr   r   Úallauth.accountr   Úallauth.account.adapterr   Úallauth.account.internalr   Ú allauth.account.internal.userkitr   Úallauth.account.modelsr   Úallauth.core.internalr   Úallauth.utilsr   r   r   Úboolr"   r§   r)   r-   r;   r8   r=   rC   rF   rS   rY   r[   rr   ry   r|   r€   r‹   rœ   r    r¬   r³   r„   r#   r!   ú<module>rÄ      s;  ðÛ Ý #ß !å  ß CÝ Ý Ý +ß :å (Ý /Ý *Ý 7Ý (Ý )÷ñ ð 4ó ð "5ñ
àˆc�]ó
ð Ð+>Àuñàóð$ Ð ð= #ó =ð(˜#ó (ð ',ô Kð $)ô ñ¨Dó ð& ØØØØ
ó5ó(òF/òR"ñJÈó ò
ò$ð* KPñ'Øð'Ø# D™>ð'ØCGð'à	ó'òTð ó ór#   