U
    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dS ) zFConstants, types, and classes shared across OIDC auth implementations.    )annotationsN)	dataclassfield)Optional)quote)_get_azure_response)_get_gcp_responsec                   @  s:   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   </tmp/pip-unpacked-wheel-oc276qo4/pymongo/auth_oidc_shared.pyr	      s   
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                   @  s:   e Zd ZU ded< eddZded< ed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   
r   c                   @  s&   e Zd ZdZejdddddZdS )OIDCCallbackz)A base class for defining OIDC callbacks.r   r   contextreturnc                 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   __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,   r-   listr/   r0   r   r   r   r   r   r*   <   s   
r*      i,     <   g?c                   @  s   e Zd ZdddddZdS )_OIDCTestCallbackr   r   r"   c              
   C  sJ   t jd}|stdt| }t|  dW  5 Q R  S Q R X 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_fileZfidr   r   r   r&   P   s    
z_OIDCTestCallback.fetchNr   r   r   r&   r   r   r   r   r6   O   s   r6   c                   @  s   e Zd ZdddddZdS )_OIDCAWSCallbackr   r   r"   c              
   C  sJ   t jd}|stdt| }t|  dW  5 Q R  S Q R X d S )NZAWS_WEB_IDENTITY_TOKEN_FILEzTMONGODB-OIDC with an "aws" provider requires "AWS_WEB_IDENTITY_TOKEN_FILE" to be setr7   r8   r@   r   r   r   r&   [   s    
z_OIDCAWSCallback.fetchNrA   r   r   r   r   rB   Z   s   rB   c                   @  s,   e Zd ZdddddZdddd	d
ZdS )_OIDCAzureCallbackr
   Noner0   r$   c                 C  s   t || _d S Nr   r0   r%   r0   r   r   r   __init__f   s    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   r0   r   r   r   r%   r#   respr   r   r   r&   i   s
     z_OIDCAzureCallback.fetchNr   r   r   rI   r&   r   r   r   r   rC   e   s   rC   c                   @  s,   e Zd ZdddddZdddd	d
ZdS )_OIDCGCPCallbackr
   rD   rE   c                 C  s   t || _d S rF   rG   rH   r   r   r   rI   q   s    z_OIDCGCPCallback.__init__r   r   r"   c                 C  s   t | j|j}t|d dS )Nr   r7   )r   r0   r   r   rJ   r   r   r   r&   t   s    z_OIDCGCPCallback.fetchNrL   r   r   r   r   rM   p   s   rM   )r'   
__future__r   r(   r9   Z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_SECONDSr6   rB   rC   rM   r   r   r   r   <module>   s4   