o
    ÙKÕië  ã                   @   s  d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	 d dl
mZ d dlmZmZmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZ d dlmZ edg d¢ƒZejej d�defdd„ƒZ!dd„ Z"dd„ Z#dd„ Z$edej%ej&e$ej'deedej(d�gd�gd�Z)dS )é    N)Ú
namedtuple)ÚdefaultsÚ
exceptionsÚmessagesÚsystemÚutil)ÚVulnerabilityData)ÚCVEInfoÚCVEsOptionsÚ_cves)Ú#query_installed_source_pkg_versions)Úcli_util)ÚProArgumentÚProArgumentGroupÚ
ProCommand)ÚTable)ÚHelpCategory)ÚUAConfigÚAffectedPackage©ÚnameÚ
fix_statusÚ
fix_originÚfix_version)ÚmsgÚcfgc                K   s0   z
t tƒ |d�}W |S  tjy   d }Y |S w )N)Úoptionsr   )r   r
   r   ÚVulnerabilityDataNotFound)Úargsr   ÚkwargsÚresult© r!   ú2/usr/lib/python3/dist-packages/uaclient/cli/cve.pyÚ_get_cve_vulnerabilities   s   ýýr#   c           
      C   s~   g }t ƒ }|jD ]4}| |i ¡ ¡ }t|ƒD ]%}| j |¡}|r;|jD ]}	|	j|kr:| t	||	j
|	j|	jd�¡  nq#qq|S )Nr   )r   Úrelated_packagesÚgetÚkeysÚsortedÚpackagesÚcvesr   Úappendr   r   r   r   )
Úcve_vulnerabilitiesÚcve_infoÚcve_nameÚrowsÚinstalled_pkgs_by_sourceÚ
source_pkgÚbinary_pkgsÚ
binary_pkgÚbinary_pkg_infoÚcver!   r!   r"   Ú_get_affected_pkgs    s,   


üÿ÷€ûr5   c                 C   s`   g }| D ])}|j dkr| d |j¡|j d |j¡|jg¡ q| d |j¡|j ddg¡ q|S )NÚfixedz{}:z({})Ú )r   r*   Úformatr   r   r   )Úaffected_pkgsÚformatted_rowsÚaffected_pkgr!   r!   r"   Ú_format_affected_pkgs:   s$   


üÿ	
üÿ	r<   c                K   sr  | j  ¡ }t| |d�}|st ¡ ‚||jvrat|ƒ ¡  di ¡ di ¡ |¡}|sDt 	¡ j
}ttjj| j |d tj|¡d�tjd� d S t|d t |d ¡|d	 |d
 |d |d g d�}d}n|j| }tt||| j ƒƒ}	t|	d� ¡ }td |¡ƒ td tj|¡ƒ td |j d¡¡ƒ td |j d¡¡ƒ td |j d¡¡ƒ td t |j ¡¡ƒ |j!r½td |j!¡ƒ |j"rÈtd |j"¡ƒ tdƒ td d #t$j%|j&tj'ddddd�¡¡ƒ |j(rütdƒ |j(D ]}
tt$j)|
tj'ddd d!d�ƒ që|�rtd"ƒ | *¡ D ]	}td| ƒ �qntd#ƒ |j+�r3d$d%„ |j+D ƒ}|�r5td&ƒ |D ]}t|ƒ �q+d S d S d S )'N)r   Úsecurity_issuesr)   z{}/{})ÚissueÚreleaseÚurl)ÚfileÚdescriptionÚpublished_atÚubuntu_priorityÚnotesÚ
cvss_scoreÚcvss_severity)rB   rC   ÚpriorityrE   rF   rG   Úrelated_usnsr7   )r.   zname:            {}zpublic-url:      {}/{}zpublished-at:    {}z%Y-%m-%dzcve-cache-date:  {}zapt-cache-date:  {}zpriority:        {}zcvss-score:      {}zcvss-severity:   {}zdescription: |z{}Ú
Fz  )ÚwidthÚbreak_long_wordsÚbreak_on_hyphensÚinitial_indentÚsubsequent_indentznotes:z  - z    zaffected_packages:zaffected_packages: []c                 S   s"   g | ]}|j rd  |j|j ¡‘qS )z  {}: {})Útitler8   r   )Ú.0Úusnr!   r!   r"   Ú
<listcomp>É   s    ýÿzaction_cve.<locals>.<listcomp>zrelated_usns:),r4   Úupperr#   r   r   r)   r   r%   r   Úget_release_infor?   Úprintr   ÚCLI_CVE_NOT_FOUND_IN_DATAr8   r   ÚBASE_SECURITY_URLÚsysÚstderrr	   r   Úparse_rfc3339_dater<   r5   r   Ú	to_stringrC   ÚstrftimeÚvulnerability_data_published_atÚapt_updated_atr   Úcolorize_priorityrH   rF   rG   ÚjoinÚtextwrapÚwraprB   ÚPRINT_WRAP_WIDTHrE   ÚfillÚ
splitlinesrI   )r   r   r   r-   r+   Úcve_datar?   r,   Úaffected_pkgs_tableÚaffected_pkgs_rowsÚnoteÚlinerI   Úrelated_usnr!   r!   r"   Ú
action_cveT   sà   

û
ýúù	
ÿÿ
ÿÿÿÿÿ
ÿÿ
ÿÿúÿÿÿ
úÿÿþörm   r4   T)Úhelp)Ú	arguments)rn   rB   ÚactionÚhelp_categoryÚpreserve_descriptionÚargument_groups)*rY   rb   Úcollectionsr   Úuaclientr   r   r   r   r   Ú+uaclient.api.u.pro.security.cves._common.v1r   Ú#uaclient.api.u.pro.security.cves.v1r	   r
   r   Ú'uaclient.api.u.pro.security.fix._commonr   Úuaclient.clir   Úuaclient.cli.commandsr   r   r   Úuaclient.cli.formatterr   Úuaclient.cli.parserr   Úuaclient.configr   r   Úwith_spinnerÚCLI_CVES_SPINNER_MSGr#   r5   r<   rm   ÚCLI_CVEÚCLI_CVE_DESCÚSECURITYÚCLI_CVE_ISSUEÚcve_commandr!   r!   r!   r"   Ú<module>   sJ    ÿ	 þÿÿÿ
ù