§
    8?Äj@  ã                   ót  — d Z ddlZddlZddlZddlZddlmZmZ ddlm	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.é    N)Ú	dataclassÚfield)Ú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© ó    úQC:\Projects\Historical\venv\Lib\site-packages\google/auth/compute_engine/_mtls.pyÚ_get_mds_root_crt_pathr   +   s'   € Ý	„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   2   s'   € Ý	„wÕ"Ò"Ð"Ý1Ð4IÑ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   9   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&   C   s8   € åŒ7�>Š>˜/Ô6Ñ7Ô7ð ½B¼G¿NºNØÔ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(   J   s)   € € € € € ðð ð €FØ€DØ€G€G€Gr   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   W   sj   € åŒz�~Š~Õ.ÔEÀvÑNÔN×TÒTÑVÔV€Hð
Ý˜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;   b   sk   € åÑÔ€DØ�{Ô!Ò!Ð!Ý˜OÑ,Ô,ð 	ÝÔ2Ø=ñô ð ð ˆtØ	•Ô!Ò	!Ð	!Øˆuå˜OÑ,Ô,Ð,r   c                   ód   ‡ — e Zd ZdZ e¦   «         fdefˆ fd„Zˆ 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        d¬¦  «         t          ¦   «         | _         t          t          | ¦  «        j        |i |¤Ž d S )N)ÚcafileÚ )ÚcertfileÚpassword)ÚsslÚcreate_default_contextÚssl_contextÚload_verify_locationsr   Úload_cert_chainr   r   Ú_fallback_adapterÚsuperr=   Ú__init__)Úselfr"   ÚargsÚkwargsÚ	__class__s       €r   rJ   zMdsMtlsAdapter.__init__t   s‘   ø€ õ Ô5Ñ7Ô7ˆÔØÔ×.Ò.°oÔ6RÐ.ÑSÔSÐSØÔ×(Ò(Ø$Ô>Èð 	)ñ 	
ô 	
ð 	
õ "-¡¤ˆÔØ,��n˜dÑ#Ô#Ô,¨dÐ=°fÐ=Ð=Ð=Ð=Ð=r   c                 óX   •— | j         |d<    t          t          | ¦  «        j        |i |¤ŽS ©NrE   )rE   rI   r=   Úinit_poolmanager©rK   rL   rM   rN   s      €r   rQ   zMdsMtlsAdapter.init_poolmanager   s2   ø€ Ø $Ô 0ˆˆ}ÑØ;�u•^ TÑ*Ô*Ô;¸TÐLÀVÐLÐLÐLr   c                 óX   •— | j         |d<    t          t          | ¦  «        j        |i |¤ŽS rP   )rE   rI   r=   Úproxy_manager_forrR   s      €r   rT   z MdsMtlsAdapter.proxy_manager_forƒ   s2   ø€ Ø $Ô 0ˆˆ}ÑØ<�u•^ TÑ*Ô*Ô<¸dÐMÀfÐMÐMÐMr   c                 ó€  •— 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        t          j
        j        t          j
        j        f$ rv}t                               d|¦  «         t!          |j        ¦  «        }t%          |                     d¬¦  «        ¦  «        }||_         | j        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-   rI   r=   ÚsendÚraise_for_statusrC   ÚSSLErrorÚrequestsr
   Ú	HTTPErrorÚConnectionErrorÚTimeoutÚ_LOGGERÚwarningr   Úurlr   Ú_replacerH   )rK   ÚrequestrM   ÚresponseÚeÚparsed_original_urlÚhttp_fallback_urlrN   s          €r   rX   zMdsMtlsAdapter.send‡   sS  ø€ åÑÔ¥Ô 2Ò2Ð2Ø3•5�¨Ñ.Ô.Ô3°GÐFÐF¸vÐFÐFÐFð	BØ7•u�^¨TÑ2Ô2Ô7¸ÐJÐJÀ6ÐJÐJˆHØ×%Ò%Ñ'Ô'Ð'ØˆOøåŒLÝÔÔ(ÝÔÔ)ÝÔÔ/ÝÔÔ'ð
ð 	Bð 	Bð 	Bõ �OŠOð<àñô ð õ #+¨7¬;Ñ"7Ô"7ÐÝ *Ð+>×+GÒ+GÈvÐ+GÑ+VÔ+VÑ WÔ WÐØ+ˆGŒKð /�4Ô)Ô.¨wÐAÐA¸&ÐAÐAÐAÐAÐAÐAÐAÐAøøøøð%	Bøøøs    Á 6A7 Á7AD=ÃA+D8Ä2D=Ä8D=c                 óˆ   •— | j                              ¦   «          t          t          | ¦  «                             ¦   «          d S )N)rH   ÚcloserI   r=   )rK   rN   s    €r   ri   zMdsMtlsAdapter.close¥   s:   ø€ ØÔ×$Ò$Ñ&Ô&Ð&Ý�n˜dÑ#Ô#×)Ò)Ñ+Ô+Ð+Ð+Ð+r   )r   r   r    r,   r   rJ   rQ   rT   rX   ri   Ú__classcell__)rN   s   @r   r=   r=   q   sÎ   ø€ € € € € ØAÐAð 0=¨}©¬ð	>ð 	>Ø,ð	>ð 	>ð 	>ð 	>ð 	>ð 	>ðMð Mð Mð Mð MðNð Nð Nð Nð NðBð Bð Bð Bð Bð<,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,r   r=   )"r,   ÚenumÚloggingr   rC   Údataclassesr   r   Úpathlibr   Úurllib.parser   r   r[   Úrequests.adaptersr   Úgoogle.authr	   r
   Ú	getLoggerr   r_   r   r   r   r   r   r   r&   ÚEnumr(   r7   r;   r=   r   r   r   ú<module>rt      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¸¹¼ð -ð -¨ð -ð -ð -ð -ð6,ð 6,ð 6,ð 6,ð 6,�[ñ 6,ô 6,ð 6,ð 6,ð 6,r   