
    gjX                     t   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!dS )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     d/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/google/auth/compute_engine/_mtls.py_get_mds_root_crt_pathr   ,   s'    	w"""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'    	w"""14III)L88r   c                   T    e Zd ZU  ee          Zeed<    ee          Z	eed<   dS )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   :   sm         .  L$    ',e:' ' 't     r   r   mds_mtls_configc                     t           j                            | j                  o#t           j                            | j                  S )z&Checks if the mTLS certificates exist.)r   pathexistsr   r   )r"   s    r   _certs_existr&   D   s8    7>>/677 BGNN1= = r   c                       e Zd ZdZdZdZdZdS )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GGGr   r(   c                      t           j                            t          j        d                                          } 	 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   sj    z~~.EvNNTTVVH
8$$$ 
 
 
f
 
 	

s   A A'c                     t                      }|t          j        k    r%t          |           st	          j        d          dS |t          j        k    rdS 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;   c   sk    D{!!!O,, 	2=   t	!	!	!uO,,,r   c                   Z     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                    t          t          |           j	        |i | d S )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__u   s     577..o6R.SSS(($> 	) 	
 	
 	
 	-nd##,d=f=====r   c                 X    | j         |d<    t          t          |           j        |i |S NrC   )rC   rF   r=   init_poolmanagerrH   rI   rJ   rK   s      r   rN   zMdsMtlsAdapter.init_poolmanager   s2     $ 0};u^T**;TLVLLLr   c                 X    | j         |d<    t          t          |           j        |i |S rM   )rC   rF   r=   proxy_manager_forrO   s      r   rQ   z MdsMtlsAdapter.proxy_manager_for   s2     $ 0}<u^T**<dMfMMMr   c                 R   t                      t          j        k    r! t          t          |           j        |fi |S 	  t          t          |           j        |fi |}|                                 |S # t          j        t          j
        j        t          j
        j        f$ r}t                              d|           t          |j                  }t!          |                    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   sB    22235..3GFFvFFF	87u^T227JJ6JJH%%'''OL()
 	8 	8 	8
 OO<   #+7;"7"7 *+>+G+Gv+G+V+V W W+GK '==L$<$W7777777777#	8s    6A7 70D&'A4D!D&!D&)
r   r   r    r,   r   rG   rN   rQ   rU   __classcell__)rK   s   @r   r=   r=   r   s        AA 0=}> >,> > > > > >M M M M MN N N N N8 8 8 8 8 8 8 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 4 4 4 4 4 4 4 '
H
%
% 
 &*T*O%P%P "!T"899 7 7 79 9 9        -    
 
 
 
 
$) 
 
 

 
 
 :G - - - - - -08 08 08 08 08[ 08 08 08 08 08r   