
    gQ               
          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 d dlm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mZ d dlmZ d d	lmZ  ej>                         Z d
Z! G d dejD                        Z#d Z$de%fdZ&d"dZ'd Z(d Z)d"dZ*d Z+d Z,d Z-deddfdZ.dedede/dee/   ddf
dZ0d Z1d#dee/   fd Z2d! Z3y)$    Nwraps)Optional)
actionsapidaemonentitlementsevent_logger
exceptionslockmessagesstatusutil)CVE_OR_USN_REGEX)_is_attached)AptProxyScopesetup_apt_proxy)UAConfig)machine_tokenz[Kc            	       H    e Zd ZdefdZdededee   dee   fdZdefd	Z	y
)CLIEnableDisableProgress
assume_yesc                "    | | _         || _        y N)is_interactiver   )selfr   s     7/usr/lib/python3/dist-packages/uaclient/cli/cli_util.py__init__z!CLIEnableDisableProgress.__init__"   s    ",n$    total_steps
done_stepsprevious_step_messagecurrent_step_messagec                     |t        |       y y r   )print)r   r    r!   r"   r#   s        r   progressz!CLIEnableDisableProgress.progress&   s      +&' ,r   eventc                     |dk(  rt        |       y |dk(  r5t        j                  || j                        st	        j
                         y y )Ninfomessage_operation)r%   r   handle_message_operationsr   r   PromptDeniedError)r   r'   payloads      r   	_on_eventz"CLIEnableDisableProgress._on_event1   sG    F?'N))11'4??K 2244 L *r   N)
