
    8                         d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlZddlZddlm	Z	 ddl
mZ dd	lmZ  e	j                  d
d      Z G d de      ZddZd Zd Zd Z G d de      Zd Zy)zDLibrary for the Secret Manager integration in the local environment.    )absolute_import)division)print_function)unicode_literalsN)apis)
kubernetes)secrets_mappingsecretmanagerv1c                   *    e Zd ZdZddZd Zd Zd Zy)SecretManagerSecretz+A secret to be fetched from Secret Manager.Nc                 .    || _         || _        || _        y Nnameversionsmapped_secret)selfr   r   r   s       .lib/googlecloudsdk/command_lib/code/secrets.py__init__zSecretManagerSecret.__init__"   s    DIDM&D    c                     | j                   |j                   k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S r   r   )r   others     r   __eq__zSecretManagerSecret.__eq__'   sD    II# 6(G 6%"5"557r   c                 d    dj                  | j                  | j                  | j                        S )Nz6<Secret: (name="{}", versions={}, mapped_secret="{}")>)formatr   r   r   r   s    r   __repr__zSecretManagerSecret.__repr__+   s*    CJJ		4==$"4"46 6r   c                 Z    t        | j                  | j                  | j                  f      S r   )hashr   r   r   r   s    r   __hash__zSecretManagerSecret.__hash__/   s"    DMM4+=+=>??r   r   )__name__
__module____qualname____doc__r   r   r   r!    r   r   r   r      s    3'
76@r   r   c                     |
t               }g }|D ]?  }|j                  t        || |j                  |j                  |j
                  |             A |S )zGFetch secrets from Secret Manager and create k8s secrets with the data.)_SecretsClientappend_BuildSecretr   r   r   )project_namesecret_list	namespaceclientsecretssecrets         r   BuildSecretsr1   3   sT    ^F'fNNV\6;;8L8L__i	12  
.r   c                     t         j                  j                  |v rt        d      i }|D ]  }| j	                  ||||      ||<    t        |||      S )zDBuild the k8s secret resource for minikube from Secret Manager data.zSlocal development requires you to specify all secret versions that you need to use.)r	   SpecialVersion	MOUNT_ALL
ValueErrorGetSecretData_BuildK8sSecret)r.   projectsecret_namer   r   r-   r/   versions           r   r*   r*   ?   sh     ##--9
 6 7 7'g++G[-,35GG  
gy	99r   c                     i }|j                         D ]@  \  }}t        j                  |j                  j                        j                  d      ||<   B d| i}|r||d<   ||d}d|d<   d|d<   |S )	z8Turn a map of SecretManager responses into a k8s secret.asciir   r-   )metadatadatar   
apiVersionSecretkind)itemsbase64	b64encodepayloadr>   decode)r9   r/   r-   r>   r:   r0   r=   ds           r   r7   r7   M   s|    	$ ogv$$V^^%8%89@@IDM )k"(%H[T*!!L/!F)	
(r   c                 b    t        j                  dt        | j                               ||       y )Nr0   )r   DeleteResourceslistkeys)
secret_mapr-   context_names      r   _DeleteSecretsrN   [   s%    XtJOO,='>	)+r   c                       e Zd ZdZd Zd Zy)r(   zBClient implementation for calling Secret Manager to fetch secrets.c                 :    t        j                  dd      | _        y )Nr
   r   )r   GetClientInstancesecrets_clientr   s    r   r   z_SecretsClient.__init__c   s    00$GDr   c                    |r8|j                  d      rdj                  ||      }n'dj                  |||      }ndj                  |||      }| j                  j                  j	                  t
        j                  |            S )z$Retrieve secret from secret manager.z	projects/z{}/versions/{}z"projects/{}/secrets/{}/versions/{}r   )
startswithr   rR   projects_secrets_versionsAccessSECRETS_MESSAGE_MODULE1SecretmanagerProjectsSecretsVersionsAccessRequest)r   r8   r9   r   r:   resource_names         r   r6   z_SecretsClient.GetSecretDataf   s    		!	!+	.(//wG =CC]G- ;AA
;)m88??	:	:	:	NP Pr   N)r"   r#   r$   r%   r   r6   r&   r   r   r(   r(   `   s    JHPr   r(   c                 .    t        j                  d|       S )Nz'[a-z0-9]([a-z0-9\-\.]{0,251}[a-z0-9])?$)rematchrT   s    r   IsValidK8sNamer^   x   s     
<d	CCr   r   )r%   
__future__r   r   r   r   rC   r\   googlecloudsdk.api_lib.utilr   googlecloudsdk.command_lib.coder   googlecloudsdk.command_lib.runr	   GetMessagesModulerX   objectr   r1   r*   r7   rN   r(   r^   r&   r   r   <module>re      sq    K &  % '  	 , 6 :///F @& @(	:+
PV P0Dr   