Ë
    ûûàg;3  ã                   óŽ  — 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
 d dlmZmZ d dlmZ d dl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 ej:                  d„ «       Zej>                  j@                  d„ «       Z!ej>                  j@                  d„ «       Z"ej>                  jG                  dd ed«      fdg«      d„ «       Z$ e
ddejJ                  jL                  ejN                  jP                  hddddddd¬«       G d„ de«      «       Z)d„ Z*ej>                  jG                  d d ed!«      fd"g«      d#„ «       Z+y)$é    N)Úget_user_model)ÚAnonymousUser)Úmail)ÚTestCase)Úoverride_settings)ÚreverseÚreverse_lazy)Ú	urlencode)ÚassertRedirectsÚassertTemplateUsed)Úapp_settings)ÚResetPasswordFormÚdefault_token_generator)ÚEmailAddress)Úuser_pk_to_url_strc                  ó   — d„ } | S )Nc                 ób   — t        j                  | «      }t        | «      }t        d||dœ¬«      S )NÚaccount_reset_password_from_key©Úuidb36Úkey©Úkwargs)r   Ú
make_tokenr   r   )ÚuserÚtemp_keyÚuids      úg/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/allauth/account/tests/test_reset_password.pyÚfzpassword_reset_url.<locals>.f   s3   € Ü*×5Ñ5°dÓ;ˆÜ  Ó&ˆÜØ-ÀÈXÑ6Vô
ð 	
ó    © )r   s    r   Úpassword_reset_urlr"      s   € ò
ð €Hr    c                 ó  — d|_         | j                  t        d«      ddid¬«      }t        t        j
                  «      dk(  sJ ‚t        j
                  d   j                  dgk(  sJ ‚|j                  t        d«      d	fgk(  sJ ‚y )
NTÚaccount_reset_passwordÚemailúunknown@example.org)ÚdataÚfollowé   r   Úaccount_reset_password_doneé.  )ÚACCOUNT_PREVENT_ENUMERATIONÚpostr   Úlenr   ÚoutboxÚtoÚredirect_chain)ÚclientÚsettingsÚresps      r   Ú#test_reset_password_unknown_accountr5       s�   € à+/€HÔ(Ø�;‰;ÜÐ(Ó)ØÐ,Ð-Øð ó €Dô
 Œt�{‰{Ó˜qÒ Ð Ð Ü�;‰;�q‰>×ÑÐ!6Ð 7Ò7Ð7Ð7Ø×Ñ¤GÐ,IÓ$JÈCÐ#PÐ"QÒQÐQÑQr    c                 ó˜   — d|_         d|_        | j                  t        d«      ddi¬«       t	        t
        j                  «      dk(  sJ ‚y )NTFr$   r%   r&   ©r'   r   )r,   ÚACCOUNT_EMAIL_UNKNOWN_ACCOUNTSr-   r   r.   r   r/   )r2   r3   s     r   Ú,test_reset_password_unknown_account_disabledr9   -   sN   € à+/€HÔ(Ø.3€HÔ+Ø
‡K�KÜÐ(Ó)ØÐ,Ð-ð ô ô Œt�{‰{Ó˜qÒ Ð Ñ r    zquery,expected_locationÚ r*   )z
?next=/fooú/fooc                 ón   — | j                  t        d«      |z   d|j                  i¬«      }|d   |k(  sJ ‚y )Nr$   r%   r7   Úlocation)r-   r   r%   )r2   r   ÚqueryÚexpected_locationr4   s        r   Útest_reset_password_next_urlr@   8   sG   € ð
 �;‰;ÜÐ(Ó)¨EÑ1Ø�t—z‘zÐ"ð ó €Dð �
