Ë
    ûûàgj%  ã                   óÎ  — d dl mZ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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 ej8                  j;                  ddi i dej<                  fdi ddiddfdi ddid e
d«      fdi dddœddfdddii ddfdddii dej<                  fdi i ddfg«      d„ «       Zd„ Z d„ Z!d„ Z"d„ Z#d „ Z$d!„ Z%d"„ Z&ej8                  j;                  d#d$d%d&d'd(d)œig«      d*„ «       Z'ej8                  j;                  d#d$d%d&d+œid%d&d+œd,d-id.œg«      d/„ «       Z(ej8                  j;                  d0d1d2gid2d3d4œd2fi d5d3id3fg«      d6„ «       Z)y)7é    )ÚMockÚpatch)Úparse_qsÚurlparse)Úsettings)ÚreverseÚreverse_lazy)Ú	urlencodeN)ÚassertTemplateUsed)ÚEmailAddress)Úget_adapter)Ústatekit)ÚSocialAccount)ÚAuthProcess)Úbuild_saml_configzAidp_initiated,adv_settings,state_kwargs,relay_state, expected_urlFz	/not/hereÚnextz/hereÚprocessÚconnectÚsocialaccount_connections)r   r   TÚreject_idp_initiated_ssoz/set-by-idpz	not-a-urlc                 ó²  — |j                   d   d   d   d   }t        |d   «      }|j                  |
«       ||d<   |j                  dt        j
                  «      }|t        j                  k(  }|r#| j                  d«      }| j                  d«      }n| j                  d	«      }d }d }|s	 |	|fi |¤Ž}d
 ||¬«      i}|�||d<   |j                  t        dddi¬«      |¬«      }t        dddi¬«      }|j                  dk(  sJ ‚|d   |k(  sJ ‚|j                  |«      }|r*|j                  dd«      rdd„ |j                  D «       v sJ ‚y |d   |k(  sJ ‚t        j                  j                  dd¬«      }|j                  d   ddgk(  sJ ‚t         j                  j                  |j"                  ¬«      }|j$                  |r|j$                  nd k(  sJ ‚y )!NÚsamlÚAPPSr   r   Úadvancedr   Úauth_clientÚuserÚclientÚSAMLResponse)Úin_response_toÚ
RelayStateÚsaml_acsÚorganization_slugÚorg©Úkwargs©ÚdataÚsaml_finish_acsé.  Úlocationr   Tú'socialaccount/authentication_error.htmlc              3   ó4   K  — | ]  }|j                   –— Œ y ­w©N©Úname©Ú.0Úts     úh/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/saml/tests.pyú	<genexpr>ztest_acs.<locals>.<genexpr>U   s   è ø€ ò =
ØˆA�F�Fñ=
ùó   ‚úurn:dev-123.us.auth0.comÚdummysamluid)ÚproviderÚuidÚRolezview-profilezmanage-account-links)r   zjohn.doe@email.org)ÚSOCIALACCOUNT_PROVIDERSÚdictÚupdateÚ
setdefaultr   ÚLOGINÚCONNECTÚgetfixturevalueÚpostr   Ústatus_codeÚgetÚ	templatesr   ÚobjectsÚ
extra_datar   r   Úemail)ÚrequestÚidp_initiatedÚdbÚsaml_settingsÚacs_saml_response_factoryÚmocked_signature_validationÚexpected_urlÚrelay_stateÚstate_kwargsÚsociallogin_setup_stateÚadv_settingsr   Úprovider_settingsr   r   Ú
is_connectr   r   Ústate_idr'   ÚrespÚ
finish_urlÚaccountrH   s                           r3   Útest_acsrZ      s  € ðL !×8Ñ8¸Ñ@ÀÑHÈÑKÈJÑWÐÜÐ% jÑ1Ó2€HØ‡O�O�LÔ!Ø$,Ð�jÑ!Ø×%Ñ% i´×1BÑ1BÓC€GØœK×/Ñ/Ñ/€JÙØ×(Ñ(¨Ó7ˆØ×&Ñ& vÓ.‰à×(Ñ(¨Ó2ˆØˆà€HÙÙ*¨6ÑB°\ÑBˆàÑ5ÀXÔNÐO€DØÐØ(ˆˆ\ÑØ�;‰;Ü�
Ð$7¸Ð#?Ô@Àtð ó €Dô Ð*Ð4GÈÐ3OÔP€JØ×Ñ˜sÒ"Ð"Ð"Ø�
Ñ˜zÒ)Ð)Ð)Ø�:‰:�jÓ!€DÙ˜Ÿ™Ð&@À$ÔGØ8ñ =
Ø ŸN™Nô=
ñ 
ð 	
ñ 
ð �JÑ <Ò/Ð/Ð/Ü×'Ñ'×+Ñ+Ø/°^ð ,ó 
ˆð ×!Ñ! &Ñ)¨nÐ>TÐ-UÒUÐUÐUÜ×$Ñ$×(Ñ(¨g¯l©lÐ(Ó;ˆØ�{‰{©Z˜tŸzšzÐ=QÒRÐRÑRó    c                 óÄ   — ddi}| j                  t        dddi¬«      |¬«      }|j                  dk(  sJ ‚| j                  |d	   «      }d
d„ |j                  D «       v sJ ‚y )Nr   zbad-responser!   r"   r#   r$   r&   r)   r*   r+   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr-   r.   r0   s     r3   r4   z!test_acs_error.<locals>.<genexpr>i   ó   è ø€ Ò8XÀA¸¿½Ñ8Xùr5   )rB   r   rC   rD   rE   )r   rK   rL   r'   rW   s        r3   Útest_acs_errorr_   b   sr   € Ø˜NÐ+€DØ�;‰;Ü�
Ð$7¸Ð#?Ô@Àtð ó €Dð ×Ñ˜sÒ"Ð"Ð"Ø�:‰:�d˜:Ñ&Ó'€DØ4Ñ8XÈÏÉÔ8XÑXÐXÑXr[   c                 ó¸   — | j                  t        dddi¬«      «      }|j                  dk(  sJ ‚| j                  |d   «      }dd„ |j                  D «       v sJ ‚y	)
zbWHile ACS expects POST, it always redirects and handles the request in
    the FinishACSView.
    r!   r"   r#   r$   r)   r*   r+   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr-   r.   r0   s     r3   r4   ztest_acs_get.<locals>.<genexpr>s   r^   r5   N)rD   r   rC   rE   ©r   rK   rL   rW   s       r3   Útest_acs_getrc   l   s^   € ð �:‰:”g˜jÐ2EÀuÐ1MÔNÓO€DØ×Ñ˜sÒ"Ð"Ð"Ø�:‰:�d˜:Ñ&Ó'€DØ4Ñ8XÈÏÉÔ8XÑXÐXÑXr[   c                 ób   — | j                  t        dddi¬«      «      }|j                  dk(  sJ ‚y)zSLS expects POSTÚsaml_slsr"   r#   r$   i�  N)rD   r   rC   rb   s       r3   Útest_sls_getrf   v   s1   € à�:‰:”g˜jÐ2EÀuÐ1MÔNÓO€DØ×Ñ˜sÒ"Ð"Ñ"r[   c                 óz   — | j                  t        dddi¬«      «      }|j                  dk(  sJ ‚t        |d«       y )NÚ
saml_loginr"   r#   r$   éÈ   zsocialaccount/login.html)rD   r   rC   r   rb   s       r3   Útest_login_on_getrj   |   s<   € Ø�:‰:”g˜lÐ4GÈÐ3OÔPÓQ€DØ×Ñ˜sÒ"Ð"Ð"Ü�tÐ7Õ8r[   c                 óê  — | j                  t        dddi¬«      dz   «      }|j                  dk(  sJ ‚|d   }|j                  d«      sJ ‚t	        t        |«      j                  «      }|j                  d	«      �J ‚t        | j                  t        j                     j                  «       «      d
   }|j                  d«      sJ ‚| j                  t        j                     |   d
   }|dd ddœk(  sJ ‚y )Nrh   r"   r#   r$   z?process=connect&next=/foor)   r*   z3https://dev-123.us.auth0.com/samlp/456?SAMLRequest=r    r   Ú	ONELOGIN_r   z/foo)r   r'   r   )rB   r   rC   Ú
