3
ãde9+  ã               @   s  d Z ddlmZ ddlZddlZddlZddlZejeƒZ	yddl
Z
e
jdd„ ƒ W n  eefk
rt   edƒ‚Y nX G dd„ deƒZG d	d
„ d
eƒZG dd„ dƒZdd„ Zdd„ Zd"dd„Zdd„ Zdd„ Zd#dd„Zd$dd„Zd%dd„Zd&dd„Zd d!„ ZdS )'z†This module is an adaptor to the underlying broker.
It relies on PyMsalRuntime which is the package providing broker's functionality.
é    )ÚEventNc             C   s0   t jjtjt jjtjt jjtjij|tjƒ| ƒS )N)	ÚpymsalruntimeZLogLevelÚTRACEÚloggerÚdebugÚDEBUGÚFATALÚcriticalÚget)ÚmessageÚlevel© r   úB/var/www/agendate/envp3/lib/python3.6/site-packages/msal/broker.pyÚ<lambda>   s    

r   zFYou need to install dependency by: pip install "msal[broker]>=1.20,<2"c               @   s   e Zd ZdS )ÚRedirectUriErrorN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r      s   r   c               @   s   e Zd ZdS )ÚTokenTypeErrorN)r   r   r   r   r   r   r   r   "   s   r   c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú_CallbackDatac             C   s   t ƒ | _d | _d S )N)r   ÚsignalÚresult)Úselfr   r   r   Ú__init__'   s    z_CallbackData.__init__c             C   s   | j jƒ  || _d S )N)r   Úsetr   )r   r   r   r   r   Úcomplete+   s    
z_CallbackData.completeN)r   r   r   r   r   r   r   r   r   r   &   s   r   c             C   sZ   | j ƒ }d|ksd|kr&tdj|ƒƒ‚ddj|| jƒ | jƒ | jƒ ƒ| jƒ | jƒ | jƒ dœS )NZAADSTS50011ZAADSTS7000218z‚MsalRuntime won't work unless this one more redirect_uri is registered to current app: ms-appx-web://Microsoft.AAD.BrokerPlugin/{}Zbroker_errorz'{}. Status: {}, Error code: {}, Tag: {})ÚerrorZerror_descriptionZ_broker_statusZ_broker_error_codeZ_broker_tag)Úget_contextr   ÚformatZ
get_statusZget_error_codeZget_tag)r   Ú	client_idÚcontextr   r   r   Ú_convert_error0   s    r!   c             C   s`   t ƒ }tj| ||fdd„ƒ |jjƒ  |jjƒ }|rJtjdt	|dƒƒ dS |jj
ƒ }|r\|S dS )zFReturn an instance of MSALRuntimeAccount, or log error and return Nonec             S   s
   |j | ƒS )N)r   )r   Úcallback_datar   r   r   r   N   s    z%_read_account_by_id.<locals>.<lambda>zread_account_by_id() error: %sN)r   r   Zread_account_by_idr   Úwaitr   Ú	get_errorr   r   r!   Úget_account)Ú
account_idÚcorrelation_idr"   r   Úaccountr   r   r   Ú_read_account_by_idH   s    


r)   c       
   	   C   s
  | j ƒ }|jdd ƒ | jƒ }|r2tt||ƒ|d�S | jƒ rHtj| jƒ ƒni }| jƒ }|s`t	dƒ‚dd„ | j
ƒ | jƒ ttjƒ ƒ | jƒ ||jƒ |jƒ |p˜ddœjƒ D ƒ}|d jd	ƒ}|d
 jƒ dkrä| rätdj|d d d… ƒƒ‚| jƒ }	|	rþdj|	ƒ|d< t||d�S )NZwam_telemetry)Z_msalruntime_telemetryz*Account is expected to be always availablec             S   s   i | ]\}}|r||“qS r   r   )Ú.0ÚkÚvr   r   r   ú
