o
    Lf                  	   @   sb  d dl mZmZ d dlmZmZ d dl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 e
jdg ddd Zdd Zdd Zdd Zdd Ze
jdg ddd Zdd Zdd Ze
jdd d!d"d#d$d%igd&d' Ze
jdd d!d"d(igd)d* Z e
jd+d,d-gid-d.d/d-fi d0d.id.fgd1d2 Z!dS )3    )Mockpatch)parse_qsurlparse)reverse)	urlencodeN)assertTemplateUsed)EmailAddress)get_adapter)SocialAccount)build_saml_configz$is_connect,relay_state, expected_url))FNz/accounts/profile/)F/foor   )Tprocess=connectz/social/connections/)Tzprocess=connect&next=/connz/connc                 C   s   |r|  d}|  d}	n|  d}d }	d|i}
|d ur ||
d< |jtdddid	|
d
}tdddid	}|jdks<J |d |ksDJ ||}|d |ksQJ tjjddd}|jd ddgksdJ tjj|j	d}|j
|rs|	j
ndksxJ d S )Nauth_clientuserclientSAMLResponse
RelayStatesaml_acsorganization_slugorgkwargsdatasaml_finish_acs.  locationurn:dev-123.us.auth0.comdummysamluid)provideruidRolezview-profilezmanage-account-links)r   zjohn.doe@email.org)getfixturevaluepostr   status_codegetr   objects
extra_datar	   r   email)request
is_connectdbsaml_settingsacs_saml_responsemocked_signature_validationexpected_urlrelay_stater   r   r   resp
finish_urlaccountr)    r5   k/var/www/html/humari/django-venv/lib/python3.10/site-packages/allauth/socialaccount/providers/saml/tests.pytest_acs   s,   


r7   c                 C   sL   ddi}| j tdddid|d}|jdksJ d	d
d |jD v s$J d S )Nr   zbad-responser   r   r   r   r      'socialaccount/authentication_error.htmlc                 s       | ]}|j V  qd S Nname.0tr5   r5   r6   	<genexpr>C       z!test_acs_error.<locals>.<genexpr>)r$   r   r%   	templates)r   r,   r-   r   r2   r5   r5   r6   test_acs_error=   s   rD   c                 C   s@   |  tdddid}|jdksJ ddd |jD v sJ d	S )
zACS expects POSTr   r   r   r   r8   r9   c                 s   r:   r;   r<   r>   r5   r5   r6   rA   J   rB   ztest_acs_get.<locals>.<genexpr>N)r&   r   r%   rC   r   r,   r-   r2   r5   r5   r6   test_acs_getF   s   rF   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)r&   r   r%   rE   r5   r5   r6   test_sls_getM   s   rH   c                 C   s2   |  tdddid}|jdksJ t|d d S )N
saml_loginr   r   r   r8   zsocialaccount/login.html)r&   r   r%   r   rE   r5   r5   r6   test_login_on_getS   s   rJ   zquery,expected_relay_state)) N)z?process=connectr   )z?process=connect&next=/foozprocess=connect&next=%2Ffoo)z
?next=/barznext=%2Fbarc                 C   s~   |  tdddid| }|jdksJ |d }|dsJ tt|j}|d u r2d|vs0J d S |dd	 |ks=J d S )
NrI   r   r   r   r   r   z3https://dev-123.us.auth0.com/samlp/456?SAMLRequest=r   r   )r$   r   r%   
startswithr   r   queryr&   )r   r,   r-   rM   expected_relay_stater2   r   
resp_queryr5   r5   r6   
test_loginY   s   
rP   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   r8   sY   <?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata)r&   r   r%   contentrL   rE   r5   r5   r6   test_metadatap   s
   rS   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.logoutrG   r   r   r   ?SAMLRequest   r   r   z4https://dev-123.us.auth0.com/samlp/456?SAMLResponse=)r   r&   r   r   
call_countr%   rL   )r   r,   r-   user_factorysls_saml_requestlogout_mockr2   r5   r5   r6   test_sls|   s   

r[   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   r]   entityIdr^   re   ra   singleSignOnServiceurlr_   singleLogoutServicer`   )r&   r   )rfr\   r*   configr5   r5   r6   +test_build_saml_config_without_metadata_url   s   
rm   )rb   metadata_urlc                 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 d S )Nrf   zPonelogin.saml2.idp_metadata_parser.OneLogin_Saml2_IdPMetadataParser.parse_remoter]   r^   ri   r_   r`   ra   )rg   rh   rj   re   r   rg   re   rh   rj   )r&   r   return_valuer   )rk   r\   r*   
parse_mockrl   r5   r5   r6   test_build_saml_config   s$   
rq   zdata, result, uidz,urn:oasis:names:tc:SAML:attribute:subject-id123nameid@saml.org)r!   r)   r)   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 )	NsamlAPPSr   r   )	client_idprovider_id)r*   r    rs   z6urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress)
SOCIALACCOUNT_PROVIDERSr
   get_providerr   get_attributesro   
get_nameidget_nameid_format_extractextract_uid)r,   r   resultr!   settingsr    onelogin_datar5   r5   r6   test_extract_attributes   s    
r   )"unittest.mockr   r   urllib.parser   r   django.urlsr   django.utils.httpr   pytestpytest_django.assertsr   allauth.account.modelsr	   allauth.socialaccount.adapterr
   allauth.socialaccount.modelsr   *allauth.socialaccount.providers.saml.utilsr   markparametrizer7   rD   rF   rH   rJ   rP   rS   r[   rm   rq   r   r5   r5   r5   r6   <module>   st    
	$	
	
	
