3
ãde£  ã            	   @   sŠ   d Z ddlZddlZddlZddlZddlZyddlmZ W n   ddlmZ Y nX ddlm	Z	 ej
eƒZdd„ Zdd	„ Zdd
d„ZdS )zPThis module wraps Cloud Shell's IMDS-like interface inside an OAuth2-like helperé    N)Úurlparseé   )Údecode_partc               C   s   t jjddƒjdƒS )NZAZUREPS_HOST_ENVIRONMENTÚ zcloud-shell)ÚosÚenvironÚgetÚ
startswith© r
   r
   úF/var/www/agendate/envp3/lib/python3.6/site-packages/msal/cloudshell.pyÚ_is_running_in_cloud_shell   s    r   c             C   sF   ddg}x|D ]}| j |ƒr|S qW t| ƒ}|jrBdj|j|jƒS | S )Nz(https://analysis.windows.net/powerbi/apiz4https://pas.windows.net/CheckMyAccess/Linux/.defaultz{}://{})r	   r   ÚschemeÚformatÚnetloc)ZscopeZcloud_shell_supported_audiencesÚaÚur
   r
   r   Ú_scope_to_resource   s    

r   c             C   s  | j dt|pi djtt|ƒƒd�ddid�}|jdkr|tjd|jƒ t	j
|jƒjd	i ƒ}d
d„ |jdƒ|jdƒdœjƒ D ƒS t	j
|jƒ}d}|d t|d ƒ|jd|ƒdœ}|p²i jd|ƒ}	|d |	krØddj|	ƒdœS |d jdƒ}
dddœ}tjƒ }d}dd||d ||dœ|d< t|
ƒdk�rºynt	j
t|
d ƒƒ}|jd dƒ|jd!dƒdœ}|d" |d# ||d$ |d% |jd&ƒ�p†|jd'ƒ�p†|dœ|d< W n& tk
�r¸   tjd(|
d ƒ Y nX tjt	j|ƒjd)ƒƒjd)ƒ|d*< |d+ |d d!< |jd,ƒ�r|d, |d,< |S )-Nz#http://localhost:50342/oauth2/tokenú )ÚresourceZMetadataÚtrue)ÚdataÚheadersi,  zCloud Shell IMDS error: %sÚerrorc             S   s   i | ]\}}|r||“qS r
   r
   )Ú.0ÚkÚvr
   r
   r   ú
<dictcomp>3   s    z!_obtain_token.<locals>.<dictcomp>ÚcodeÚmessage)r   Zerror_descriptionZBearerÚaccess_tokenÚ
expires_inÚ
token_type)r   r    r!   Zbroker_errorz>token_type {} is not supported by this version of Azure PortalÚ.ÚuserZ
cloudshell)ÚuidÚutidzcurrentuser@cloudshelli  )ÚissÚsubZaudÚexpÚiatÚpreferred_usernameZid_token_claimsé   r   ÚoidÚtidr&   r'   r(   r)   r*   Zunique_namez Unable to decode jwt payload: %szutf-8Úclient_infor%   Zrefresh_token)ÚpostÚdictÚjoinÚmapr   Ústatus_codeÚloggerÚdebugÚtextÚjsonÚloadsr   ÚitemsÚintr   ÚsplitÚtimeÚlenr   Ú
ValueErrorÚbase64Ú	b64encodeÚdumpsÚencodeÚdecode)Úhttp_clientZscopesZ	client_idr   ÚrespZcs_errorZimds_payloadZBEARERZoauth2_responseZexpected_token_typeÚpartsr.   Únowr*   Zjwt_payloadr
   r
   r   Ú_obtain_token(   sl    



rH   )NN)Ú__doc__r?   r7   Úloggingr   r<   r   Úurllib.parseZoauth2cli.oidcr   Ú	getLoggerÚ__name__r4   r   r   rH   r
   r
   r
   r   Ú<module>   s   
