Ë
    GKÕiQ   ã            
       ó–  — 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ó %ð	(ð ð	(ð ð		(ð
  (¨™}ð	(ð ' s™mó	(ð5˜sô 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?   ø€ ä—‘¨KÀAÔFñ 5Ù˜DÐ4 cÐ4¨VÑ4�÷5àˆM÷5àˆMús   ™.®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"   ø€ ô ˆ1ƒXó&ó ð&ð €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"   ø€ ô ˆ1ƒXó0ó ð0ð €Lr   c                 ó   ‡ — ˆ fd„}|S )z“Decorator 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Ù.Ü% d¨I°rÓ:�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×;Ñ;¸FÀBÓGôð ñ �Ñ)˜3Ð) &Ñ)Ð)r   r   rN   s   ` r   Úassert_not_attachedrl   ‰   s"   ø€ ô ˆ1ƒXó*ó ð*ð €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Ü—8‘8Ô,¨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¬«      ‚)z£Raises 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ØØ ŸI™IÐ&<Ó=Øô	
ð 	
ñ 
Ü×5Ñ5ØŸ)™)Ð$6Ó7À7ô
ð 	
ô ×7Ñ7ØØ ŸI™IÐ&<Ó=Øô
ð 	
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Ñ4€MáÜ�
‰
Ü×(Ñ(×/Ñ/¸mÐ/ÓLõ	
ô 	�
‰
”8×;Ñ;Ô<ä
‡K�K„MÜ
‡N�N�3ÔäŸ™ sÓ+Ñ€K�Ü×"Ñ" ;Ó/€FÜ	‡J�JŒt×-Ñ-¨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                  «       s¡t        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ƒ   € Ü�o‰oÒ3Ó4€GØ×!Ñ!Ô#Ü�
‰
×ÑØ×Ñ˜c¤4¨£=Ô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µ   ø€ ä—:‘:×$Ñ$Ô&Ù˜Ñ1 3Ð1¨&Ñ1Ð1ä$Ÿ?™?Ó,ˆLä&×-Ñ-Ü"¨,¸Ð)<ôˆNð × Ñ Ô"á�tÑ/ Ð/¨Ñ/ˆFà×ÑÔØ×ÑÔ!ä�J‰J×Ñ˜TÔ$8Ñ8Ô9Ü�J‰J×ÑÔàˆ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Ñ4´x×7HÑ7H×7MÑ7MÑMÐMØ	�XÒ	ä×Ñ×+Ñ+¨hÑ6¼×9JÑ9J×9OÑ9OÑOð	
ð 
�VÒ	Ü× Ñ ×'Ñ'¨(Ñ2´X×5FÑ5F×5KÑ5KÑKÐKØ	�ZÒ	Ü× Ñ ×%Ñ%¨Ñ0´8×3DÑ3D×3IÑ3IÑ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Ý $Ý (à%ˆ×%Ñ%Ó'€ð  Ð ô5˜s×3Ñ3ô 5ò0	ð¸ó óò
òó ò2òò$
ð8˜ð  dó ð(Ø	ðàðð ðð ˜‰}ð	ð
 
óò0ñ�h˜s‘mó ó:r   