o
    ÙKÕi%  ã                   @   sÄ  d Z ddlZddlZddlmZmZmZmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 e 5¡ Z6e 7e 8e9¡¡Z:dZ;eeeeeeeeee!e#e%e*e,e.e0gZ<dd„ Z=d&d'dd„Z>d'dd„Z?dd „ Z@d!d"„ ZAeAd&d#d$„ƒZBe9d%kràe CeBƒ ¡ dS dS )(z2Client to manage Ubuntu Pro services on a machine.é    N)
ÚaptÚdefaultsÚevent_loggerÚ
exceptionsÚhttpÚlockÚlogÚmessagesÚutilÚversion)Úapi_command)Úattach_command)Úauto_attach_command)Úcollect_logs_command)Úconfig_command)Úcve_command)Úcves_command)Údetach_command)Údisable_command)Úenable_command)Úfix_command)Úhelp_command)ÚHelpCategoryÚProArgumentParser)Úrefresh_command)Úsecurity_status_command)Ústatus_command)Úsystem_command)ÚUAConfig)Úget_user_or_root_log_file_pathÚproc                  C   sÂ   t tdtjjtdd�d�} |  tjdtjjtd�¡ | j	ddtj
d	� |  tjdtj
¡ | j	d
dt ¡ tjjtd�d� |  tjd
tjjtd�¡ | jtjddd�}d|_tD ]}| |¡ qW| S )NFz	<command>)ÚnameÚcommand)ÚprogÚuse_main_helpÚepilogz
-h, --help)r!   z--debugÚ
store_true)ÚactionÚhelpú	--versionr   )r'   r   r(   r"   )ÚtitleÚdestÚmetavarT)r   ÚNAMEr	   ÚCLI_HELP_EPILOGÚformatÚadd_help_entryr   ÚFLAGSÚCLI_HELP_FLAG_DESCÚadd_argumentÚCLI_ROOT_DEBUGr   Úget_versionÚCLI_ROOT_VERSIONÚadd_subparsersÚCLI_AVAILABLE_COMMANDSÚrequiredÚCOMMANDSÚregister)ÚparserÚ
subparsersr"   © r>   ú7/usr/lib/python3/dist-packages/uaclient/cli/__init__.pyÚ
get_parser?   sH   ýýÿ
ÿüýýr@   Úreturnc                 C   s\   | r| j dkst| ddƒdv rd S t ¡ }|r,t d|¡ tjtj	j
|d�tjd� d S d S )NÚapir/   Ú ©ÚjsonÚyamlzNew version available: %s)r   ©Ú	file_type)r"   Úgetattrr   Úcheck_for_new_versionÚLOGÚwarningÚeventÚinfor	   ÚWARN_NEW_VERSION_AVAILABLE_CLIr/   ÚsysÚstderr)Úcmd_argsÚnew_versionr>   r>   r?   Ú_warn_about_new_versionk   s   ÿ
ÿ
üþrT   c                 C   s^   | j dv r+tj ¡ s-t| dƒr| jdv rdS t d¡ tj	t
jj| j d�tjd� dS dS dS )z4Warn users that the user readable output may change.)Ústatuszsecurity-statusr/   rD   Nz.Not in a tty and human-readable command called)r"   rG   )r"   rP   ÚstdoutÚisattyÚhasattrr/   rK   rL   rM   rN   r	   ÚWARNING_HUMAN_READABLE_OUTPUTrQ   ©rR   r>   r>   r?   Ú_warn_about_output_redirection�   s   
ÿ
ÿ
üúr[   c                 C   s`   | j dv r*t | j ¡ t| dƒr,| jdkrt tjj¡ | jdkr.t tjj	¡ dS dS dS dS )z3Set the right event mode based on the args provided)ÚattachÚdetachÚenableÚdisablerU   r/   rE   rF   N)
r"   rM   Úset_commandrX   r/   Úset_event_moder   ÚEventLoggerModeÚJSONÚYAMLrZ   r>   r>   r?   ra   ’   s   



úra   c                    s   ‡ fdd„}|S )Nc               
      sæ  zˆ | i |¤ŽW S  t y(   t d¡ ttjtjd� t 	¡  t 
d¡ Y d S  tjy› } zgdt|ƒv r[tj}t d¡rAtj}|j|jd�}tj|j|jd� tj|jtjd� n%tjd	|j|d
� tjj|j|jd�}tj|j|jd� tj|jtjd� t 	¡  t ¡  tƒ  t 
d¡ W Y d }~d S d }~w tjyâ } z;tj}t d¡r®tj}|j|jd�}tj|j|jd� tj|jtjd� t 	¡  t ¡  tƒ  t 
d¡ W Y d }~d S d }~w tj�y+ } z<t |j¡ tj|j|j|j d� tjd |j¡tjd� t!|tj"ƒ�st 	¡  t ¡  tƒ  t 
|j#¡ W Y d }~d S d }~w t$�yr } z;t d¡ t 	¡  tjtj%jt|ƒt&ƒ d�jtjd� tjt'|dt|ƒƒdd� t ¡  tƒ  t 
d¡ W Y d }~d S d }~ww )NÚKeyboardInterrupt)Úfileé   ÚCERTIFICATE_VERIFY_FAILEDzca-certificates)Úurl)Ú	error_msgÚ
error_code)Úinfo_msgrH   zFailed to access URL: %s)Úexc_info)ri   Úcause_error)rj   rk   Úadditional_infoz{}z&Unhandled exception, please file a bug)rj   Úlog_pathÚmsgÚ	exception)rj   Ú
error_type)(re   rK   ÚerrorÚprintr	   ÚCLI_INTERRUPT_RECEIVEDrP   rQ   r   Úclear_lock_file_if_presentÚexitr   ÚConnectivityErrorÚstrÚ&SSL_VERIFICATION_ERROR_CA_CERTIFICATESr   Úis_installedÚ%SSL_VERIFICATION_ERROR_OPENSSL_CONFIGr/   ri   rM   rq   r!   rN   rr   ÚE_CONNECTIVITY_ERRORrn   Úprocess_eventsrT   ÚPycurlCACertificatesErrorÚUbuntuProErrorÚmsg_codero   Ú
isinstanceÚLockHeldErrorÚ	exit_codeÚ	ExceptionÚUNEXPECTED_ERRORr   rI   )ÚargsÚkwargsÚexcÚtmplrq   Úe©Úfuncr>   r?   Úwrapperž   s”   

ÿþ€
€ý€
þûÿ€ïz#main_error_handler.<locals>.wrapperr>   )rŽ   r�   r>   r�   r?   Úmain_error_handler�   s   Sr�   c                 C   sn  t  tjd tjd ¡ tƒ }t  |j|j¡ | stj} t	ƒ }| dd … }|s0| 
¡  t d¡ |d dkr:d|d< d|v rR| d¡}|d |… }||d d … }n|}g }|j|d�}|jrst tj¡}| tj¡ t d	¡ |¡ t|ƒ |j}	|j}
tj|	|
d
� t d|  ¡ | ¡  dd„ tt ¡   ¡ ƒD ƒ}|r¥t d| ¡ t!|ƒ |j"|||d�}t#|ƒ |S )NÚ	log_levelÚlog_filerg   r   r   r)   z--)rˆ   Ú	ubuntupro)Ú
http_proxyÚhttps_proxyzExecuted with sys.argv: %rc                 S   s   g | ]
\}}d   ||¡‘qS )z{}={})r/   )Ú.0ÚkÚvr>   r>   r?   Ú
<listcomp>#  s    
ÿÿzmain.<locals>.<listcomp>z'Executed with environment variables: %r)ÚcfgÚ
extra_args)$r   Úsetup_cli_loggingr   ÚCONFIG_DEFAULTSr   r‘   r’   rP   Úargvr@   Ú
print_helprx   ÚindexÚ
parse_argsÚdebugÚloggingÚStreamHandlerrQ   ÚsetLevelÚDEBUGÚ	getLoggerÚ
addHandlerra   r”   r•   r   Úconfigure_web_proxyrK   Úwarn_about_invalid_keysÚsortedr
   Úget_pro_environmentÚitemsr[   r'   rT   )Úsys_argvrš   r<   Úcli_argumentsÚdouble_dash_indexÚpro_cli_argsr›   rˆ   Úconsole_handlerr”   r•   Úpro_environmentÚreturn_valuer>   r>   r?   Úmainô   sR   þ

þrµ   Ú__main__)N)rA   N)DÚ__doc__r£   rP   Úuaclientr   r   r   r   r   r   r   r	   r
   r   Úuaclient.cli.apir   Úuaclient.cli.attachr   Úuaclient.cli.auto_attachr   Úuaclient.cli.collect_logsr   Úuaclient.cli.configr   Úuaclient.cli.cver   Úuaclient.cli.cvesr   Úuaclient.cli.detachr   Úuaclient.cli.disabler   Úuaclient.cli.enabler   Úuaclient.cli.fixr   Úuaclient.cli.helpr   Úuaclient.cli.parserr   r   Úuaclient.cli.refreshr   Úuaclient.cli.security_statusr   Úuaclient.cli.statusr   Úuaclient.cli.systemr   Úuaclient.configr   Úuaclient.logr   Úget_event_loggerrM   r§   Úreplace_top_level_logger_nameÚ__name__rK   r-   r:   r@   rT   r[   ra   r�   rµ   rx   r>   r>   r>   r?   Ú<module>   sj    0ð,
W>ÿ