o
    "4gj%                     @   s  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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d Zdd Z dd  Z!d!d" Z"d#d$ Z#d%d& Z$d'd( Z%d)d* Z&ejd+d,d-d.d/d0d1igd2d3 Z'ejd+d,d-d.d4id-d.d4d5d6id7gd8d9 Z(ejd:d;d<gid<d=d>d<fi d?d=id=fgd@dA Z)dS )B    )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                 C   s  |j d d d d }t|d }||
 ||d< |dtj}|tjk}|r3| d}| d}n| d	}d }d }|sF|	|fi |}d
||di}|d urU||d< |jt	dddid|d}t	dddid}|j
dksqJ |d |ksyJ ||}|r|ddrddd |jD v sJ d S |d |ksJ tjjddd}|jd ddgksJ tjj|jd }|j|r|jnd!ksJ d S )"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                 s       | ]}|j V  qd S Nname.0t r1   s/var/www/html/authentication-server/venv/lib/python3.10/site-packages/allauth/socialaccount/providers/saml/tests.py	<genexpr>U   s    
ztest_acs.<locals>.<genexpr>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accountrF   r1   r1   r2   test_acs   sF   &




rX   c                 C   sZ   ddi}| j tdddid|d}|jdksJ | |d	 }d
dd |jD v s+J d S )Nr   zbad-responser   r    r!   r"   r$   r'   r(   r)   c                 s   r*   r+   r,   r.   r1   r1   r2   r3   i       z!test_acs_error.<locals>.<genexpr>)r@   r   rA   rB   rC   )r   rI   rJ   r%   rU   r1   r1   r2   test_acs_errorb   s   rZ   c                 C   sN   |  tdddid}|jdksJ |  |d }ddd	 |jD v s%J d
S )zbWHile ACS expects POST, it always redirects and handles the request in
    the FinishACSView.
    r   r    r!   r"   r'   r(   r)   c                 s   r*   r+   r,   r.   r1   r1   r2   r3   s   rY   ztest_acs_get.<locals>.<genexpr>N)rB   r   rA   rC   r   rI   rJ   rU   r1   r1   r2   test_acs_getl   s   r\   c                 C   s(   |  tdddid}|jdksJ dS )zSLS expects POSTsaml_slsr    r!   r"   i  N)rB   r   rA   r[   r1   r1   r2   test_sls_getv   s   r^   c                 C   s2   |  tdddid}|jdksJ t|d d S )N
saml_loginr    r!   r"      zsocialaccount/login.html)rB   r   rA   r
   r[   r1   r1   r2   test_login_on_get|   s   ra   c                 C   s   |  tdddidd }|jdksJ |d }|dsJ tt|j}|d	d u s/J t| j	t
j  d
 }|dsBJ | j	t
j | d
 }|dd ddksVJ d S )Nr_   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   )r@   r   rA   
startswithr   r   queryrB   listsessionr   STATES_SESSION_KEYkeys)r   rI   rJ   rU   r(   
resp_queryrT   stater1   r1   r2   
test_login   s   rk   c                 C   s8   |  tdddid}|jdksJ |jdsJ d S )Nsaml_metadatar    r!   r"   r`   sY   <?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata)rB   r   rA   contentrc   r[   r1   r1   r2   test_metadata   s
   rn   c                 C   s   t d"}| tdddidd td|i }|jdksJ W d    n1 s)w   Y  |jd	ks5J |d
 ds>J d S )Nz4allauth.account.adapter.DefaultAccountAdapter.logoutr]   r    r!   r"   ?SAMLRequest   r'   r(   z4https://dev-123.us.auth0.com/samlp/456?SAMLResponse=)r   rB   r   r	   
call_countrA   rc   )r   rI   rJ   user_factorysls_saml_requestlogout_mockrU   r1   r1   r2   test_sls   s   

rv   provider_configidpdummyhttps://idp.org/sso/https://idp.saml.org/slo/cert)	entity_idsso_urlslo_urlx509certc                 C   sr   |  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s7J d S )N/r!   rx   entityIdry   r   r|   singleSignOnServiceurlrz   singleLogoutServicer{   )rB   r   )rfrw   rG   configr1   r1   r2   +test_build_saml_config_without_metadata_url   s   
r   )r}   metadata_urlr}   zdummy-sp-entity-id)rx   spc                 C   s  |  d}td}ddddiddidd	i|_t||d
}W d    n1 s(w   Y  |d d dks7J |d d dksAJ |d d ddiksMJ |d d ddiksYJ |tdd
gd}| di  d}|rz|d d |ksxJ d S |d d |ksJ d S )Nr   zPonelogin.saml2.idp_metadata_parser.OneLogin_Saml2_IdPMetadataParser.parse_remoterx   ry   r   rz   r{   r|   )r   r   r   r   r!   r   r   r   r   rl   )argsr   r}   )rB   r   return_valuer   build_absolute_urir   )r   rw   rG   
parse_mockr   r   sp_entity_idr1   r1   r2   test_build_saml_config   s.   
r   zdata, result, uidz,urn:oasis:names:tc:SAML:attribute:subject-id123nameid@saml.org)r7   rF   rF   c                 C   sl   dddddgii|_ t jd dd}t }||j_d|j_d|j_|||ks+J |	||ks4J d S )	Nr   r   r!   r4   )	client_idprovider_id)rG   r6   r   z6urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress)
r9   r   get_providerr   get_attributesr   
get_nameidget_nameid_format_extractextract_uid)rI   r%   resultr7   r   r6   onelogin_datar1   r1   r2   test_extract_attributes   s    
r   )*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_URLrX   rZ   r\   r^   ra   rk   rn   rv   r   r   r   r1   r1   r1   r2   <module>   s    
7


	
