o
    ¾­§i4  ã                	   @   sL  d Z ddlZddlZddlZddlZddlZddlmZmZ e 	e
¡ZzddlZe dd„ ¡ W n! eefyQ   ddd	d
œ ej¡ZerMede› dƒ‚edƒ‚w G dd„ deƒZG dd„ deƒZdZdd„ Zdd„ Zd,dd„Zdd„ Z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 )0z†This module is an adaptor to the underlying broker.
It relies on PyMsalRuntime which is the package providing broker's functionality.
é    Né   )Ú__version__ÚSKUc                 C   s0   t jjtjt jjtjt jjtji |tj¡| ƒS ©N)	ÚpymsalruntimeZLogLevelÚTRACEÚloggerÚdebugÚDEBUGÚFATALÚcriticalÚget)ÚmessageÚlevel© r   úB/home/app/Keep/.python/lib/python3.10/site-packages/msal/broker.pyÚ<lambda>   s   


ùør   z1.20z1.31z1.33)Úwin32ÚdarwinÚlinuxz;You must install dependency by: pip install "msal[broker]>=z,<2"z8Dependency pymsalruntime unavailable on current platformc                   @   ó   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   z$msauth.com.msauth.unsignedapp://authc                 C   s\   |   ¡ }d|v sd|v rtd |t¡ƒ‚dd ||  ¡ |  ¡ |  ¡ ¡|  ¡ |  ¡ |  ¡ dœS )NZAADSTS50011ZAADSTS7000218z¸MsalRuntime needs the current app to register these redirect_uri
(1) ms-appx-web://Microsoft.AAD.BrokerPlugin/{}
(2) {}
(3) https://login.microsoftonline.com/common/oauth2/nativeclientZbroker_errorz'{}. Status: {}, Error code: {}, Tag: {})ÚerrorZerror_descriptionZ_broker_statusZ_broker_error_codeZ_broker_tag)Zget_contextr   ÚformatÚ_redirect_uri_on_macZ
get_statusZget_error_codeZget_tag)r   Ú	client_idÚcontextr   r   r   Ú_convert_error8   s$   ÿü	þ÷r#   c                 C   sb   t  ¡ }t  | ||fdd„¡ |j ¡  |j ¡ }|r&t dt	|dƒ¡ dS |j 
¡ }|r/|S dS )zEReturn an instance of MSALRuntimeError or MSALRuntimeAccount, or Nonec                 S   ó
   |  | ¡S r   ©Zcomplete©ÚresultÚcallback_datar   r   r   r   Y   ó   
 z%_read_account_by_id.<locals>.<lambda>zread_account_by_id() error: %sN)r   ÚCallbackDataZread_account_by_idÚsignalÚwaitr'   Ú	get_errorr   r	   r#   Úget_account)Ú
account_idÚcorrelation_idr(   r   Úaccountr   r   r   Ú_read_account_by_idS   s   
ý


r2   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 )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>p   s    ôz#_convert_result.<locals>.<dictcomp>r   ÚpopZbearer)Úaccess_tokenZ
expires_inZid_tokenÚid_token_claimsZclient_infoZ_account_idÚ
token_typer8   ZAAAAr:   zssh-certz'Broker could not get an SSH Cert: {}...é   ú Úscope)Zget_telemetry_datar7   r-   Údictr#   Zget_id_tokenÚjsonÚloadsr.   Zis_pop_authorizationZget_authorization_headerÚsplitZ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   r9   r1   Úreturn_valueZlikely_a_certZgranted_scopesr   r   r   Ú_convert_resultf   sB   þÿõôÿrJ   c                   C   s   t t ¡ ƒS r   )ÚstrÚuuidÚuuid4r   r   r   r   Ú_get_new_correlation_id‡   s   rN   c                 C   s   |   dd¡ d S )NZmsal_request_typeZconsumer_passthrough)Úset_additional_parameter©Úparamsr   r   r   Ú_enable_msa_pt‹   s   rR   c                 C   s(   t  | |¡}| dt¡ | dt¡ |S )NZmsal_client_skuZmsal_client_ver)r   ZMSALRuntimeAuthParametersrO   r   r   )r!   Ú	authorityrQ   r   r   r   Ú_build_msal_runtime_auth_paramsŽ   s   rT   c                 C   s   t jdkr|  d¡ d S d S )Nr   ú<https://login.microsoftonline.com/common/oauth2/nativeclient)ÚsysÚplatformÚset_redirect_urirP   r   r   r   Ú_set_redirect_uri_for_linux”   s
   
