Ë
    ùmxii  ã                   ó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© ó    úW/home/htdocs/ttos/venv/lib/python3.12/site-packages/google/auth/compute_engine/_mtls.pyÚ_get_mds_root_crt_pathr   ,   s&   € Ü	‡w�wÔ"Ò"Ü1Ð4GÑ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�wÔ"Ò"Ü1Ð4IÑ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:   € ä�7‰7�>‰>˜/×6Ñ6Ó7ò ¼B¿G¹G¿N¹NØ×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   € ä�z‰z�~‰~Ü×/Ñ/°óç�eƒgð ð
Ü˜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ˆÔØ×Ñ×.Ñ.°o×6RÑ6RÐ.ÔSØ×Ñ×(Ñ(Ø$×>Ñ>ð 	)ô 	
ô 	Œn˜dÑ,¨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ÐLÀVÑ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ÐMÀfÑ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Üœ¨Ñ3°GÑF¸vÑFÐFð	8Üœ^¨TÑ7¸ÑJÀ6ÑJˆHØ×%Ñ%Ô'ØˆOøä�L‰LÜ×Ñ×(Ñ(Ü×Ñ×)Ñ)ð
ò 	8ô
 �O‰Oð<àôô #+¨7¯;©;Ó"7ÐÜ *Ð+>×+GÑ+GÈvÐ+GÓ+VÓ WÐØ+ˆGŒKô '›=ˆLØ$�<×$Ñ$ WÑ7°Ñ7Õ7ûð#	8ús   ²%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   