U
    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ddddgZejej ded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   s2   zt t |d}W n tjk
r,   d }Y nX |S )N)Z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 ]h}||i  }t|D ]J}| j|}|r,|jD ].}	|	j|krF|t	||	j
|	j|	jd  q,qFq,q|S )N)r   r   r   r   )r   Zrelated_packagesgetkeyssortedZpackagescvesr   appendr   r   r   r   )
cve_vulnerabilitiescve_infocve_namerowsZinstalled_pkgs_by_sourceZ
source_pkgZbinary_pkgsZ
binary_pkgZbinary_pkg_infocver    r    r!   _get_affected_pkgs    s&    



r-   c                 C   s`   g }| D ]R}|j dkr>|d|j|j d|j|jg q|d|j|j ddg q|S )NZfixedz{}:z({}) )r   r'   formatr   r   r   )Zaffected_pkgsZformatted_rowsZaffected_pkgr    r    r!   _format_affected_pkgs:   s$    


	
	r0   c                K   sr  | j  }t| |d}|s"t ||jkrt| di di |}|st	 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"rt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+rnd$d% |j+D }|rntd& |D ]}t| q^d S )'Nr   Zsecurity_issuesr&   z{}/{})ZissuereleaseZurl)filedescriptionpublished_atZubuntu_prioritynotes
cvss_scorecvss_severity)r3   r4   priorityr5   r6   r7   related_usnsr.   )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  )widthZbreak_long_wordsZbreak_on_hyphensZinitial_indentZsubsequent_indentznotes:z  - z    zaffected_packages:zaffected_packages: []c                 S   s"   g | ]}|j rd |j|j qS )z  {}: {})titler/   r   ).0Zusnr    r    r!   
<listcomp>   s   zaction_cve.<locals>.<listcomp>zrelated_usns:),r,   upperr"   r   r   r&   r   r#   r   Zget_release_infor1   printr   ZCLI_CVE_NOT_FOUND_IN_DATAr/   r   ZBASE_SECURITY_URLsysstderrr	   r   Zparse_rfc3339_dater0   r-   r   Z	to_stringr4   strftimeZvulnerability_data_published_atZapt_updated_atr   Zcolorize_priorityr8   r6   r7   jointextwrapZwrapr3   ZPRINT_WRAP_WIDTHr5   Zfill
splitlinesr9   )r   r   r   r*   r(   Zcve_datar1   r)   Zaffected_pkgs_tableZaffected_pkgs_rowsZnoteliner9   Zrelated_usnr    r    r!   
action_cveT   s    

  
	




rH   r,   T)help)Z	arguments)rI   r3   actionZhelp_categoryZpreserve_descriptionZargument_groups)*rA   rE   collectionsr   Zuaclientr   r   r   r   r   Z+uaclient.api.u.pro.security.cves._common.v1r   Z#uaclient.api.u.pro.security.cves.v1r	   r
   r   Z'uaclient.api.u.pro.security.fix._commonr   Zuaclient.clir   Zuaclient.cli.commandsr   r   r   Zuaclient.cli.formatterr   Zuaclient.cli.parserr   Zuaclient.configr   r   Zwith_spinnerZCLI_CVES_SPINNER_MSGr"   r-   r0   rH   ZCLI_CVEZCLI_CVE_DESCZSECURITYZCLI_CVE_ISSUEZcve_commandr    r    r    r!   <module>   sJ    
	 