
    4P@ii                     V   d Z ddlmZmZ ddlZddlZddlZddlmZ ddl	Z	ddl
mZmZ ddlZddlmZ ddlmZmZ  ej&                  e      ZdZ ed	      Z ed
      Zd Zd Ze G d d             ZdefdZ G d dej:                        Zd Z e       fdefdZ  G d de      Z!y)z5Mutual TLS for Google Compute Engine metadata server.    )	dataclassfieldN)Path)urlparse
urlunparse)HTTPAdapter)environment_vars
exceptionsntz#C:/ProgramData/Google/ComputeEnginez/run/google-mds-mtlsc                  T    t         j                  t        k(  r	t        dz  S t        dz  S )Nzmds-mtls-root.crtzroot.crtosname_WINDOWS_OS_NAME"_WINDOWS_MTLS_COMPONENTS_BASE_PATH_MTLS_COMPONENTS_BASE_PATH     j/home/www/lebenam.kofcorporation.com/venv/lib/python3.12/site-packages/google/auth/compute_engine/_mtls.py_get_mds_root_crt_pathr   ,   s&    	ww""14GGG)J66r   c                  T    t         j                  t        k(  r	t        dz  S t        dz  S )Nzmds-mtls-client.keyz
client.keyr   r   r   r   "_get_mds_client_combined_cert_pathr   3   s&    	ww""14III)L88r   c                   F    e Zd ZU  ee      Zeed<    ee      Z	eed<   y)MdsMtlsConfig)default_factoryca_cert_pathclient_combined_cert_pathN)
__name__
__module____qualname__r   r   r   r   __annotations__r   r   r   r   r   r   r   :   s-    .L$  ',:'t r   r   mds_mtls_configc                     t         j                  j                  | j                        xr) t         j                  j                  | j                        S )z&Checks if the mTLS certificates exist.)r   pathexistsr   r   )r"   s    r   _certs_existr&   D   s:    77>>/667 BGGNN11= r   c                       e Zd ZdZdZdZdZy)MdsMtlsModeaG  MDS mTLS mode. Used to configure connection behavior when connecting to MDS.

    STRICT: Always use HTTPS/mTLS.  If certificates are not found locally, an error will be returned.
    NONE: Never use mTLS. Requests will use regular HTTP.
    DEFAULT: Use mTLS if certificates are found locally, otherwise use regular HTTP.
    strictnonedefaultN)r   r   r    __doc__STRICTNONEDEFAULTr   r   r   r(   r(   K   s     FDGr   r(   c                      t         j                  j                  t        j                  d      j                         } 	 t        |       S # t        $ r t        d      w xY w)z7Parses the GCE_METADATA_MTLS_MODE environment variable.r+   zXInvalid value for GCE_METADATA_MTLS_MODE. Must be one of 'strict', 'none', or 'default'.)r   environgetr	   GCE_METADATA_MTLS_MODElowerr(   
ValueError)mode_strs    r   _parse_mds_moder7   X   sX    zz~~//eg 
8$$ 
f
 	

s   
A	 	Ac                     t               }|t        j                  k(  r!t        |       st	        j
                  d      y|t        j                  k(  ryt        |       S )z:Determines if mTLS should be used for the metadata server.z+mTLS certificates not found in strict mode.TF)r7   r(   r-   r&   r
   MutualTLSChannelErrorr.   )r"   modes     r   should_use_mds_mtlsr;   e   sW    D{!!!O,22=  	!!	!O,,r   c                   T     e Zd ZdZ e       fdef fdZ fdZ fdZ fdZ xZ	S )MdsMtlsAdapterz7An HTTP adapter that uses mTLS for the metadata server.r"   c                     t        j                         | _        | j                  j                  |j                         | j                  j                  |j                         t        t        | &  |i | y )N)cafile)certfile)
sslcreate_default_contextssl_contextload_verify_locationsr   load_cert_chainr   superr=   __init__)selfr"   argskwargs	__class__s       r   rG   zMdsMtlsAdapter.__init__w   sk     557..o6R6R.S(($>> 	) 	
 	nd,d=f=r   c                 H    | j                   |d<   t        t        |   |i |S NrC   )rC   rF   r=   init_poolmanagerrH   rI   rJ   rK   s      r   rN   zMdsMtlsAdapter.init_poolmanager   s*     $ 0 0}^T;TLVLLr   c                 H    | j                   |d<   t        t        |   |i |S rM   )rC   rF   r=   proxy_manager_forrO   s      r   rQ   z MdsMtlsAdapter.proxy_manager_for   s*     $ 0 0}^T<dMfMMr   c                 *   t               t        j                  k(  rt        t        |   |fi |S 	 t        t        |   |fi |}|j                          |S # t        j                  t        j                  j                  t        j                  j                  f$ rt}t        j                  d|       t        |j                        }t!        |j#                  d            }||_        t%               } |j
                  |fi |cY d }~S d }~ww xY w)NzcmTLS connection to Compute Engine Metadata server failed. Falling back to standard HTTP. Reason: %shttp)scheme)r7   r(   r-   rF   r=   sendraise_for_statusrA   SSLErrorrequestsr
   	HTTPError_LOGGERwarningr   urlr   _replacer   )	rH   requestrJ   responseeparsed_original_urlhttp_fallback_urlhttp_adapterrK   s	           r   rU   zMdsMtlsAdapter.send   s     2 223GFvFF	8^T7J6JH%%'OLL(())
 	8
 OO< #+7;;"7 *+>+G+Gv+G+V W+GK '=L$<$$W777#	8s   %A ADA)DDD)
r   r   r    r,   r   rG   rN   rQ   rU   __classcell__)rK   s   @r   r=   r=   t   s0    A 0=>,>MN8 8r   r=   )"r,   dataclassesr   r   enumloggingr   pathlibr   rA   urllib.parser   r   rX   requests.adaptersr   google.authr	   r
   	getLoggerr   rZ   r   r   r   r   r   r   r&   Enumr(   r7   r;   r=   r   r   r   <module>rn      s   " < (   	  
 -  ) 4 '

H
% 
 &**O%P "!"89 79   - 
$)) 


 :G - -08[ 08r   