ÑÐ0Ò0Ð0Ñ0r    FÚhttpsz/accounts/profile/z/accounts/welcome/z-allauth.account.adapter.DefaultAccountAdapterT)r,   ÚACCOUNT_DEFAULT_HTTP_PROTOCOLÚACCOUNT_EMAIL_VERIFICATIONÚACCOUNT_LOGIN_METHODSÚACCOUNT_SIGNUP_FORM_CLASSÚACCOUNT_EMAIL_SUBJECT_PREFIXÚLOGIN_REDIRECT_URLÚACCOUNT_SIGNUP_REDIRECT_URLÚACCOUNT_ADAPTERÚACCOUNT_USERNAME_REQUIREDÚACCOUNT_EMAIL_NOTIFICATIONSc                   óô   — e Zd Zd„ Zd„ Zd„ Zd„ Z eej                  j                  h¬«      d„ «       Zd„ Zd„ Z eej                  j                  h¬«      d	„ «       Zd
„ Z ed¬«      d„ «       Zdd„Zdd„Zy)ÚResetPasswordTestsc                 ó²   — t        «       }|j                  j                  dddd¬«       ddi}t        |«      }| j	                  |j                  «       «       y )NÚmike123zmike@ixample.orgÚtest123F)Ú	is_activer%   )r   ÚobjectsÚcreate_userr   ÚassertFalseÚis_valid)ÚselfÚUserr'   Úforms       r   Ú&test_user_email_not_sent_inactive_userz9ResetPasswordTests.test_user_email_not_sent_inactive_userR   sV   € ÜÓˆØ�‰× Ñ ØÐ)¨9Àð 	!ô 	
ð Ð+Ð,ˆÜ  Ó&ˆØ×Ñ˜Ÿ™›Õ)r    c                 óp   — | j                   j                  t        d«      «      }| j                  |d«       y )Nr$   zaccount/password_reset.html)r2   Úgetr   r   )rV   r4   s     r   Útest_password_reset_getz*ResetPasswordTests.test_password_reset_get[   s+   € Ø�{‰{�‰œwÐ'?Ó@ÓAˆØ×Ñ Ð&CÕDr    c                 ó’  — | j                  d«      }d}| j                  |j                  |«      «       | j                  j	                  t        d«      ||dœ¬«      }|j                  «        | j                  |j                  |«      «       | j                  |j                  «       «       | j                  |j                  d«       y )NTz!*123i1uwn12W23Úaccount_set_password©Ú	password1Ú	password2r7   r+   )Ú_create_user_and_loginrT   Úcheck_passwordr2   r-   r   Úrefresh_from_dbÚ
assertTrueÚhas_usable_passwordÚassertEqualÚstatus_code)rV   r   Úpwdr4   s       r   Útest_set_password_not_allowedz0ResetPasswordTests.test_set_password_not_allowed_   s¬   € Ø×*Ñ*¨4Ó0ˆØˆØ×Ñ˜×,Ñ,¨SÓ1Ô2Ø�{‰{×ÑÜÐ*Ó+Ø"°Ñ5ð  ó 
ˆð 	×ÑÔØ×Ñ˜×,Ñ,¨SÓ1Ô2Ø�‰˜×0Ñ0Ó2Ô3Ø×Ñ˜×)Ñ)¨3Õ/r    c                 ó~   — | j                  «       }t        j                  d   j                  }|j                  |v sJ ‚y ©Nr   ©Ú_request_new_passwordr   r/   ÚbodyÚusername©rV   r   ro   s      r   Ú%test_password_forgotten_username_hintz8ResetPasswordTests.test_password_forgotten_username_hintl   s5   € Ø×)Ñ)Ó+ˆÜ�{‰{˜1‰~×"Ñ"ˆØ�}‰} Ñ$Ð$Ñ$r    )rD   c                 ó~   — | j                  «       }t        j                  d   j                  }|j                  |vsJ ‚y rl   rm   rq   s      r   Ú(test_password_forgotten_no_username_hintz;ResetPasswordTests.test_password_forgotten_no_username_hintq   s5   € à×)Ñ)Ó+ˆÜ�{‰{˜1‰~×"Ñ"ˆØ�}‰} DÑ(Ð(Ñ(r    c                 ó’  — t        «       j                  j                  ddd¬«      }|j                  d«       |j	                  «        | j
                  j                  t        d«      ddi¬«       | j                  t        t        j                  «      d	«       | j                  t        j                  d
   j                  dg«       |S )NÚjohnzjohn@example.orgT)rp   r%   rQ   Údoer$   r%   r7   r)   r   )r   rR   ÚcreateÚset_passwordÚsaver2   r-   r   rg   r.   r   r/   r0   )rV   r   s     r   rn   z(ResetPasswordTests._request_new_passwordw   s¬   € ÜÓ×'Ñ'×.Ñ.ØÐ#5Àð /ó 
ˆð 	×Ñ˜%Ô Ø�	‰	ŒØ�‰×ÑÜÐ,Ó-ØÐ-Ð.ð 	ô 	
ð 	×ÑœœTŸ[™[Ó)¨1Ô-Ø×ÑœŸ™ Q™×*Ñ*Ð-?Ð,@ÔAØˆr    c                 óø  — | j                  «        t        j                  d   j                  }| j	                  |j                  d«      d«       ||j                  d«      d j                  «       d   }| j                  j                  |«      }|j                  }| j                  «       j                  |«      }| j                  |dt        j                  z  «       | j                  |j                  d   «       y)a9  
        Test the password reset flow when the session is empty:
        requesting a new password, receiving the reset link via email,
        following the link, getting redirected to the
        new link (without the token)
        Copying the link and using it in a DIFFERENT client (Browser/Device).
        r   úhttps://ú/accounts/password/reset/Nú"account/password_reset_from_key.%sÚ
