o
    Jh                     @   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!rtd|j! |j"rtd|j" td tdd#t$j%|j&tj'ddddd |j(rt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    	 
