
    n                     z   S r SSKJr  SSKJr  SSKJr  SSKrSSKJr  SSK	J
r
  SSK	Jr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SR'                  \R(                  5      r\R,                  " \R.                  R0                  5      \R2                   " S S\R4                  5      5       5       r " S S\5      rg)zFImplements the command to list vulnerabilities from Artifact Registry.    )absolute_import)division)unicode_literalsN)
exceptions)GetLatestScan)GetVulnerabilities)base)docker_util)endpoint_util)flags)format_utilaA       table[box, title="%TITLE%"](
      occurrence.vulnerability.shortDescription:label=CVE,
      occurrence.vulnerability.effectiveSeverity:label=EFFECTIVE_SEVERITY,
      occurrence.vulnerability.cvssScore:label=CVSS:sort=-1:reverse,
      occurrence.vulnerability.packageIssue.fixAvailable:label=FIX_AVAILABLE,
      occurrence.vulnerability.vexAssessment.state:label=VEX_STATUS,
      occurrence.vulnerability.packageIssue.affectedPackage:sort=3:label=PACKAGE,
      occurrence.vulnerability.packageIssue.packageType:label=PACKAGE_TYPE,
      vexScope,
      {}
    )
    c                   D    \ rS rSrSrSSS.r\S 5       rS rS r	S	 r
S
rg)List/   zMCommand for listing vulnerabilities. To see all fields, use --format=json.
  z{description}z        To list vulnerabilities for an artifact, run:

          $ {command} us-east1-docker.pkg.dev/project123/repository123/someimage@sha256:49765698074d6d7baa82f
      )DESCRIPTIONEXAMPLESc                    [         R                  " 5       R                  U 5        [         R                  " 5       R                  U 5        [         R                  " 5       R                  U 5        U R
                  R                  S/5        g )Nz%occurrence.vulnerability.packageIssue)r   GetListURIArgAddToParserGetOptionalAALocationFlag&GetVulnerabilitiesOccurrenceFilterFlagdisplay_info
AddFlatten)parsers    -lib/surface/artifacts/vulnerabilities/list.pyArgs	List.Args>   sb    	%%f-	##%11&9	002>>vF
""$K#LM
    c                    UR                   nUR                  nU R                  UR                  5      u  pE[        R
                  " U5         Ub  SR                  XR5      n[        XT5      n[        XTU5      nS S S 5        U R                  UW5        [        W5      n/ n[        U5      S:  a  0 $ U H  n	Sn
U	R                  (       a  U	R                  R                  (       ar  U	R                  R                  R                  (       aM  U	R                  R                  R                  R                  S5      nUS   R!                  S5      (       a  Sn
OSn
UR#                  [%        X5      5        M     U$ ! , (       d  f       GN= f)	Nz{}/locations/{}    /zimage-IMAGEDIGEST)locationoccurrence_filterreplaceTagsURIr   
WithRegionformatr   r   setTitlelistlenvulnerabilityvexAssessmentnoteNamesplit
startswithappendVulnerabilityEntry)selfargsr&   r'   resourceprojectlatest_scanoccurrencesresultsocc	vex_scopetokenss               r   RunList.RunF   s>   }}H..((2H		!	!(	+		#**7=!'4k&w:KLk	 
,
 	MM$${#KG
;!ii


----66""0099??D":  **))nn'78  N/ 
,	+s   ,E55
Fc           
      z   UnUR                  S5      (       d  SR                  U5      n[        R                  " [        R
                  U5      nU(       GaA  US   S   nSUS   S   ;   nU(       a  [        R                  " U5      u  n  n[        R                  " U5      u  pxU(       a  [        R                  " UR                  R                  UR                  5       R                  UR                  R                  5       SR                  UR                  R                  UR                  R                  5      5      5      nUR                  n	SR                  UR                  5       5      n
[        R                  " [        R
                  U
US5      nX)4$ [        R                   " SR                  U5      5      e)Nzhttps://z
https://{}r   zgcr.ior    z{}/{}zReceived invalid URI {})r3   r+   refindallr
   DOCKER_URI_REGEXConvertGCRImageStringDockerUrlToVersionGcrDockerVersiondocker_repor9   GetDockerStringreplacereposubar_exceptionsInvalidInputValueError)r6   original_uriupdated_urifoundresource_uri_stris_gcr_imageversionr9   docker_html_str_digests              r   r(   List.replaceTagsc   sz   K!!*-- ''4kJJ{33[AEq!58A;&f	!,!B!B"
!Q #556FGne	..%%##%--!!113%%**%%--	
 g+2273J3J3LMFF

&
&
 

	k !!

.
.!((6 r   c                 "   SnU(       a$  UR                   b  UR                   R                  c  SnO*UR                   R                  S S nSR                  U5      n[        R	                  SU5      nUR                  5       R                  U5        g )Nr!   zScan status unknownizLatest scan was at {}z%TITLE%)	discoverylastScanTimer+   DEFAULT_LIST_FORMATrK   GetDisplayInfo	AddFormat)r6   r7   r:   titlelast_scan_timelist_formats         r   r,   List.setTitle   s~    E  (  --5#e",,99$3?n%,,^<e%--i?K##K0r    N)__name__
__module____qualname____firstlineno____doc__detailed_helpstaticmethodr   r@   r(   r,   __static_attributes__rd   r   r   r   r   /   s<     %
-  :#J1r   r   c                   >    \ rS rSrSrS r\S 5       r\S 5       rSr	g)r5      zHolder for an entry of vulnerability list results.

Properties:
  occurrence: Vulnerability occurrence.
  vex_scope: Scope of the VEX statement.
c                     Xl         X l        g N_occurrence
_vex_scope)r6   
occurrencer>   s      r   __init__VulnerabilityEntry.__init__   s    !Or   c                     U R                   $ rp   )rr   r6   s    r   rt   VulnerabilityEntry.occurrence   s    r   c                     U R                   $ rp   )rs   rx   s    r   r>   VulnerabilityEntry.vex_scope   s    ??r   rq   N)
re   rf   rg   rh   ri   ru   propertyrt   r>   rl   rd   r   r   r5   r5      s4         r   r5   )ri   
__future__r   r   r   rC    googlecloudsdk.api_lib.artifactsr   rN   0googlecloudsdk.api_lib.artifacts.vulnerabilitiesr   r   googlecloudsdk.callioper	   $googlecloudsdk.command_lib.artifactsr
   r   r   r   r+   "CONTAINER_ANALYSIS_METADATA_FORMATr]   ReleaseTracksReleaseTrackGADefaultUniverseOnlyListCommandr   objectr5   rd   r   r   <module>r      s    M &  ' 	 H J O ( < > 6 < 	{==>  D%%(()c14 c1  *c1L r   