ÿþrY   Fc                 K   sÄ   t || ƒ}t|ƒ | |¡ |r| |¡ |r%| |j|jj|jj|j	¡ t
 ¡ }	| ¡ D ]\}
}|d ur=| |
t|ƒ¡ q-|rDt|ƒ t
 ||pKtƒ |	fdd„¡ |	j ¡  t|	j|| d¡dS )Nc                 S   r$   r   r%   r&   r   r   r   r   ²   r)   z"_signin_silently.<locals>.<lambda>r:   ©rH   )rT   rY   Úset_requested_scopesÚset_decoded_claimsÚset_pop_paramsÚ_http_methodÚ_urlÚnetlocÚpathÚ_noncer   r*   rD   rO   rK   rR   Zsignin_silentlyrN   r+   r,   rJ   r'   r   )rS   r!   Úscopesr0   ÚclaimsÚenable_msa_ptÚauth_schemeÚkwargsrQ   r(   r4   r5   r   r   r   Ú_signin_silently›   s4   


þ€
ý
ÿrh   c
              	   K   s,  t || ƒ}| |¡ | tjdkrtnd¡ |r,|dkr&|r%d }t d¡ nt d|¡ |d u r6| dd¡ |r<t	|ƒ |	rL| 
|	j|	jj|	jj|	j¡ |
 ¡ D ]\}}|d ur`| |t|ƒ¡ qP|rh| |¡ tjdd	}t |pyt ¡ pyt ¡ ||p~tƒ ||fd
d„¡ |j ¡  t|j||
 d¡dS )Nr   rU   Z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ÚtrueT)Úis_interactivec                 S   r$   r   r%   r&   r   r   r   r   ê   r)   z'_signin_interactively.<locals>.<lambda>r:   rZ   )rT   r[   rX   rV   rW   r    r   ÚwarningrO   rR   r]   r^   r_   r`   ra   rb   rD   rK   r\   r   r*   Zsignin_interactivelyZget_console_windowZget_desktop_windowrN   r+   r,   rJ   r'   r   )rS   r!   rc   Zparent_window_handleÚpromptZ
login_hintrd   r0   re   rf   rg   rQ   r4   r5   r(   r   r   r   Ú_signin_interactively¸   sP   


þ
€þ€

û
ÿrm   c                 K   sÔ   |pt ƒ }t||ƒ}|d u rd S t|| ƒ}	t|	ƒ |	 |¡ |r%|	 |¡ |r5|	 |j|jj	|jj
|j¡ | ¡ D ]\}
}|d urI|	 |
t|ƒ¡ q9t ¡ }t |	|||fdd„¡ |j ¡  t|j|| d¡dS )Nc                 S   r$   r   r%   r&   r   r   r   r     r)   z)_acquire_token_silently.<locals>.<lambda>r:   rZ   )rN   r2   rT   rY   r[   r\   r]   r^   r_   r`   ra   rb   rD   rO   rK   r   r*   Zacquire_token_silentlyr+   r,   rJ   r'   r   )rS   r!   r/   rc   rd   r0   rf   rg   r1   rQ   r4   r5   r(   r   r   r   Ú_acquire_token_silentlyð   s:   




þ€
ü
ÿrn   c                 C   sf   |pt ƒ }t||ƒ}|d u rd S t ¡ }t | |||fdd„¡ |j ¡  |j ¡ }|r1t	|| ƒS d S )Nc                 S   r$   r   r%   r&   r   r   r   r     r)   z#_signout_silently.<locals>.<lambda>)
rN   r2   r   r*   Zsignout_silentlyr+   r,   r'   r-   r#   )r!   r/   r0   r1   r(   r   r   r   r   Ú_signout_silently  s    


ü


ÿro   c                   C   s   t  d¡ d S )Nr   )r   Zset_is_pii_enabledr   r   r   r   Ú_enable_pii_log!  s   rp   r   )NNFN)NNNNFN)NNN)#Ú__doc__r?   ÚloggingrV   rC   rL   Zskur   r   Ú	getLoggerr   r   r   Zregister_logging_callbackÚImportErrorÚAttributeErrorr   rW   Zmin_verÚ
ValueErrorr   r   r    r#   r2   rJ   rN   rR   rT   rY   rh   rm   rn   ro   rp   r   r   r   r   Ú<module>   sd    
	ýü
ÿô
!
ý 
ø9
þ
!