token_fail)rn   r   r/   ro   ÚassertGreaterÚfindÚsplitr2   r[   ÚurlÚclient_classr   r   ÚTEMPLATE_EXTENSIONre   Úcontext_data)rV   ro   rƒ   r4   Úreset_pass_urls        r   Ú+test_password_reset_flow_with_empty_sessionz>ResetPasswordTests.test_password_reset_flow_with_empty_session…   sÓ   € ð 	×"Ñ"Ô$Ü�{‰{˜1‰~×"Ñ"ˆØ×Ñ˜4Ÿ9™9 ZÓ0°!Ô4ð �4—9‘9Ð8Ó9Ð;Ð<×BÑBÓDÀQÑGˆØ�{‰{�‰˜sÓ#ˆàŸ™ˆð × Ñ Ó"×&Ñ& ~Ó6ˆð 	×ÑØØ0´<×3RÑ3RÑRô	
ð
 	�‰˜×)Ñ)¨,Ñ7Õ8r    c                 ó  — | j                  «        t        j                  d   j                  }| j	                  |j                  d«      d«       | j                  dd¬«      }t        j                  j                  ||j                  dd¬«       | j                  j                  t        d«      |j                  d	d
œ«      }| j                  ||j                  d   «       ||j                  d«      d j!                  «       d   }| j                  j#                  |«      }|j$                  }| j                  j#                  |«      }| j'                  |dt(        j*                  z  «       | j-                  d|j.                  v «       | j                  j                  |dddœd¬«      }| j1                  |t        d«      «       | j3                  ||j                  d   «       | j                  t5        «       |j                  d   «       y)zØ
        Tests the password reset flow: if User B requested a password
        reset earlier and now User A is logged in, User B now clicks on
        the link, ensure User A is logged out before continuing.
        r   r|   Újohn2zjohn2@example.com)rp   r%   T)r   r%   ÚprimaryÚverifiedÚaccount_loginrw   )ÚloginÚpasswordr   r}   Nr~   r   Ú
