3
ãde+  ã               @   s’   yd dl mZ W n   d dlmZ Y nX yd dlmZ W n  ek
rZ   d dlmZ Y nX d dlZeje	ƒZ
dd„ Zdd„ ZG d	d
„ d
eƒZdS )é    )Úurlparse)ÚcElementTree)ÚElementTreeNc             C   s   dj | dgt| ƒd   ƒS )Nú/z..é   )ÚjoinÚlen)Zroute_to_leaf© r	   ú?/var/www/agendate/envp3/lib/python3.6/site-packages/msal/mex.pyÚ_xpath_of_root)   s    r   c             K   sT   |j | f|Ž}|jƒ  yt|jƒjƒ S  tjk
rN   tjd|j	|jƒ ‚ Y nX d S )NzMalformed MEX document: %s, %s)
ÚgetÚraise_for_statusÚMexÚtextÚ&get_wstrust_username_password_endpointÚETÚ
ParseErrorÚloggerÚ	exceptionÚstatus_code)Zmex_endpointÚhttp_clientÚkwargsZmex_respr	   r	   r
   Úsend_request.   s    r   c               @   sn   e Zd Zdddddddddd	d
d
dddœZdZdZdd„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )r   z http://schemas.xmlsoap.org/wsdl/z9http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702z4http://schemas.xmlsoap.org/ws/2005/07/securitypolicyzRhttp://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsdz$http://www.w3.org/2005/08/addressingz3http://schemas.microsoft.com/ws/06/2004/policy/httpz'http://schemas.xmlsoap.org/wsdl/soap12/z,http://schemas.xmlsoap.org/ws/2004/09/policyz'http://www.w3.org/2003/05/soap-envelopez0http://docs.oasis-open.org/ws-sx/ws-trust/200512z%urn:oasis:names:tc:SAML:1.0:assertionz+http://schemas.xmlsoap.org/ws/2005/02/trust)ÚwsdlÚspZsp2005ÚwsuZwsaZwsa10ÚhttpZsoap12ZwspÚsZwstÚtrustZsamlZwst2005z:http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issuez5http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issuec             C   s   t j|ƒ| _d S )N)r   Ú
fromstringÚdom)ÚselfZmex_documentr	   r	   r
   Ú__init__N   s    zMex.__init__c                s8   dˆj d  ‰t‡ ‡‡fdd„ˆjjt|ƒˆj ƒD ƒƒS )Nz{%s}Idr   c                s.   g | ]&}|j ˆ ˆjƒd k	rdj|jˆƒƒ‘qS )Nz#{})ÚfindÚNSÚformatr   )Ú.0Úpolicy)Úbinding_xpathÚid_attrr!   r	   r
   ú
<listcomp>S   s   z'Mex._get_policy_ids.<locals>.<listcomp>)r$   Úsetr    Úfindallr   )r!   Zcomponents_to_leafr(   r	   )r(   r)   r!   r
   Ú_get_policy_idsQ   s    zMex._get_policy_idsc             C   sJ   ddddddddg}| j |dƒ}dddddd	dd
g}|j| j |dƒƒ |S )Nz
wsp:Policyzwsp:ExactlyOnezwsp:Allz"sp:SignedEncryptedSupportingTokenszsp:UsernameTokenzsp:WssUsernameToken10z.//sp:TransportBindingzsp2005:SignedSupportingTokenszsp2005:UsernameTokenzsp2005:WssUsernameToken10z.//sp2005:TransportBinding)r-   Úupdate)r!   ÚpathZpoliciesZpath2005r	   r	   r
   Ú!_get_username_password_policy_idsX   s    

z%Mex._get_username_password_policy_idsc             C   s   | j ddddgdƒS )Nz
wsp:Policyzwsp:ExactlyOnezwsp:Allzhttp:NegotiateAuthenticationz.//sp2005:TransportBinding)r-   )r!   r	   r	   r
   Ú_get_iwa_policy_idsc   s    
zMex._get_iwa_policy_idsc             C   s‚   i }xx| j jd| jƒD ]d}|jd| jƒjdƒdkr4q|jd| jƒjdƒ}x0|jd| jƒD ]}|jdƒ|d	œ||jd
ƒ< qXW qW |S )Nzwsdl:bindingzsoap12:bindingÚ	transportz$http://schemas.xmlsoap.org/soap/httpzwsdl:operation/soap12:operationZ
soapActionzwsp:PolicyReferenceÚURI)Ú
policy_uriÚactionÚname)r    r,   r$   r#   r   )r!   ÚbindingsÚbindingr5   Úprr	   r	   r
   Ú_get_bindingsh   s    "zMex._get_bindingsc             C   sŒ   g }x‚| j jd| jƒD ]n}|jdƒjdƒd
 }|j|ƒ}|r|d |kr|jd| jƒ}|d k	r|jjƒ jdƒr|j	|j|d d	œƒ qW |S )Nzwsdl:service/wsdl:portr8   ú:r   r4   z%wsa10:EndpointReference/wsa10:Addresszhttps://r5   )Úaddressr5   éÿÿÿÿ)
r    r,   r$   r   Úsplitr#   r   ÚlowerÚ
startswithÚappend)r!   r7   Z
policy_idsÚ	endpointsÚportZbinding_namer8   r<   r	   r	   r
   Ú_get_endpointsu   s    
zMex._get_endpointsc             C   sD   | j | jƒ | jƒ ƒ}x|D ]}|d | jkr|S qW |r@|d S dS )zDReturns {"address": "https://...", "action": "the soapAction value"}r5   r   N)rD   r:   r0   Ú	ACTION_13)r!   rB   Úer	   r	   r
   r   �   s    
z*Mex.get_wstrust_username_password_endpointN)Ú__name__Ú
__module__Ú__qualname__r$   rE   ZACTION_2005r"   r-   r0   r1   r:   rD   r   r	   r	   r	   r
   r   9   s.   r   )Úurllib.parser   Z	xml.etreer   r   ÚImportErrorr   ÚloggingÚ	getLoggerrG   r   r   r   Úobjectr   r	   r	   r	   r
   Ú<module>   s   