startswithr   r   ÚqueryrD   ÚlistÚsessionr   ÚSTATES_SESSION_KEYÚkeys)r   rK   rL   rW   r*   Ú
resp_queryrV   Ústates           r3   Ú
test_loginru   ‚   sõ   € Ø�;‰;Ü�Ð&9¸5Ð%AÔBØ
&ñ	'ó€Dð ×Ñ˜sÒ"Ð"Ð"Ø�JÑ€HØ×ÑÐTÔUÐUÐUÜœ( 8Ó,×2Ñ2Ó3€Jà�>‰>˜,Ó'Ð/Ð/Ð/ä�F—N‘N¤8×#>Ñ#>Ñ?×DÑDÓFÓGÈÑJ€HØ×Ñ˜{Ô+Ð+Ð+Ø�N‰Nœ8×6Ñ6Ñ7¸ÑAÀ!ÑD€EØ 	°4ÀÑHÒHÐHÑHr[   c                 óœ   — | j                  t        dddi¬«      «      }|j                  dk(  sJ ‚|j                  j	                  d«      sJ ‚y )NÚsaml_metadatar"   r#   r$   ri   sY   <?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata)rD   r   rC   Úcontentrm   rb   s       r3   Útest_metadatary   ”   sR   € ð
 �:‰:”g˜oÐ7JÈEÐ6RÔSÓT€DØ×Ñ˜sÒ"Ð"Ð"Ø�<‰<×"Ñ"Øeôð ñ r[   c                 ó  — t        d«      5 }| j                  t        dddi¬«      dz   t        d|i«      z   «      }|j                  dk(  sJ ‚	 d d d «       j
                  d	k(  sJ ‚|d
   j                  d«      sJ ‚y # 1 sw Y   Œ1xY w)Nz4allauth.account.adapter.DefaultAccountAdapter.logoutre   r"   r#   r$   ú?ÚSAMLRequesté   r)   r*   z4https://dev-123.us.auth0.com/samlp/456?SAMLResponse=)r   rD   r   r
   Ú
call_countrC   rm   )r   rK   rL   Úuser_factoryÚsls_saml_requestÚlogout_mockrW   s          r3   Útest_slsr‚       s§   € Ü	ÐEÓ	Fð +È+Ø�‰Ü�JÐ(;¸UÐ'CÔDØñä˜Ð(8Ð9Ó:ñ;ó
ˆð
 ×%Ñ%¨Ò*Ð*Ñ*÷+ð ×Ñ˜sÒ"Ð"Ð"Ø�
Ñ×&Ñ&Ø>ôð ñ ÷+ð +ús   ŒAA>Á>BÚprovider_configÚidpÚdummyúhttps://idp.org/sso/úhttps://idp.saml.org/slo/Úcert)Ú	entity_idÚsso_urlÚslo_urlÚx509certc                 ó°   — | j                  d«      }t        ||d«      }|d   d   dk(  sJ ‚|d   d   dk(  sJ ‚|d   d   d	d
ik(  sJ ‚|d   d   d	dik(  sJ ‚y )Nú/r#   r„   ÚentityIdr…   rŒ   rˆ   ÚsingleSignOnServiceÚurlr†   ÚsingleLogoutServicer‡   )rD   r   )Úrfrƒ   rI   Úconfigs       r3   Ú+test_build_saml_config_without_metadata_urlr•   ®   s‰   € ð �f‰f�S‹k€GÜ˜w¨¸Ó?€FØ�%‰=˜Ñ$¨Ò/Ð/Ð/Ø�%‰=˜Ñ$¨Ò.Ð.Ð.Ø�%‰=Ð.Ñ/°EÐ;QÐ3RÒRÐRÐRØ�%‰=Ð.Ñ/°EÐ;VÐ3WÒWÐWÑWr[   )r‰   Úmetadata_urlr‰   zdummy-sp-entity-id)r„   Úspc                 óÊ  — | j                  d«      }t        d«      5 }ddddiddidd	œi|_        t        ||d
«      }d d d «       d   d   dk(  sJ ‚|d   d   dk(  sJ ‚|d   d   ddik(  sJ ‚|d   d   ddik(  sJ ‚|j	                  t        dd
g¬«      «      }|j                  di «      j                  d«      }|r|d   d   |k(  sJ ‚y |d   d   |k(  sJ ‚y # 1 sw Y   Œ�xY w)NrŽ   zPonelogin.saml2.idp_metadata_parser.OneLogin_Saml2_IdPMetadataParser.parse_remoter„   r…   r‘   r†   r‡   rˆ   )r�   r�   r’   rŒ   r#   r�   rŒ   r�   r’   rw   )Úargsr—   r‰   )rD   r   Úreturn_valuer   Úbuild_absolute_urir   )r“   rƒ   rI   Ú
parse_mockr”   r–   Úsp_entity_ids          r3   Útest_build_saml_configrž   Ä   sE  € ð& �f‰f�S‹k€GÜ	ØZó
ð Dà	àØ#Ø(-Ð/EÐ'FØ(-Ð/JÐ'KØ"ñ	ð#
ˆ
Ôô # 7¨O¸UÓCˆ÷Dð �%‰=˜Ñ$¨Ò/Ð/Ð/Ø�%‰=˜Ñ$¨Ò.Ð.Ð.Ø�%‰=Ð.Ñ/°EÐ;QÐ3RÒRÐRÐRØ�%‰=Ð.Ñ/°EÐ;VÐ3WÒWÐWÐWØ×-Ñ-¬g°oÈUÈGÔ.TÓU€LØ"×&Ñ& t¨RÓ0×4Ñ4°[ÓA€LÙØ�d‰|˜JÑ'¨<Ò7Ð7Ñ7à�d‰|˜JÑ'¨<Ò7Ð7Ñ7÷-Dð Dús   � CÃC"zdata, result, uidz,urn:oasis:names:tc:SAML:attribute:subject-idÚ123únameid@saml.org)r9   rH   rH   c                 ó*  — dddddœgii|_         t        «       j                  d d¬«      }t        «       }||j                  _        d|j                  _        d|j                  _        |j                  |«      |k(  sJ ‚|j                  |«      |k(  sJ ‚y )	Nr   r   r#   r6   )Ú	client_idÚprovider_id)rI   r8   r    z6urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress)
r;   r   Úget_providerr   Úget_attributesrš   Ú
get_nameidÚget_nameid_formatÚ_extractÚextract_uid)rK   r'   Úresultr9   r   r8   Úonelogin_datas          r3   Útest_extract_attributesr¬   ñ   sª   € ð 	Øà!&Ø#=ñðð
ð	(€HÔ$ô ‹}×)Ñ)°$ÀÐ)ÓH€HÜ“F€MØ04€M× Ñ Ô-Ø,=€M×ÑÔ)à@ð ×#Ñ#Ô0ð ×Ñ˜]Ó+¨vÒ5Ð5Ð5Ø×Ñ Ó.°#Ò5Ð5Ñ5r[   )*Úunittest.mockr   r   Úurllib.parser   r   Údjango.confr   Údjango.urlsr   r	   Údjango.utils.httpr
   ÚpytestÚpytest_django.assertsr   Úallauth.account.modelsr   Úallauth.socialaccount.adapterr   Úallauth.socialaccount.internalr   Úallauth.socialaccount.modelsr   Ú.allauth.socialaccount.providers.base.constantsr   Ú*allauth.socialaccount.providers.saml.utilsr   ÚmarkÚparametrizeÚLOGIN_REDIRECT_URLrZ   r_   rc   rf   rj   ru   ry   r‚   r•   rž   r¬   © r[   r3   ú<module>r¾      s  ðß %ß +å  ß -Ý 'ã Ý 4å /Ý 5Ý 3Ý 6Ý FÝ Hð ‡�×ÑØGà	��B˜ X×%@Ñ%@ÐAØ	��V˜WÐ% {°GÐ<àØØ˜	Ð"ØÙÐ4Ó5ð	
ð 
� 	°7Ñ;¸[È'ÐRØ	Ð*¨EÐ2°B¸À}ÐUàØ'¨Ð/ØØØ×'Ñ'ð	
ð 
ˆr�2�} mÐ4ð'óñ04Só1ð04SònYòYò#ò9òIò$	òð ‡�×ÑØð Ø$Ø1Ø6Ø"ñ	ð	
ð	óñXóðXð ‡�×ÑØð Ø$Ø 6ñð	
ð %Ø 6ñð Ð 4Ð5ñ	
ðóñ$8ó%ð$8ð6 ‡�×ÑØð <¸e¸WÐEØÐ$5Ñ6Øð	
ð
 
ˆgÐ(Ð)Ð+<Ð=ðó
ñ6ó
ñ6r[   