<dictcomp>e   s    z#_convert_result.<locals>.<dictcomp>ZBearer)Úaccess_tokenZ
expires_inZid_tokenÚid_token_claimsZclient_infoZ_account_idÚ
token_typer.   ZAAAAr0   zssh-certz'Broker could not get an SSH Cert: {}...é   ú Zscope)Zget_telemetry_dataÚpopr$   Údictr!   Zget_id_tokenÚjsonÚloadsr%   ÚAssertionErrorZget_access_tokenZget_access_token_expiry_timeÚintÚtimeZget_raw_id_tokenZget_client_infoZget_account_idÚitemsÚ
startswithÚlowerr   r   Zget_granted_scopesÚjoin)
r   r   Úexpected_token_typeZ	telemetryr   r/   r(   Zreturn_valueZlikely_a_certZgranted_scopesr   r   r   Ú_convert_result[   s0    r?   c               C   s   t tjƒ ƒS )N)ÚstrÚuuidÚuuid4r   r   r   r   Ú_get_new_correlation_idx   s    rC   c             C   s   | j ddƒ d S )NZmsal_request_typeZconsumer_passthrough)Úset_additional_parameter)Úparamsr   r   r   Ú_enable_msa_pt|   s    rF   Fc             K   s    t j|| ƒ}|j|ƒ |r$|j|ƒ tƒ }x,|jƒ D ] \}	}
|
d k	r4|j|	t|
ƒƒ q4W |rdt|ƒ t j	||prt
ƒ |fdd„ƒ |jjƒ  t|j||jdƒd�S )Nc             S   s
   |j | ƒS )N)r   )r   r"   r   r   r   r   ‘   s    z"_signin_silently.<locals>.<lambda>r0   )r>   )r   ÚMSALRuntimeAuthParametersÚset_requested_scopesÚset_decoded_claimsr   r:   rD   r@   rF   Zsignin_silentlyrC   r   r#   r?   r   r
   )Ú	authorityr   Úscopesr'   ÚclaimsÚenable_msa_ptÚkwargsrE   r"   r+   r,   r   r   r   Ú_signin_silently€   s"    


rO   c	             K   sþ   t j|| ƒ}
|
j|ƒ |
jdƒ |rL|dkr@|rLd }tjdƒ ntjd|ƒ |d kr`|
jddƒ |rlt|
ƒ x,|	jƒ D ] \}}|d k	rv|
j|t	|ƒƒ qvW |r¨|
j
|ƒ tƒ }t j|pÄt jƒ pÄt jƒ |
|pÎtƒ ||fdd„ƒ |jjƒ  t|j||	jd	ƒd
�S )NÚplaceholderZselect_accountzKUsing both select_account and login_hint is ambiguous. Ignoring login_hint.z)prompt=%s is not supported by this moduleZmsal_gui_threadÚtruec             S   s
   |j | ƒS )N)r   )r   r"   r   r   r   r   À   s    z'_signin_interactively.<locals>.<lambda>r0   )r>   )r   rG   rH   Zset_redirect_urir   ÚwarningrD   rF   r:   r@   rI   r   Zsignin_interactivelyZget_console_windowZget_desktop_windowrC   r   r#   r?   r   r
   )rJ   r   rK   Zparent_window_handleÚpromptZ
login_hintrL   r'   rM   rN   rE   r+   r,   r"   r   r   r   Ú_signin_interactively—   s8    	



rT   c             K   s°   |pt ƒ }t||ƒ}|d kr d S tj|| ƒ}|j|ƒ |rD|j|ƒ x,|jƒ D ] \}	}
|
d k	rN|j|	t|
ƒƒ qNW t	ƒ }tj
||||fdd„ƒ |jjƒ  t|j||jdƒd�S )Nc             S   s
   |j | ƒS )N)r   )r   r"   r   r   r   r   Û   s    z)_acquire_token_silently.<locals>.<lambda>r0   )r>   )rC   r)   r   rG   rH   rI   r:   rD   r@   r   Zacquire_token_silentlyr   r#   r?   r   r
   )rJ   r   r&   rK   rL   r'   rN   r(   rE   r+   r,   r"   r   r   r   Ú_acquire_token_silentlyÆ   s(    




rU   c             C   sd   |pt ƒ }t||ƒ}|d kr d S tƒ }tj| |||fdd„ƒ |jjƒ  |jjƒ }|r`t	|| ƒS d S )Nc             S   s
   |j | ƒS )N)r   )r   r"   r   r   r   r   ë   s    z#_signout_silently.<locals>.<lambda>)
rC   r)   r   r   Zsignout_silentlyr   r#   r   r$   r!   )r   r&   r'   r(   r"   r   r   r   r   Ú_signout_silentlyá   s    



rV   c               C   s   t jdƒ d S )Né   )r   Zset_is_pii_enabledr   r   r   r   Ú_enable_pii_logñ   s    rX   )N)NNF)NNNNF)NN)N)Ú__doc__Ú	threadingr   r5   Úloggingr9   rA   Ú	getLoggerr   r   r   Zregister_logging_callbackÚImportErrorÚAttributeErrorÚ
ValueErrorr   r   r   r!   r)   r?   rC   rF   rO   rT   rU   rV   rX   r   r   r   r   Ú<module>   s:   
	

 
    
)