newpass123r_   )r(   Ú$account_reset_password_from_key_done)rn   r   r/   ro   r€   r�   Ú_create_userr   rR   rx   r%   r2   r-   r   rg   Úcontextr‚   r[   rƒ   r   r   r…   rT   r†   r   ÚassertNotEqualr   )rV   ro   Úuser2r4   rƒ   s        r   Ú4test_password_reset_flow_with_another_user_logged_inzGResetPasswordTests.test_password_reset_flow_with_another_user_logged_in£   sÄ  € ð 	×"Ñ"Ô$Ü�{‰{˜1‰~×"Ñ"ˆØ×Ñ˜4Ÿ9™9 ZÓ0°!Ô4à×!Ñ!¨7Ð:MÐ!ÓNˆÜ×Ñ×#Ñ#Ø˜eŸk™k°4À$ð 	$ô 	
ð �{‰{×ÑÜ�OÓ$àŸ™Ø!ñó
ˆð 	×Ñ˜ §¡¨VÑ 4Ô5ð �4—9‘9Ð8Ó9Ð;Ð<×BÑBÓDÀQÑGˆØ�{‰{�‰˜sÓ#ˆð �h‰hˆØ�{‰{�‰˜sÓ#ˆØ×ÑØÐ6¼×9XÑ9XÑXô	
ð 	×Ñ˜¨×):Ñ):Ð:Ô;ð �{‰{×ÑØ˜|¸,ÑGÐPTð  ó 
ˆð 	×Ñ˜T¤7Ð+QÓ#RÔSà×Ñ˜E 4§<¡<°Ñ#7Ô8Ø×Ñœ›¨$¯,©,°vÑ*>Õ?r    c                 óâ  — | j                  «       }t        j                  d   j                  }| j	                  |j                  d«      d«       t        j                  j                  |d¬«       ||j                  d«      d j                  «       d   }| j                  j                  |«      }| j                  |dt        j                  z  «       | j                  d|j                   v «       y)	zr
        Test that the password reset token is invalidated if
        the user email address was changed.
        r   r|   zother@email.org)r   r%   r}   Nr~   r   )rn   r   r/   ro   r€   r�   r   rR   rx   r‚   r2   r[   r   r   r…   re   r†   ©rV   r   ro   rƒ   r4   s        r   Ú+test_password_reset_flow_with_email_changedz>ResetPasswordTests.test_password_reset_flow_with_email_changedÑ   sÇ   € ð
 ×)Ñ)Ó+ˆÜ�{‰{˜1‰~×"Ñ"ˆØ×Ñ˜4Ÿ9™9 ZÓ0°!Ô4Ü×Ñ×#Ñ#¨Ð5FÐ#ÔGà�4—9‘9Ð8Ó9Ð;Ð<×BÑBÓDÀQÑGˆØ�{‰{�‰˜sÓ#ˆØ×ÑØØ0´<×3RÑ3RÑRô	
ð 	�‰˜¨×(9Ñ(9Ð9Õ:r    T)ÚACCOUNT_LOGIN_ON_PASSWORD_RESETc                 óŠ  — | j                  «       }t        j                  d   j                  }||j	                  d«      d  j                  «       d   }| j                  j                  |«      }| j                  j                  |j                  dddœ«      }| j                  |j                  «       | j                  |d«       y )Nr   r}   r�   r_   z/accounts/confirm-email/)rn   r   r/   ro   r�   r‚   r2   r[   r-   rƒ   re   Úis_authenticatedr   r˜   s        r   Ú3test_password_reset_ACCOUNT_LOGIN_ON_PASSWORD_RESETzFResetPasswordTests.test_password_reset_ACCOUNT_LOGIN_ON_PASSWORD_RESETã   s£   € à×)Ñ)Ó+ˆÜ�{‰{˜1‰~×"Ñ"ˆØ�4—9‘9Ð8Ó9Ð;Ð<×BÑBÓDÀQÑGˆØ�{‰{�‰˜sÓ#ˆð �{‰{×ÑØ�H‰H L¸|ÑLó
ˆð 	�‰˜×-Ñ-Ô.à×Ñ˜TÐ#=Õ>r    c                 ó¼   —  t        «       j                  j                  d|ddœ|¤Ž}|r|j                  |«       n|j	                  «        |j                  «        |S )NT)rp   rQ   r!   )r   rR   rx   ry   Úset_unusable_passwordrz   )rV   rp   r�   r   r   s        r   r’   zResetPasswordTests._create_userò   s\   € Ø.Œ~Ó×'Ñ'×.Ñ.ð 
Ø¨ñ
Ø17ñ
ˆñ Ø×Ñ˜hÕ'à×&Ñ&Ô(Ø�	‰	ŒØˆr    c                 ól   — |rdnd}| j                  |¬«      }| j                  j                  |«       |S )Nrw   F)r�   )r’   r2   Úforce_login)rV   Úusable_passwordr�   r   s       r   rb   z)ResetPasswordTests._create_user_and_loginý   s5   € Ù+‘5°ˆØ× Ñ ¨(Ð Ó3ˆØ�‰×Ñ Ô%Øˆr    N)rv   rw   )T)Ú__name__Ú
__module__Ú__qualname__rY   r\   rj   rr   r   r   ÚAuthenticationMethodÚEMAILrt   rn   rˆ   r–   r™   r�   r’   rb   r!   r    r   rM   rM   D   sž   „ ò*òEò0ò%ñ
 ¨l×.OÑ.O×.UÑ.UÐ-VÔWñ)ó Xð)ò
ò9ñ< ¨l×.OÑ.O×.UÑ.UÐ-VÔWñ+@ó Xð+@òZ;ñ$ °tÔ<ñ?ó =ð?ó	ôr    rM   c                 óð  — d|_         | j                  t        d«      d|j                  i¬«       t	        t
        j                  «      dk(  sJ ‚|d   j                  |j                  gk(  sJ ‚|d   j                  }|j                  d«      dkD  sJ ‚||j                  d«      d	 j                  «       d   }| j                  |«      }|j                  }| j                  |«      }t        |d
