
    kCii                     \   S r SSKJrJr  SSKrSSKrSSKrSSKJr  SSK	r	SSK
JrJr  SSKrSSKJr  SSKJrJr  \R&                  " \5      rSr\" S	5      r\" S
5      rS rS r\ " S S5      5       rS\4S jr " S S\R:                  5      rS r\" 5       4S\4S jjr  " S S\5      r!g)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                  V    [         R                  [        :X  a	  [        S-  $ [        S-  $ )Nzmds-mtls-root.crtzroot.crtosname_WINDOWS_OS_NAME"_WINDOWS_MTLS_COMPONENTS_BASE_PATH_MTLS_COMPONENTS_BASE_PATH     \/var/www/html/land-ocr/venv/lib/python3.13/site-packages/google/auth/compute_engine/_mtls.py_get_mds_root_crt_pathr   ,   s&    	ww""14GGG)J66r   c                  V    [         R                  [        :X  a	  [        S-  $ [        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                   B    \ rS rSr% \" \S9r\\S'   \" \	S9r
\\S'   Srg)MdsMtlsConfig:   )default_factoryca_cert_pathclient_combined_cert_pathr   N)__name__
__module____qualname____firstlineno__r   r   r   r   __annotations__r   r   __static_attributes__r   r   r   r   r   :   s-    .L$  ',:'t r   r   mds_mtls_configc                     [         R                  R                  U R                  5      =(       a)    [         R                  R                  U R                  5      $ )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                   $    \ rS rSrSrSrSrSrSrg)MdsMtlsModeK   a7  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defaultr   N)	r   r    r!   r"   __doc__STRICTNONEDEFAULTr$   r   r   r   r+   r+   K   s     FDGr   r+   c                      [         R                  R                  [        R                  S5      R                  5       n  [        U 5      $ ! [         a    [        S5      ef = f)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_moder;   X   sX    zz~~//eg 
8$$ 
f
 	

s   
A	 	Ac                     [        5       nU[        R                  :X  a'  [        U 5      (       d  [        R
                  " S5      egU[        R                  :X  a  g[        U 5      $ )z:Determines if mTLS should be used for the metadata server.z+mTLS certificates not found in strict mode.TF)r;   r+   r1   r)   r
   MutualTLSChannelErrorr2   )r%   modes     r   should_use_mds_mtlsr?   e   sZ    D{!!!O,,22=  	!!	!O,,r   c                   h   ^  \ rS rSrSr\" 5       4S\4U 4S jjjrU 4S jrU 4S jrU 4S jr	Sr
U =r$ )	MdsMtlsAdaptert   z7An HTTP adapter that uses mTLS for the metadata server.r%   c                    > [         R                  " 5       U l        U R                  R                  UR                  S9  U R                  R                  UR                  S9  [        [        U ]&  " U0 UD6  g )N)cafile)certfile)
sslcreate_default_contextssl_contextload_verify_locationsr   load_cert_chainr   superrA   __init__)selfr%   argskwargs	__class__s       r   rL   MdsMtlsAdapter.__init__w   sk     557..o6R6R.S(($>> 	) 	
 	nd,d=f=r   c                 J   > U R                   US'   [        [        U ]  " U0 UD6$ NrH   )rH   rK   rA   init_poolmanagerrM   rN   rO   rP   s      r   rT   MdsMtlsAdapter.init_poolmanager   s*     $ 0 0}^T;TLVLLr   c                 J   > U R                   US'   [        [        U ]  " U0 UD6$ rS   )rH   rK   rA   proxy_manager_forrU   s      r   rX    MdsMtlsAdapter.proxy_manager_for   s*     $ 0 0}^T<dMfMMr   c                 *  > [        5       [        R                  :X  a  [        [        U ]  " U40 UD6$  [        [        U ]  " U40 UD6nUR                  5         U$ ! [        R                  [        R                  R                  [        R                  R                  4 ap  n[        R                  SU5        [        UR                  5      n[!        UR#                  SS95      nXal        [%        5       nUR
                  " U40 UD6s S nA$ S nAff = f)NzcmTLS connection to Compute Engine Metadata server failed. Falling back to standard HTTP. Reason: %shttp)scheme)r;   r+   r1   rK   rA   sendraise_for_statusrF   SSLErrorrequestsr
   	HTTPError_LOGGERwarningr   urlr   _replacer   )	rM   requestrO   responseeparsed_original_urlhttp_fallback_urlhttp_adapterrP   s	           r   r]   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+K '=L$$W777#	8s   &A AD"A%DDD)rH   )r   r    r!   r"   r0   r   rL   rT   rX   r]   r$   __classcell__)rP   s   @r   rA   rA   t   s5    A 0=>,> >MN8 8r   rA   )"r0   dataclassesr   r   enumloggingr   pathlibr   rF   urllib.parser   r   r`   requests.adaptersr   google.authr	   r
   	getLoggerr   rb   r   r   r   r   r   r   r)   Enumr+   r;   r?   rA   r   r   r   <module>rw      s   " < (   	  
 -  ) 4 

H
% 
 &**O%P "!"89 79   - 
$)) 


 :G - -08[ 08r   