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strissuerNdefaultOptional[str]clientIdzOptional[list[str]]requestScopes)__name__
__module____qualname____annotations__r   r   r    r   r   T/var/www/html/olx_land/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   r0   r1   listr3   r4   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 )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fidr   r   r   r)   P      
$z_OIDCTestCallback.fetchNr*   r   r   r   r)   r   r   r   r   r;   O       r;   c                   @  r:   )	_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?   rG   r   r   r   r)   [   rJ   z_OIDCAWSCallback.fetchNr*   rK   r   r   r   r   rM   Z   rL   rM   c                   @      e Zd ZdddZdd
dZdS )_OIDCAzureCallbackr4   r   r&   Nonec                 C     t || _d S Nr   r4   r(   r4   r   r   r   __init__f      z_OIDCAzureCallback.__init__r%   r   r!   c                 C  s&   t | j|j|j}t|d |d dS )Nr"   
expires_in)r"   r#   )r   r4   r   r   r!   r(   r%   respr   r   r   r)   i   s   z_OIDCAzureCallback.fetchNr4   r   r&   rQ   r*   r   r   r   rV   r)   r   r   r   r   rP   e       
rP   c                   @  rO   )_OIDCGCPCallbackr4   r   r&   rQ   c                 C  rR   rS   rT   rU   r   r   r   rV   q   rW   z_OIDCGCPCallback.__init__r%   r   r!   c                 C  s   t | j|j}t|d dS )Nr"   r>   )r   r4   r   r!   rY   r   r   r   r)   t   s   z_OIDCGCPCallback.fetchNr[   r*   r\   r   r   r   r   r^   p   r]   r^   c                   @  r:   )	_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*   rK   r   r   r   r   r_   y   rL   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)AZURE_FEDERATED_TOKEN_FILErN   )r@   rA   rD   rE   )fnamekeyrI   r   r   r   r`   ~   s   


$r`   )r&   r   )!r+   
__future__r   r,   r@   dataclassesr   r   typingr   urllib.parser   pymongo._azure_helpersr   pymongo._gcp_helpersr   r
   r   r!   ABCr$   r.   TOKEN_BUFFER_MINUTESHUMAN_CALLBACK_TIMEOUT_SECONDSCALLBACK_VERSION MACHINE_CALLBACK_TIMEOUT_SECONDSTIME_BETWEEN_CALLS_SECONDSr;   rM   rP   r^   r_   r`   r   r   r   r   <module>   s<   		