
    _i                       d Z ddlm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 ddlmZ ddlmZ e G d	 d
                      Ze G d d                      Ze G d d                      Z G d dej                  Ze G d d                      Z	 dZdZdZdZdZ G d de          Z G d de          Z G d de          Z G d de          Z G d  d!e          Zd%d$Z dS )&zFConstants, types, and classes shared across OIDC auth implementations.    )annotationsN)	dataclassfield)Optional)quote)_get_azure_response)_get_gcp_responsec                  ^    e Zd ZU ded<    ed          Zded<    ed          Zded<   dS )	OIDCIdPInfostrissuerNdefaultOptional[str]clientIdzOptional[list[str]]requestScopes)__name__
__module____qualname____annotations__r   r   r        ;D:\Nbitz\venv\Lib\site-packages\pymongo/auth_oidc_shared.pyr   r      sW         KKK#eD111H1111).t)<)<)<M<<<<<<r   r   c                  r    e Zd ZU ded<   ded<   ded<    ed          Zd	ed
<    ed          Zded<   dS )OIDCCallbackContextfloattimeout_secondsr   usernameintversionNr   r   refresh_tokenzOptional[OIDCIdPInfo]idp_info)r   r   r   r   r   r!   r"   r   r   r   r   r   $   sl         MMMLLL#(5#6#6#6M6666&+eD&9&9&9H999999r   r   c                  ^    e Zd ZU ded<    ed          Zded<    ed          Zded<   dS )	OIDCCallbackResultr   access_tokenNr   zOptional[float]expires_in_secondsr   r!   )r   r   r   r   r   r&   r!   r   r   r   r$   r$   -   s[         */%*=*=*=====#(5#6#6#6M666666r   r$   c                  4    e Zd ZdZej        dd            ZdS )	OIDCCallbackz)A base class for defining OIDC callbacks.contextr   returnr$   c                    dS )z/Convert the given BSON value into our own type.Nr   selfr)   s     r   fetchzOIDCCallback.fetch7   s      r   Nr)   r   r*   r$   )r   r   r   __doc__abcabstractmethodr.   r   r   r   r(   r(   4   s<        33> > > > > >r   r(   c                      e Zd ZU  ed          Zded<    ed          Zded<    ed          Zded<    ee          Z	d	ed
<    ed          Z
ded<   dZded<   dS )_OIDCPropertiesNr   zOptional[OIDCCallback]callbackhuman_callbackr   environment)default_factoryz	list[str]allowed_hoststoken_resource r   r   )r   r   r   r   r5   r   r6   r7   listr9   r:   r   r   r   r   r4   r4   <   s         ',uT':':':H::::-2U4-@-@-@N@@@@!&t!4!4!4K4444$uT:::M::::$)E$$7$7$7N7777Hr   r4      i,     <   g?c                      e Zd ZddZdS )_OIDCTestCallbackr)   r   r*   r$   c                   t           j                            d          }|st          d          t	          |          5 }t          |                                                                          cd d d            S # 1 swxY w Y   d S )NOIDC_TOKEN_FILEzIMONGODB-OIDC with an "test" provider requires "OIDC_TOKEN_FILE" to be setr%   osenvirongetRuntimeErroropenr$   readstripr-   r)   
token_filefids       r   r.   z_OIDCTestCallback.fetchP   s    Z^^$566
 	[   * 	G%388::3C3C3E3EFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G    4BBBNr/   r   r   r   r.   r   r   r   rA   rA   O   .        G G G G G Gr   rA   c                      e Zd ZddZdS )_OIDCAWSCallbackr)   r   r*   r$   c                   t           j                            d          }|st          d          t	          |          5 }t          |                                                                          cd d d            S # 1 swxY w Y   d S )NAWS_WEB_IDENTITY_TOKEN_FILEzTMONGODB-OIDC with an "aws" provider requires "AWS_WEB_IDENTITY_TOKEN_FILE" to be setrD   rE   rM   s       r   r.   z_OIDCAWSCallback.fetch[   s    Z^^$ABB
 	f   * 	G%388::3C3C3E3EFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	GrP   Nr/   rQ   r   r   r   rT   rT   Z   rR   r   rT   c                      e Zd ZddZdd	Zd
S )_OIDCAzureCallbackr:   r   r*   Nonec                .    t          |          | _        d S Nr   r:   r-   r:   s     r   __init__z_OIDCAzureCallback.__init__f       #N33r   r)   r   r$   c                |    t          | j        |j        |j                  }t	          |d         |d                   S )Nr%   
expires_in)r%   r&   )r   r:   r   r   r$   r-   r)   resps      r   r.   z_OIDCAzureCallback.fetchi   sB    "4#68H'Jabb!n-$|BT
 
 
 	
r   Nr:   r   r*   rY   r/   r   r   r   r^   r.   r   r   r   rX   rX   e   s<        4 4 4 4
 
 
 
 
 
r   rX   c                      e Zd ZddZdd	Zd
S )_OIDCGCPCallbackr:   r   r*   rY   c                .    t          |          | _        d S r[   r\   r]   s     r   r^   z_OIDCGCPCallback.__init__q   r_   r   r)   r   r$   c                b    t          | j        |j                  }t          |d                   S )Nr%   rD   )r	   r:   r   r$   rb   s      r   r.   z_OIDCGCPCallback.fetcht   s-     !4g6MNN!tN/CDDDDr   Nrd   r/   re   r   r   r   rg   rg   p   sB        4 4 4 4E E E E E Er   rg   c                      e Zd ZddZdS )_OIDCK8SCallbackr)   r   r*   r$   c                :    t          t                                S )NrD   )r$   _get_k8s_tokenr,   s     r   r.   z_OIDCK8SCallback.fetchz   s    !~/?/?@@@@r   Nr/   rQ   r   r   r   rk   rk   y   s.        A A A A A Ar   rk   r*   r   c                     d} dD ]"}|t           j        v rt           j        |         } #t          |           5 }|                                cd d d            S # 1 swxY w Y   d S )Nz3/var/run/secrets/kubernetes.io/serviceaccount/token)AZURE_FEDERATED_TOKEN_FILErV   )rF   rG   rJ   rK   )fnamekeyrO   s      r   rm   rm   ~   s    AEL $ $"*JsOE	e xxzz                 s   AAA)r*   r   )!r0   
__future__r   r1   rF   dataclassesr   r   typingr   urllib.parser   pymongo._azure_helpersr   pymongo._gcp_helpersr	   r   r   r$   ABCr(   r4   TOKEN_BUFFER_MINUTESHUMAN_CALLBACK_TIMEOUT_SECONDSCALLBACK_VERSION MACHINE_CALLBACK_TIMEOUT_SECONDSTIME_BETWEEN_CALLS_SECONDSrA   rT   rX   rg   rk   rm   r   r   r   <module>r~      s    M L " " " " " " 



 				 ( ( ( ( ( ( ( (             6 6 6 6 6 6 2 2 2 2 2 2 = = = = = = = = : : : : : : : : 7 7 7 7 7 7 7 7> > > > >37 > > >         < !'  #%    G G G G G G G GG G G G G| G G G
 
 
 
 
 
 
 
E E E E E| E E EA A A A A| A A A
     r   