t        j                  z  «       d|j                   vsJ ‚| j                  |dddœ«      }t#        |t        d«      «       d|d   j                  v sJ ‚t%        «       j&                  j                  |j(                  ¬«      }|j+                  d«      sJ ‚| j                  |dddœ«      }t        |d
t        j                  z  «       |j                   d   sJ ‚| j                  |«      }t        |d
t        j                  z  «       |j                   d   sJ ‚| j                  |dddœd¬«      }|j,                  dk(  sJ ‚t/        j0                  |j2                  j5                  d«      «      }d|d   d   d   v sJ ‚y	)z¡
    Tests the password reset flow: requesting a new password,
    receiving the reset link via email and finally resetting the
    password to a new value.
    Tr$   r%   r7   r)   r   zhttp://r}   Nr~   r   r�   r_   r‘   zYour password has been resetéÿÿÿÿ)ÚpkÚXMLHttpRequest)ÚHTTP_X_REQUESTED_WITHi�  Úutf8ÚinvalidrX   Úerrors)rK   r-   r   r%   r.   r   r/   r0   ro   r�   r‚   r[   rƒ   r   r   r…   r†   r   r   rR   rª   rc   rh   ÚjsonÚloadsÚcontentÚdecode)	r2   r   Ú
mailoutboxr3   ro   rƒ   r4   Úresponser'   s	            r   Útest_password_reset_flowr¶     sy  € ð ,0€HÔ(ð ‡K�KÜÐ(Ó)Ø�t—z‘zÐ"ð ô ô Œt�{‰{Ó˜qÒ Ð Ð Ø�a‰=×Ñ §
¡
˜|Ò+Ð+Ð+Ø�a‰=×Ñ€DØ�9‰9�YÓ !Ò#Ð#Ð#ð ˆt�y‰yÐ4Ó5Ð7Ð
8×
>Ñ
>Ó
@ÀÑ
C€CØ�:‰:�c‹?€Dð �(‰(€CØ�:‰:�c‹?€DÜØØ,¬|×/NÑ/NÑNôð ˜t×0Ñ0Ñ0Ð0Ð0ð �;‰;�s¨,À\ÑRÓS€DÜ�Dœ'Ð"HÓIÔJØ)¨Z¸©^×-@Ñ-@Ñ@Ð@Ð@ô Ó×#Ñ#×'Ñ'¨4¯7©7Ð'Ó3€DØ×Ñ˜|Ô,Ð,Ð,ð �;‰;�s¨,À\ÑRÓS€DÜØØ,¬|×/NÑ/NÑNôð ×Ñ˜\Ò*Ð*Ð*ð �z‰z˜#‹€HÜØØ,¬|×/NÑ/NÑNôð × Ñ  Ò.Ð.Ð.ð
 �{‰{ØØ"°Ñ>Ø.ð ó €Hð
 ×Ñ 3Ò&Ð&Ð&Ü�:‰:�h×&Ñ&×-Ñ-¨fÓ5Ó6€DØ˜˜V™ XÑ.¨qÑ1Ñ1Ð1Ñ1r    znext_url,expected_locationr‘   )r;   r;   c                 óT  —  || «      }d}|rdt        d|i«      z   }|j                  ||z   «      }|j                  dk(  sJ ‚|d   t        dt	        | «      ddœ¬	«      |z   k(  sJ ‚ |«       }	|	|	d
œ}
|r||
d<   |j                  |d   |
«      }|j                  dk(  sJ ‚|d   |k(  sJ ‚y )Nr:   ú?Únextr+   r=   r   zset-passwordr   r   r_   )r
   r[   rh   r   r   r-   )r   r2   Úpassword_factoryÚnext_urlr?   r"   rƒ   r>   r4   r�   r'   s              r   Ú%test_reset_password_from_key_next_urlr¼   J  sæ   € ñ ˜TÓ
