3
ãdeÒ  ã               @   sf   d dl Z d dlmZmZ d dlZddlmZ ddlmZ eje	ƒZ
dd„ Zdd	„ Zd
d„ Zdd„ ZdS )é    N)ÚdatetimeÚ	timedeltaé   )ÚMex)Úparse_responsec       	      K   sž   |st dƒ‚|d kr2d|kr$tj}nd|kr2tj}|tjtjfkrNt d| ƒ‚t| ||||ƒ}|j|f|d|dœdœ|—Ž}|jdkr”tjd	|j	ƒ t
|j	ƒS )
Nz)WsTrust endpoint address can not be emptyz/trust/2005/usernamemixedz/trust/13/usernamemixedzZUnsupported soap action: %s. Contact your administrator to check your ADFS's MEX settings.z#application/soap+xml; charset=utf-8)zContent-typeZ
SOAPAction)ÚdataÚheadersi�  z)Unsuccessful WsTrust request receives: %s)Ú
ValueErrorr   ZACTION_2005Ú	ACTION_13Ú
_build_rstÚpostÚstatus_codeÚloggerÚdebugÚtextr   )	ÚusernameÚpasswordÚcloud_audience_urnÚendpoint_addressÚsoap_actionÚhttp_clientÚkwargsr   Úresp© r   úK/var/www/agendate/envp3/lib/python3.6/site-packages/msal/wstrust_request.pyÚsend_request%   s&    


r   c             C   s,   | j ddƒj ddƒj ddƒj ddƒj d	d
ƒS )Nú&z&amp;ú"z&quot;ú'z&apos;ú<z&lt;ú>z&gt;)Úreplace)r   r   r   r   Úescape_password?   s    r"   c             C   s
   | j dƒS )Nz%Y-%m-%dT%H:%M:%SZ)Ústrftime)Údatetime_objr   r   r   Úwsu_time_formatE   s    r%   c             C   s”   t jƒ }djtjd tjd tjd |ttjƒ ƒ|t|ƒt|t	dd� ƒ| t
|ƒ|tjkrdtjd ntjd ||tjkr|d	nd
|tjkrŒdndd�S )Na  <s:Envelope xmlns:s='{s}' xmlns:wsa='{wsa}' xmlns:wsu='{wsu}'>
        <s:Header>
            <wsa:Action s:mustUnderstand='1'>{soap_action}</wsa:Action>
            <wsa:MessageID>urn:uuid:{message_id}</wsa:MessageID>
            <wsa:ReplyTo>
            <wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address>
            </wsa:ReplyTo>
            <wsa:To s:mustUnderstand='1'>{endpoint_address}</wsa:To>

            <wsse:Security s:mustUnderstand='1'
            xmlns:wsse='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'>
                <wsu:Timestamp wsu:Id='_0'>
                    <wsu:Created>{time_now}</wsu:Created>
                    <wsu:Expires>{time_expire}</wsu:Expires>
                </wsu:Timestamp>
                <wsse:UsernameToken wsu:Id='ADALUsernameToken'>
                    <wsse:Username>{username}</wsse:Username>
                    <wsse:Password>{password}</wsse:Password>
                </wsse:UsernameToken>
            </wsse:Security>

        </s:Header>
        <s:Body>
        <wst:RequestSecurityToken xmlns:wst='{wst}'>
        <wsp:AppliesTo xmlns:wsp='http://schemas.xmlsoap.org/ws/2004/09/policy'>
            <wsa:EndpointReference>
                <wsa:Address>{applies_to}</wsa:Address>
            </wsa:EndpointReference>
        </wsp:AppliesTo>
        <wst:KeyType>{key_type}</wst:KeyType>
            <wst:RequestType>{request_type}</wst:RequestType>
        </wst:RequestSecurityToken>
        </s:Body>
        </s:Envelope>ÚsÚwsuZwsa10é
   )ÚminutesÚwstZwst2005z7http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearerz9http://schemas.xmlsoap.org/ws/2005/05/identity/NoProofKeyz6http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issuez1http://schemas.xmlsoap.org/ws/2005/02/trust/Issue)r&   r'   Zwsar   Z
message_idr   Ztime_nowZtime_expirer   r   r*   Z
applies_toZkey_typeZrequest_type)r   ÚutcnowÚformatr   ZNSÚstrÚuuidÚuuid4r%   r   r"   r
   )r   r   r   r   r   Únowr   r   r   r   N   s    "r   )r.   r   r   ÚloggingZmexr   Zwstrust_responser   Ú	getLoggerÚ__name__r   r   r"   r%   r   r   r   r   r   Ú<module>   s   
	