o
    h                     @  s.  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
 d
ZeG dd dZeG dd dZG dd dejZeG dd dZ	 dZdZdZdZdZG dd deZG dd deZG dd deZG dd deZG d d! d!eZd&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dZded< eddZded< dS )	OIDCIdPInfostrZissuerNdefaultOptional[str]clientIdzOptional[list[str]]requestScopes)__name__
__module____qualname____annotations__r   r   r    r   r   K/var/www/html/venv/lib/python3.10/site-packages/pymongo/auth_oidc_shared.pyr
         
 r
   c                   @  sJ   e Zd ZU ded< ded< ded< eddZd	ed
< ed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   $   s   
 r   c                   @  r	   )	OIDCCallbackResultr   access_tokenNr   zOptional[float]expires_in_secondsr   r   )r   r   r   r   r   r"   r   r   r   r   r   r    -   r   r    c                   @  s    e Zd ZdZejd	ddZdS )
OIDCCallbackz)A base class for defining OIDC callbacks.contextr   returnr    c                 C  s   dS )z/Convert the given BSON value into our own type.Nr   selfr$   r   r   r   fetch7   s    zOIDCCallback.fetchNr$   r   r%   r    )r   r   r   __doc__abcabstractmethodr(   r   r   r   r   r#   4   s    r#   c                   @  st   e Zd ZU eddZded< eddZded< eddZded< eedZ	d	ed
< ed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   r.   r   r/   r0   listr2   r3   r   r   r   r   r   r-   <   s   
 r-      i,     <   g?c                   @     e Zd ZdddZdS )	_OIDCTestCallbackr$   r   r%   r    c                 C  V   t jd}|stdt|}t|  dW  d    S 1 s$w   Y  d S )NZ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$   Z
token_filefidr   r   r   r(   P      
$z_OIDCTestCallback.fetchNr)   r   r   r   r(   r   r   r   r   r:   O       r:   c                   @  r9   )	_OIDCAWSCallbackr$   r   r%   r    c                 C  r;   )NAWS_WEB_IDENTITY_TOKEN_FILEzTMONGODB-OIDC with an "aws" provider requires "AWS_WEB_IDENTITY_TOKEN_FILE" to be setr<   r=   rE   r   r   r   r(   [   rG   z_OIDCAWSCallback.fetchNr)   rH   r   r   r   r   rJ   Z   rI   rJ   c                   @      e Zd ZdddZdd
dZdS )_OIDCAzureCallbackr3   r   r%   Nonec                 C     t || _d S Nr   r3   r'   r3   r   r   r   __init__f      z_OIDCAzureCallback.__init__r$   r   r    c                 C  s&   t | j|j|j}t|d |d dS )Nr!   Z
expires_in)r!   r"   )r   r3   r   r   r    r'   r$   respr   r   r   r(   i   s   z_OIDCAzureCallback.fetchNr3   r   r%   rN   r)   r   r   r   rS   r(   r   r   r   r   rM   e       
rM   c                   @  rL   )_OIDCGCPCallbackr3   r   r%   rN   c                 C  rO   rP   rQ   rR   r   r   r   rS   q   rT   z_OIDCGCPCallback.__init__r$   r   r    c                 C  s   t | j|j}t|d dS )Nr!   r<   )r   r3   r   r    rU   r   r   r   r(   t   s   z_OIDCGCPCallback.fetchNrW   r)   rX   r   r   r   r   rZ   p   rY   rZ   c                   @  r9   )	_OIDCK8SCallbackr$   r   r%   r    c                 C  s   t t dS )Nr<   )r    _get_k8s_tokenr&   r   r   r   r(   z   s   z_OIDCK8SCallback.fetchNr)   rH   r   r   r   r   r[   y   rI   r[   r%   r   c                  C  sV   d} dD ]}|t jv rt j| } qt| }| W  d    S 1 s$w   Y  d S )Nz3/var/run/secrets/kubernetes.io/serviceaccount/token)ZAZURE_FEDERATED_TOKEN_FILErK   )r>   r?   rB   rC   )fnamekeyrF   r   r   r   r\   ~   s   


$r\   )r%   r   )!r*   
__future__r   r+   r>   dataclassesr   r   typingr   urllib.parser   Zpymongo._azure_helpersr   Zpymongo._gcp_helpersr   r
   r   r    ABCr#   r-   ZTOKEN_BUFFER_MINUTESZHUMAN_CALLBACK_TIMEOUT_SECONDSZCALLBACK_VERSIONZ MACHINE_CALLBACK_TIMEOUT_SECONDSZTIME_BETWEEN_CALLS_SECONDSr:   rJ   rM   rZ   r[   r\   r   r   r   r   <module>   s<   		