U
    d                     @  s:  d Z ddlmZ z$ddlZddlmZmZmZ dZW n& ek
rZ   G dd dZdZY nX zdd	l	m
Z
mZ ed W n$ ek
r   d
ddddZ
Y nX ddlmZmZmZmZmZ ddlZddlmZ ddlmZ ddlmZmZ erddlmZ ddlmZ ddlmZ G dd deZ ddddddZ!dS )z#MONGODB-AWS Authentication helpers.    )annotationsN)AwsCredentialAwsSaslContextPyMongoAuthAwsErrorTc                   @  s   e Zd ZddddZdS )r   MongoCredential)credentialsc                 C  s   d S N )selfr   r	   r	   4/tmp/pip-unpacked-wheel-oblwsawz/pymongo/auth_aws.py__init__   s    zAwsSaslContext.__init__N)__name__
__module____qualname__r   r	   r	   r	   r   r      s   r   F)set_cached_credentialsset_use_cached_credentialszOptional[AwsCredential]None)credsreturnc                 C  s   d S r   r	   )r   r	   r	   r   r   &   s    r   )TYPE_CHECKINGAnyMappingOptionalTypeBinary)SON)ConfigurationErrorOperationFailure)_ReadableBuffer)r   )
Connectionc                   @  s:   e Zd ZddddZddddd	Zd
ddddZdS )_AwsSaslContextzType[Binary])r   c                 C  s   t S )z#Return the bson.binary.Binary type.r   )r
   r	   r	   r   binary_type9   s    z_AwsSaslContext.binary_typezMapping[str, Any]bytes)docr   c                 C  s
   t |S )zEncode a dictionary to BSON.)bsonencode)r
   r$   r	   r	   r   bson_encode=   s    z_AwsSaslContext.bson_encoder   )datar   c                 C  s
   t |S )zDecode BSON to a dictionary.)r%   decode)r
   r(   r	   r	   r   bson_decodeA   s    z_AwsSaslContext.bson_decodeN)r   r   r   r"   r'   r*   r	   r	   r	   r   r!   7   s   r!   r   r    )r   connr   c           
   
   C  s  t std|jdk rtdztt| j| j| jj}|	d}t
ddd|fg}|d|}|}td	D ]D}|	|d }t
d
d|d fd|fg}|d|}|d rl qqlW n^ tk
r }	 z"td t|	 dtj dW 5 d}	~	X Y n  tk
r   td  Y nX dS )zAuthenticate using MONGODB-AWS.zhMONGODB-AWS authentication requires pymongo-auth-aws: install with: python -m pip install 'pymongo[aws]'	   z@MONGODB-AWS authentication requires MongoDB version 4.4 or laterN)Z	saslStart   )Z	mechanismzMONGODB-AWSpayloadz	$external
   )ZsaslContinuer-   ZconversationIddonez (pymongo-auth-aws version ))_HAVE_MONGODB_AWSr   Zmax_wire_versionr!   r   usernamepasswordZmechanism_propertiesZaws_session_tokenstepr   commandranger   r   r   pymongo_auth_aws__version__	Exception)
r   r+   ctxZclient_payloadZclient_firstZserver_firstres_cmdexcr	   r	   r   _authenticate_awsF   sJ    



&r@   )"__doc__
__future__r   r8   r   r   r   r2   ImportErrorZpymongo_auth_aws.authr   r   typingr   r   r   r   r   r%   Zbson.binaryr   Zbson.sonr   Zpymongo.errorsr   r   Zbson.typingsr   Zpymongo.authr   Zpymongo.poolr    r!   r@   r	   r	   r	   r   <module>   s0   
