
                         8   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  SSKJr  \R.                  " \R0                  R2                  5       " S S\R4                  5      5       rg)z)Activate a pending certificate authority.    )absolute_import)division)unicode_literals)base)request_utils)
exceptions)create_utils)flags)
operations)	pem_utils)resource_args)log)
console_io)filesc                   T   ^  \ rS rSrSrU 4S jr\S 5       rS rS r	S r
S rS	rU =r$ )
Activate#   a`  Activate a subordinate certificate authority awaiting user activation.

## EXAMPLES

To activate a subordinate CA named 'server-tls-1' in the location 'us-west1'

and CA Pool 'server-tls-pool' using a PEM certificate chain in 'chain.crt':

  $ {command} server-tls-1 \
    --location=us-west1 \
    --pool=server-tls-pool \
    --pem-chain=./chain.crt
c                    > [         [        U ]
  " U0 UD6  [        R                  " SS9U l        [        R                  " SS9U l        g )Nv1api_version)superr   __init__privateca_baseGetClientInstanceclientGetMessagesModulemessages)selfargskwargs	__class__s      .lib/surface/privateca/subordinates/activate.pyr   Activate.__init__3   s;    	(D"D3F3 22tDDK"44FDM    c                     [         R                  " U S5        [        R                  " SSSS9R	                  U 5        [
        R                  " U 5        g )Nzto activatez--pem-chainTzA file containing a list of PEM-encoded certificates, starting with the current CA certificate and ending with the root CA certificate.)requiredhelp)r   %AddCertAuthorityPositionalResourceArgr   ArgumentAddToParserr
   AddAutoEnableFlag)parsers    r#   ArgsActivate.Args8   sC    77NMM	 k&	F#r%   c                 L    [         R                  " U5      n[        R                  " U5      n[        U5      S:  a  [
        R                  " SS5      eUS   USS 4$ ! [         R                  [        [        4 a&    [
        R                  " SR                  U5      5      ef = f)a	  Parses a pem chain from a file, splitting the leaf cert and chain.

Args:
  pem_chain_file: file containing the pem_chain.

Raises:
  exceptions.InvalidArgumentException if not enough certificates are
  included.

Returns:
  A tuple with (leaf_cert, rest_of_chain)
z,Could not read provided PEM chain file '{}'.   z	pem-chainzpThe pem_chain must include at least two certificates - the subordinate CA certificate and an issuer certificate.r      N)r   ReadFileContentsErrorOSErrorIOErrorr   BadFileExceptionformatr   ValidateAndParsePemChainlenInvalidArgumentException)r   pem_chain_filepem_chain_inputcertss       r#   _ParsePemChainFromFileActivate._ParsePemChainFromFileF   s    ..~>o ..?E
5zA~//
C  8U12Y KK'* ''
8
?
?
O s   A AB#c                     U R                   R                  UU R                   R                  [        R                  " 5       S9S9nU R
                  R                  R                  U5      n[        R                  " USSS9$ )zEnables the given CA.)	requestId)name!enableCertificateAuthorityRequestzEnabling CA.r   r   )
r   DPrivatecaProjectsLocationsCaPoolsCertificateAuthoritiesEnableRequest!EnableCertificateAuthorityRequestr   GenerateRequestIdr   1projects_locations_caPools_certificateAuthoritiesEnabler   Await)r   ca_nameenable_request	operations       r#   _EnableCertificateAuthority$Activate._EnableCertificateAuthorityd   s|    ]]gg*.--*Y*Y#557 +Z +
 h N 	EELL	
 
 I~4HHr%   c                    UR                   (       a  gUR                  5       R                  5       nU R                  R                  R                  U R                  R                  US95      n[        R                  " UR                  U R                  5      (       a  g[        R                  " SR                  UR                  5       R                  5       5      SS9$ )z3Determines whether the CA should be enabled or not.T)parentFzThe CaPool [{}] has no enabled CAs and cannot issue any certificates until at least one CA is enabled. Would you like to also enable this CA?)messagedefault)auto_enableParentRelativeNamer   rH   Listr   BPrivatecaProjectsLocationsCaPoolsCertificateAuthoritiesListRequestr	   HasEnabledCacertificateAuthoritiesr   PromptContinuer8   Name)r   r    ca_refca_pool_namelist_responses        r#   _ShouldEnableCaActivate._ShouldEnableCas   s     ==?//1LKKQQVVXX 	Y 	
M
   ,,dmm   $$##)6&--/*>*>*@#A r%   c                    [         R                  " SS9n[         R                  " SS9nUR                  R                  R                  5       nU R                  UR                  5      u  pVUR                  R                  UR                  UR                  5       UR                  UUR                  UR                  US9S9S9S95      n[        R                   " USSS9  ["        R$                  R'                  SR)                  UR+                  5       5      5        U R-                  X5      (       a   U R/                  UR                  5       5        g g )	Nr   r   )pemCertificates)pemIssuerChain)pemCaCertificatesubordinateConfig)rC   #activateCertificateAuthorityRequestz!Activating Certificate Authority.z%Activated Certificate Authority [{}].)r   r   r   CONCEPTScertificate_authorityParser?   	pem_chainrH   r   FPrivatecaProjectsLocationsCaPoolsCertificateAuthoritiesActivateRequestrV   #ActivateCertificateAuthorityRequestSubordinateConfigSubordinateConfigChainr   rJ   r   statusPrintr8   r\   r`   rN   )r   r    r   r   r]   pem_certrk   rM   s           r#   RunActivate.Run   s7   --$?F//DAH]]00668F55dnnEHHHQQWW$$&080\0\!)"*"<"<#+#B#B(1 $C $ #= # 1] 1 	X 
	
I 6D JJ/66v{{}E D))
&&v':':'<= *r%   )r   r   )__name__
__module____qualname____firstlineno____doc__r   staticmethodr.   r?   rN   r`   rs   __static_attributes____classcell__)r"   s   @r#   r   r   #   s<    G
 $ $<I6> >r%   r   N)ry   
__future__r   r   r    googlecloudsdk.api_lib.privatecar   r   r   googlecloudsdk.callioper   $googlecloudsdk.command_lib.privatecar	   r
   r   r   r   googlecloudsdk.corer   googlecloudsdk.core.consoler   googlecloudsdk.core.utilr   ReleaseTracksReleaseTrackGASilentCommandr    r%   r#   <module>r      sr    0 &  ' C : ( . = 6 ; : > # 2 * D%%(()F>t!! F> *F>r%   