"€CØ€EÙØ”i ¨Ð 2Ó3Ñ3ˆØ�:‰:�c˜E‘kÓ"€DØ×Ñ˜sÒ"Ð"Ð"àˆZÑÜØ-Ü0°Ó6¸~ÑNô
ð ñ	ò	ðð	ñ  Ó!€HØ!°Ñ9€DÙØˆˆV‰Ø�;‰;�t˜JÑ'¨Ó.€DØ×Ñ˜sÒ"Ð"Ð"Ø�
ÑÐ0Ò0Ð0Ñ0r    ),r°   Údjango.contrib.authr   Údjango.contrib.auth.modelsr   Údjango.corer   Údjango.testr   Údjango.test.utilsr   Údjango.urlsr   r	   Údjango.utils.httpr
   ÚpytestÚpytest_django.assertsr   r   Úallauth.accountr   Úallauth.account.formsr   r   Úallauth.account.modelsr   Úallauth.account.utilsr   Úfixturer"   ÚmarkÚ	django_dbr5   r9   Úparametrizer@   ÚEmailVerificationMethodÚ	MANDATORYr¦   ÚUSERNAMErM   r¶   r¼   r!   r    r   ú<module>rÑ      s`  ðÛ å .Ý 4Ý Ý  Ý /ß -Ý 'ã ß Eå (ß LÝ /Ý 4ð ‡�ñó ðð ‡�×Ññ	Ró ð	Rð ‡�×Ññ!ó ð!ð ‡�×ÑØØ‰,Ð4Ó
5Ð6Ð8NÐOóñ1ó	ð1ñ Ø %Ø")Ø+×CÑC×MÑMØ'×<Ñ<×EÑEÐFØ"Ø!%Ø+Ø 4ØCØ"Ø $ôôp˜ó póðpòfC2ðL ‡�×ÑØ Ø
‰LÐ?Ó@ÐAÐCSÐTóñ1ó	ñ1r    