U
    Û~fh±  ã                   @  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-36gvocj8/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   