o
    +Âif³.  ã                	   @   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 e¡Z	zddl
Z
e
 dd„ ¡ W n eefy7   edƒ‚w 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 |tj¡| ƒS ©N)	ÚpymsalruntimeÚLogLevelÚTRACEÚloggerÚdebugÚDEBUGÚFATALÚcriticalÚget)ÚmessageÚlevel© r   úD/var/www/html/corbot_env/lib/python3.10/site-packages/msal/broker.pyÚ<lambda>   s   


ùør   zFYou need to install dependency by: pip install "msal[broker]>=1.20,<2"c                   @   ó   e Zd ZdS )ÚRedirectUriErrorN©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r      ó    r   c                   @   r   )ÚTokenTypeErrorNr   r   r   r   r   r   "   r   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_CallbackDatac                 C   s   t ƒ | _d | _d S r   )r   ÚsignalÚresult)Úselfr   r   r   Ú__init__'   s   
z_CallbackData.__init__c                 C   s   | j  ¡  || _d S r   )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   |   ¡ }d|v sd|v rtd |¡ƒ‚dd ||  ¡ |  ¡ |  ¡ ¡|  ¡ |  ¡ |  ¡ dœS )NÚAADSTS50011ÚAADSTS7000218z‚MsalRuntime won't work unless this one more redirect_uri is registered to current app: ms-appx-web://Microsoft.AAD.BrokerPlugin/{}Úbroker_errorz'{}. Status: {}, Error code: {}, Tag: {})ÚerrorÚerror_descriptionÚ_broker_statusÚ_broker_error_codeÚ_broker_tag)Úget_contextr   ÚformatÚ
get_statusÚget_error_codeÚget_tag)r$   Ú	client_idÚcontextr   r   r   Ú_convert_error0   s    þþ÷r0   c                 C   s`   t ƒ }t | ||fdd„¡ |j ¡  |j ¡ }|r%t dt	|dƒ¡ dS |j 
¡ }|r.|S dS )zFReturn an instance of MSALRuntimeAccount, or log error and return Nonec                 S   ó
   |  | ¡S r   ©r    ©r   Úcallback_datar   r   r   r   N   ó   
 z%_read_account_by_id.<locals>.<lambda>zread_account_by_id() error: %sN)r   r   Úread_account_by_idr   Úwaitr   Ú	get_errorr   r   r0   Úget_account)Ú
account_idÚcorrelation_idr4   r$   Úaccountr   r   r   Ú_read_account_by_idH   s   
ý


r=   c           
   	   C   s,  |   ¡ }| dd ¡ |  ¡ }|rtt||ƒ|dS |  ¡ r$t |  ¡ ¡ni }|  ¡ }|s0J dƒ‚dd„ |  	¡ r?|  
¡  ¡ d n|  ¡ |  ¡ tt ¡ ƒ |  ¡ || ¡ | ¡ |  	¡ r[dn|p^dd	œ ¡ D ƒ}|d
  d¡}|d  ¡ dkrƒ|sƒtd |d
 d d… ¡ƒ‚|  ¡ }	|	rd |	¡|d< t||dS )NÚwam_telemetry)Ú_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>é   ÚpopÚbearer)Úaccess_tokenÚ
expires_inÚid_tokenÚid_token_claimsÚclient_infoÚ_account_idÚ
token_typerG   ÚAAAArM   zssh-certz'Broker could not get an SSH Cert: {}...é   ú Úscope)Úget_telemetry_datarE   r8   Údictr0   Úget_id_tokenÚjsonÚloadsr9   Úis_pop_authorizationÚget_authorization_headerÚsplitÚget_access_tokenÚget_access_token_expiry_timeÚintÚtimeÚget_raw_id_tokenÚget_client_infoÚget_account_idÚitemsÚ
startswithÚlowerr   r*   Úget_granted_scopesÚjoin)
r   r.   Úexpected_token_typeÚ	telemetryr$   rJ   r<   Úreturn_valueÚlikely_a_certÚgranted_scopesr   r   r   Ú_convert_result[   sB   þÿõôÿrk   c                   C   s   t t ¡ ƒS r   )ÚstrÚuuidÚuuid4r   r   r   r   Ú_get_new_correlation_id|   s   ro   c                 C   s   |   dd¡ d S )NÚmsal_request_typeÚconsumer_passthrough)Úset_additional_parameter)Úparamsr   r   r   Ú_enable_msa_pt€   s   rt   Fc                 K   s¼   t  || ¡}| |¡ |r| |¡ |r"| |j|jj|jj|j	¡ t
ƒ }	| ¡ D ]\}
}|d ur9| |
t|ƒ¡ q)|r@t|ƒ t  ||pGtƒ |	fdd„¡ |	j ¡  t|	j|| d¡dS )Nc                 S   r1   r   r2   r3   r   r   r   r   š   r5   z"_signin_silently.<locals>.<lambda>rM   ©rf   )r   ÚMSALRuntimeAuthParametersÚset_requested_scopesÚset_decoded_claimsÚset_pop_paramsÚ_http_methodÚ_urlÚnetlocÚpathÚ_noncer   ra   rr   rl   rt   Úsignin_silentlyro   r   r7   rk   r   r   )Ú	authorityr.   Úscopesr;   ÚclaimsÚenable_msa_ptÚauth_schemeÚkwargsrs   r4   rA   rB   r   r   r   Ú_signin_silently„   s2   

þ€
ý
ÿr†   c
              	   K   s  t  || ¡}| |¡ | d¡ |r&|dkr |rd }t d¡ nt d|¡ |d u r0| dd¡ |r6t|ƒ |	rF| |	j	|	j
j|	j
j|	j¡ |
 ¡ D ]\}}|d urZ| |t|ƒ¡ qJ|rb| |¡ tƒ }t  |ppt  ¡ ppt  ¡ ||putƒ ||fdd„¡ |j ¡  t|j||
 d	¡d
S )Nz<https://login.microsoftonline.com/common/oauth2/nativeclientÚselect_accountzKUsing both select_account and login_hint is ambiguous. Ignoring login_hint.z)prompt=%s is not supported by this moduleÚmsal_gui_threadÚtruec                 S   r1   r   r2   r3   r   r   r   r   Ï   r5   z'_signin_interactively.<locals>.<lambda>rM   ru   )r   rv   rw   Úset_redirect_urir   Úwarningrr   rt   ry   rz   r{   r|   r}   r~   ra   rl   rx   r   Úsignin_interactivelyÚget_console_windowÚget_desktop_windowro   r   r7   rk   r   r   )r€   r.   r   Úparent_window_handleÚpromptÚ
login_hintr‚   r;   rƒ   r„   r…   rs   rA   rB   r4   r   r   r   Ú_signin_interactively    sJ   



€þ€

û
ÿr’   c                 K   sÌ   |pt ƒ }t||ƒ}|d u rd S t || ¡}	|	 |¡ |r"|	 |¡ |r2|	 |j|jj	|jj
|j¡ | ¡ D ]\}
}|d urF|	 |
t|ƒ¡ q6tƒ }t |	|||fdd„¡ |j ¡  t|j|| d¡dS )Nc                 S   r1   r   r2   r3   r   r   r   r   ï   r5   z)_acquire_token_silently.<locals>.<lambda>rM   ru   )ro   r=   r   rv   rw   rx   ry   rz   r{   r|   r}   r~   ra   rr   rl   r   Úacquire_token_silentlyr   r7   rk   r   r   )r€   r.   r:   r   r‚   r;   r„   r…   r<   rs   rA   rB   r4   r   r   r   Ú_acquire_token_silentlyÕ   s8   



þ€
ü
ÿr”   c                 C   sd   |pt ƒ }t||ƒ}|d u rd S tƒ }t | |||fdd„¡ |j ¡  |j ¡ }|r0t	|| ƒS d S )Nc                 S   r1   r   r2   r3   r   r   r   r   ÿ   r5   z#_signout_silently.<locals>.<lambda>)
ro   r=   r   r   Úsignout_silentlyr   r7   r   r8   r0   )r.   r:   r;   r<   r4   r$   r   r   r   Ú_signout_silentlyõ   s    


ü


ÿr–   c                   C   s   t  d¡ d S )NrD   )r   Úset_is_pii_enabledr   r   r   r   Ú_enable_pii_log  s   r˜   r   )NNFN)NNNNFN)NNN)Ú__doc__Ú	threadingr   rU   Úloggingr]   rm   Ú	getLoggerr   r   r   Úregister_logging_callbackÚImportErrorÚAttributeErrorÚ
ValueErrorr   r   r   r0   r=   rk   ro   rt   r†   r’   r”   r–   r˜   r   r   r   r   Ú<module>   sJ    
	ý

!
ý
ø6
þ
 