o
    Ki%                     @   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re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rt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 }|rt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>