__name__
__module____qualname__boolr   intr   strr&   r.    r   r   r   r   !   sO    %d %	( 	( 		(
  (}	( 'sm	(5s 5r   r   c                       y r   r5   )argskwargss     r   _null_printr9   9   s    r   json_outputc                     | rt         S t        S r   )r9   r%   )r:   s    r   &create_interactive_only_print_functionr<   =   s    r   c                       fd}|S )z1Decorator asserting exclusive access to lock filec                 2     t                fd       }|S )Nc                 v    t        j                  d      5   |d| i|}d d d        |S # 1 sw Y   S xY w)N   )lock_holder
sleep_timecfg)r   	RetryLock)rC   r7   r8   retvalfrA   s       r   new_fz0assert_lock_file.<locals>.wrapper.<locals>.new_fH   s?    KAF 5D4c4V45M5Ms   .8r   )rF   rG   rA   s   ` r   wrapperz!assert_lock_file.<locals>.wrapperG   s     	q	 
	
 r   r5   )rA   rH   s   ` r   assert_lock_filerI   D   s     Nr   c                 .     t                fd       }|S )zDecorator asserting root userc                  d    t        j                         st        j                          | i |S r   )r   we_are_currently_rootr   NonRootUserError)r7   r8   rF   s     r   rG   zassert_root.<locals>.new_fV   s.    ))+--//d%f%%r   r   rF   rG   s   ` r   assert_rootrO   S   s"     1X& & Lr   c                 .     t                fd       }|S )z>Decorator to verify if correct params are used for json formatc                     | s | g|i |S | j                   dk(  r | j                  st        j                          | g|i |S )Njson)formatr   r   CLIJSONFormatRequireAssumeYes)cmd_argsr7   r8   rF   s      r   rG   z&verify_json_format_args.<locals>.new_fc   sS    X////??f$X-@-@::<<X////r   r   rN   s   ` r   verify_json_format_argsrV   `   s"     1X0 0 Lr   c                       fd}|S )zDecorator asserting attached config.
    :param msg_function: Optional function to generate a custom message
    if raising an UnattachedError
    c                 2     t                fd       }|S )Nc                     t        |      j                  s<r&t        | dd      }t        | dd      } |||       nt        j                          | fd|i|S )Ncommand service)rZ   service_namesrC   rC   )r   is_attachedgetattrr   UnattachedError)r7   rC   r8   rZ   r]   rF   raise_custom_error_functions        r   rG   z/assert_attached.<locals>.wrapper.<locals>.new_fw   se    $00.%dIr:G$+D)R$@M/ '}# %4466T-s-f--r   r   )rF   rG   ra   s   ` r   rH   z assert_attached.<locals>.wrapperv   s     	q
	. 

	. r   r5   )ra   rH   s   ` r   assert_attachedrb   p   s      Nr   c                 .     t                fd       }|S )z&Decorator asserting unattached config.c                     t        |      j                  rDt        j                         }t	        j
                  |j                  j                  dd             | fd|i|S )Nnamer[   )account_namerC   )r   r^   r   get_machine_token_filer   AlreadyAttachedErroraccountget)r7   rC   r8   machine_token_filerF   s       r   rG   z"assert_not_attached.<locals>.new_f   s`    ((!.!E!E!G11/77;;FBG  )3)&))r   r   rN   s   ` r   assert_not_attachedrl      s"     1X* * Lr   c                       fd}|S )Nc                 2     t                fd       }|S )Nc                     t        | dd      }t        j                  t        |      st	        j
                  |       | fd|i|S )Nsecurity_issuer[   )issuecmdrC   )r_   rematchr   r   InvalidSecurityIssueIdFormat)r7   rC   r8   rp   rr   rF   s       r   rG   z@assert_vulnerability_issue_valid.<locals>.wrapper.<locals>.new_f   sQ    $T+;R@N88,n= ==( 
 T-s-f--r   r   )rF   rG   rr   s   ` r   rH   z1assert_vulnerability_issue_valid.<locals>.wrapper   s     	q	. 
	. r   r5   )rr   rH   s   ` r    assert_vulnerability_issue_validrv      s     Nr   c                 J   t        j                  ||      \  }}|r9|r7t        j                  dj	                  |      | dj	                  |      d      |r&t        j
                  dj	                  |      |       t        j                  | dj	                  |      d      )zRaises a custom error for enable/disable commands when unattached.

    Takes into consideration if the services exist or not, and notify the user
    accordingly.)namesrC   z, r[   )valid_service	operationinvalid_serviceservice_msg)ry   rz   )rz   r{   r|   )r	   get_valid_entitlement_namesr   UnattachedMixedServicesErrorjoinUnattachedValidServicesErrorUnattachedInvalidServicesError)rZ   r]   rC   entitlements_foundentitlements_not_founds        r   &_raise_enable_disable_unattached_errorr      s     	00}#N455))$67 II&<=	
 	
 
55))$677
 	
 77 II&<=
 	
r   rC   returnc                    t        j                  |       }|j                  }|r4t        j	                  t
        j                  j                  |             n#t        j	                  t
        j                         t        j                          t        j                  |        t        j                  |       \  }}t        j                  |      }t        j	                  t        j                   |             t        j#                          y )N)contract_name)r   rg   r   r'   r)   r   ATTACH_SUCCESS_TMPLrS   ATTACH_SUCCESS_NO_CONTRACT_NAMEr   stopcleanupr   r   format_tabularr   handle_unicode_charactersprocess_events)rC   rk   r   status_dict_retoutputs         r   post_cli_attachr      s    &==cB&44M

((//m/L	
 	

8;;<
KKM
NN3s+K"";/F	JJt--f56	r   scopeset_key	set_valuec                     |t         j                  k(  r| j                  }| j                  }n+|t         j                  k(  r| j
                  }| j                  }d|v r|}n|}t        |       y)zS
    Handles setting part the apt proxies - global and uaclient scoped proxies
    https)
http_proxyhttps_proxyproxy_scopeN)r   GLOBALglobal_apt_http_proxyglobal_apt_https_proxyUACLIENTua_apt_http_proxyua_apt_https_proxyr   )rC   r   r   r   r   r   s         r   configure_apt_proxyr      sm     $$$..
00	-((	(**
,,'
;Er   c                    t        j                  g d      }| j                         st        j                  j                  dj                  |t        |      t                     t        j                  j                          t        j                  d       t        j                  j                  d       | j                         sy y )N)|/-\z{}{}{}g?)	itertoolscycleis_setsysstdoutwriterS   nextCLEAR_LINE_ANSI_CODEflushtimesleep)stop_spinnermsgspinners      r   run_spinnerr      s    oo34G!!#

c4=2FG	
 	



3

 !!#r   r   c                       fd}|S )Nc                 2     t                fd       }|S )Nc                   t         j                  j                         s | fd|i|S t        j                         }t        j
                  t        |f      }|j                           | fd|i|}|j                          |j                          t         j                  j                  dt        z          t         j                  j                          |S )NrC   )targetr7   )r   r   isatty	threadingEventThreadr   startsetr   r   r   r   )r7   rC   r8   r   spinner_threadrE   rF   r   s         r   rG   z,with_spinner.<locals>.wrapper.<locals>.new_f   s    ::$$&131&11$??,L&--",)<N   "t///F!JJT$889JJMr   r   )rF   rG   r   s   ` r   rH   zwith_spinner.<locals>.wrapper   s     	q	 
	* r   r5   )r   rH   s   ` r   with_spinnerr      s    2 Nr   c                    | dk(  r8t         j                  j                  | z   t         j                  j                  z   S | dk(  r8t         j                  j                  | z   t         j                  j                  z   S | dk(  r8t         j                  j
                  | z   t         j                  j                  z   S | dk(  r8t         j                  j                  | z   t         j                  j                  z   S | S )Nlowmediumhighcritical)r   TxtColorINFOBLUEENDCWARNINGYELLOWORANGEFAIL)prioritys    r   colorize_priorityr     s    5  ))H4x7H7H7M7MMM	X	++h69J9J9O9OO	
 
V	  ''(2X5F5F5K5KKK	Z	  %%083D3D3I3IIIr   r   )r[   )4r   rs   r   r   r   	functoolsr   typingr   uaclientr   r   r   r	   r
   r   r   r   r   r   'uaclient.api.u.pro.security.fix._commonr   (uaclient.api.u.pro.status.is_attached.v1r   uaclient.aptr   r   uaclient.configr   uaclient.filesr   get_event_loggerr'   r   AbstractProgressr   r9   r2   r<   rI   rO   rV   rb   rl   rv   r   r   r4   r   r   r   r   r5   r   r   <module>r      s     	 
       E A 7 $ (%%%'   5s33 50	 
 2$
8 d (	  }	
 
0hsm :r   