
    J%                     J   S 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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  \R0                  \R2                  " \R4                  R6                  5       " S S\R8                  5      5       5       rg)zCImplements the command to upload Generic artifacts to a repository.    )absolute_import)division)unicode_literals)
exceptions)
list_pager)apis)base)docker_util)endpoint_util)flags)requests)vex_util)
propertiesc                   ^    \ rS rSrSrSSS.rSrSr\S 5       r	S r
S	 rS
 rS rS rS rSrg)LoadVex"   a  Load VEX data from a CSAF file into Artifact Analysis.

Command loads VEX data from a Common Security Advisory Framework (CSAF) file
into Artifact Analysis as VulnerabilityAssessment Notes. VEX data tells
Artifact Analysis whether vulnerabilities are relevant and how.
z{description}a         To load a CSAF security advisory file given an artifact in Artifact Registry and the file on disk, run:

        $ {command} --uri=us-east1-docker.pkg.dev/project123/repository123/someimage@sha256:49765698074d6d7baa82f --source=/path/to/vex/file

To load a CSAF security advisory file given an artifact with a tag and a file on disk, run:

        $ {command} --uri=us-east1-docker.pkg.dev/project123/repository123/someimage:latest --source=/path/to/vex/file
    )DESCRIPTIONEXAMPLESNc                     U R                  SSSS9  U R                  SSSS9  U R                  SSS	S9  [        R                  " 5       R                  U 5        g )
Nz--uriTa  The path of the artifact in Artifact Registry. A 'gcr.io' image can also be used if redirection is enabled in Artifact Registry. Make sure 'artifactregistry.projectsettings.get' permission is granted to the current gcloud user to verify the redirection status.)requiredhelpz--sourcezThe path of the VEX file.z	--projectFz2The parent project to load security advisory into.)add_argumentr   GetOptionalAALocationFlagAddToParser)parsers    1lib/surface/artifacts/vulnerabilities/load_vex.pyArgsLoadVex.Args;   sx    
	  
 (  
 A  
 
##%11&9
    c                 <   [         R                  " UR                  5         [        R                  " SS5      U l        U R
                  R                  U l        SSS5        UR                  n[        R                  " U5      n[        R                  " U5      (       aN  [        R                  " U5      u  p4UR                  5       nU(       a  UR                  5       OSnUR                  nO[        R                   " U5      (       a  [        R"                  " U5      u  pun[$        R&                  " 5       n[$        R(                  " U5      n	U	R*                  UR,                  R.                  R0                  :w  a  [2        R4                  " S5      eO%[2        R4                  " SR7                  U5      5      eUR                  =(       d    Un
UR8                  n[        R:                  " XU5      u  pU R=                  XXR                  5        g! , (       d  f       GN= f)z(Run the generic artifact upload command.containeranalysisv1NzyThis command only supports Artifact Registry. You can enable redirection to use gcr.io repositories in Artifact Registry.z%{} is not an Artifact Registry image.)r   
WithRegionlocationr   GetClientInstance	ca_clientMESSAGES_MODULEca_messagesurir   RemoveHTTPSr
   IsARDockerImageDockerUrlToImageGetDockerStringproject
IsGCRImageParseGCRUrlar_requestsGetMessagesGetProjectSettingslegacyRedirectionStateProjectSettings%LegacyRedirectionStateValueValuesEnumREDIRECTION_FROM_GCR_IO_ENABLEDar_exceptionsInvalidInputValueErrorformatsourceParseVexFile
writeNotes)selfargsr)   imageversion	image_uriversion_uriimage_projectmessagessettingsr.   filenamenotesgeneric_uris                 r   RunLoadVex.RunU   s   		!	!$--	0--.A4Hdn77d 
1 ((C


s
#C""3''"33C8ne'')i18G++-dkmmm				$	$.6.B.B3.G+m((*h//>h

)
)%%KKkkl 22L
 	
l 00
1
8
8
=  ll+mG{{H!..xKPEOOEK?
? 
1	0s   8H
Hc                    / n/ nU R                  X$5      nU H  nU R                  R                  SR                  XxR                  5      S9n	 U R
                  R                  R                  U	5        Sn
U
(       a  UR                  U5        Mw  UR                  U5        M     U R                  XRU5        U R                  XbU5        U R                  XX45        g ! [        R                   a    Sn
 N~f = f)N{}/notes/{}nameTF)parentr(   (ContaineranalysisProjectsNotesGetRequestr:   keyr&   projects_notesGetapitools_exceptionsHttpNotFoundErrorappendbatchWriteNotesupdateNotesdeleteNotes)r>   rH   r.   r)   r$   notes_to_createnotes_to_updaterP   noteget_requestnote_existss              r   r=   LoadVex.writeNotesx   s    OO[[+F$$MM##FHH5 N k%%))+6 
t$t$  	8<_x8
 	US3 !22 s   'CC43C4c                   ^
 S nU
4S jnU" [         R                  R                  R                  R	                  5       5      m
U" U5       H  nU(       d    g U R
                  R                  R                  5       nXgl        U R
                  R                  US9nU R
                  R                  U R                  X#5      US9n	U R                  R                  R                  U	5        M     g )Nc                      [        U 5      nUS:  d  US:  a  [        R                  " S5      eU$ ! [         a    [        R                  " S5      ef = f)Nz.max_notes_per_batch_request must be an integer   i  z6max_notes_per_batch_request must be between 1 and 1000)int
ValueErrorr8   r9   )note_limit_strmax_notes_per_batch_requests     r   $validate_max_notes_per_batch_requestELoadVex.batchWriteNotes.<locals>.validate_max_notes_per_batch_request   si    
&).&9#
 
%q	(,G$,N22D
 	
 )(  
22<
 	

s	   1 !Ac              3      >#    / nU  H+  nUR                  U5        [        U5      T:X  d  M%  Uv   / nM-     U(       a  Uv   g g 7f)N)rW   len)rH   notes_chunkr]   rg   s      r   chunked(LoadVex.batchWriteNotes.<locals>.chunked   sL     k$4 {::
+	  
 
s
   &AA)rH   )rP   batchCreateNotesRequest)r   VALUES	artifactsrg   rT   r(   BatchCreateNotesRequest
NotesValueadditionalProperties0ContaineranalysisProjectsNotesBatchCreateRequestrP   r&   rS   BatchCreate)r>   rH   r.   r$   rh   rm   rl   
note_valuebatch_requestrequestrg   s             @r   rX   LoadVex.batchWriteNotes   s    )
 #G##??CCE# u~##;;FFHj(3%&&>> ? m 


K
K[[3&3 L   nn##//8 &r   c                    U(       d  g U R                  X#5      nU He  nU R                  R                  SR                  XER                  5      UR
                  S9nU R                  R                  R                  U5        Mg     g )NrM   )rO   r]   )	rP   r(   *ContaineranalysisProjectsNotesPatchRequestr:   rR   valuer&   rS   Patch)r>   rH   r.   r$   rP   r]   patch_requests          r   rY   LoadVex.updateNotes   sr    [[+F



E
E ''9:: F   nn##))-8 r   c                    U R                   R                  SR                  U5      U R                  X$5      S9n[        R
                  " U R                  R                  USSS9n[        5       nU Ho  nUR                  R                  R                  R                  n	UR                  R                  R                  R                  n
X:X  d  M^  UR                  U
5        Mq     U Hr  nUR                  R                  R                  nX;  d  M*  U R                   R!                  UR"                  S9nU R                  R                  R%                  U5        Mt     g )Nz1vulnerability_assessment.product.generic_uri="{}")filterrP   rH   pageSize)servicery   fieldbatch_size_attributerN   )r(   )ContaineranalysisProjectsNotesListRequestr:   rP   r   YieldFromListr&   rS   setr}   vulnerabilityAssessmentproduct
genericUri
assessmentvulnerabilityIdadd+ContaineranalysisProjectsNotesDeleteRequestrO   Delete)r>   
file_notesr.   r)   r$   list_requestdb_notescves_in_file	file_notefile_urifile_vulnerabilitydb_notedb_vulnerabilitydelete_requests                 r   rZ   LoadVex.deleteNotes   s0   ##MMBII#N{{7- N L ''--'	H 5L	88@@KKh
//
1
1
<
<
L
L  
+,   

)
)
4
4
D
D  
	-HH\\ I  	
 	%%,,^< r   c                 L    Ub  SR                  X5      $ SR                  U5      $ )Nzprojects/{}/locations/{}zprojects/{})r:   )r>   r.   r$   s      r   rP   LoadVex.parent   s*    '..wAA((r   )r&   r(   )__name__
__module____qualname____firstlineno____doc__detailed_helpr&   r(   staticmethodr   rJ   r=   rX   rY   rZ   rP   __static_attributes__ r   r   r   r   "   sW     %- )+ 2!F4249l9=B)r   r   N)r   
__future__r   r   r   apitools.base.pyr   rU   r    googlecloudsdk.api_lib.artifactsr8   googlecloudsdk.api_lib.utilr   googlecloudsdk.callioper	   $googlecloudsdk.command_lib.artifactsr
   r   r   r   r1   r   googlecloudsdk.corer   DefaultUniverseOnlyReleaseTracksReleaseTrackGACommandr   r   r   r   <module>r      s|    J &  ' > ' H , ( < > 6 H 9 * D%%(()T)dll T) * T)r   