
    fj%                        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     e/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/saml/tests.py	<genexpr>ztest_acs.<locals>.<genexpr>U   s      =
AFF=
   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KJW%j12HOOL!$,j!%%i1B1BCGK///J((7&&v.((2H*6B\B5XNOD(\;;
$7#?@t  D *4G3OPJs"""
z)))::j!D&@$G8 =
 NN=
 
 	
 
 J<///''++/^ , 
 !!&)n>T-UUUU$$((gll(;{{Ztzz=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        8XA8Xr5   )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48X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^     ::gj2Eu1MNODs"""::d:&'D48X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    ::gj2Eu1MNOD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<    ::gl4G3OPQD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    ;;&95%AB
&	'D s"""JHTUUU(8,223J>>,'///FNN8#>#>?DDFGJH{+++NN8667A!DE	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    
 ::go7JE6RSTD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     ffSkGw?F%=$///%=$...%=./E;Q3RRRR%=./E;V3W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   & ffSkG	Z
 D	#(-/E'F(-/J'K"	#

 #7OUCD %=$///%=$...%=./E;Q3RRRR%=./E;V3WWWW--goUG.TUL"&&tR044[AL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$ }))$)HHFM04M  -,=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	VW%{G<	"45	
 
	7;['R	*E2B}U'/''	
 
r2}m4'04S104SnYY#9I$	  $16"		
	XX  $ 6	
 % 6  45	
$8%$86  <eWE$56	

 
g()+<=
6
6r[   