o
    'h                     @  s   d Z ddlmZ ddlmZmZmZmZ ddl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 d
ZdddZdS )z#MONGODB-AWS Authentication helpers.    )annotations)TYPE_CHECKINGAnyMappingTypeNBinary)ConfigurationErrorOperationFailure)_ReadableBuffer)MongoCredential)
ConnectionTcredentialsr   connr   returnNonec              
   C  sL  zddl }W n ty } ztd|d}~ww ddlm}m} |d |jdk r-tdG dd	 d	|j}zG||| j	| j
| jj}|d}d
d|d}	|d|	}
|
}tdD ]}||d }d
|
d |d}|d|}|d rz W dS q[W dS  |jy } z|d t| d|j ddd}~w ty   |d  w )zAuthenticate using MONGODB-AWS.r   NzhMONGODB-AWS authentication requires pymongo-auth-aws: install with: python -m pip install 'pymongo[aws]')set_cached_credentialsset_use_cached_credentialsT	   z@MONGODB-AWS authentication requires MongoDB version 4.4 or laterc                   @  s*   e Zd ZdddZddd	ZdddZdS )z)_authenticate_aws.<locals>.AwsSaslContextr   Type[Binary]c                 S  s   t S )z#Return the bson.binary.Binary type.r   )self r   X/var/www/html/olx_land/venv/lib/python3.10/site-packages/pymongo/synchronous/auth_aws.pybinary_type6   s   z5_authenticate_aws.<locals>.AwsSaslContext.binary_typedocMapping[str, Any]bytesc                 S  
   t |S )zEncode a dictionary to BSON.)bsonencode)r   r   r   r   r   bson_encode:      
z5_authenticate_aws.<locals>.AwsSaslContext.bson_encodedatar   c                 S  r   )zDecode BSON to a dictionary.)r   decode)r   r"   r   r   r   bson_decode>   r!   z5_authenticate_aws.<locals>.AwsSaslContext.bson_decodeN)r   r   )r   r   r   r   )r"   r   r   r   )__name__
__module____qualname__r   r    r$   r   r   r   r   AwsSaslContext4   s    

r(      zMONGODB-AWS)	saslStart	mechanismpayloadz	$external
   r,   conversationId)saslContinuer.   r,   donez (pymongo-auth-aws version ))pymongo_auth_awsImportErrorr	   pymongo_auth_aws.authr   r   max_wire_versionr(   AwsCredentialusernamepasswordmechanism_propertiesaws_session_tokenstepcommandrangePyMongoAuthAwsErrorr
   __version__	Exception)r   r   r2   er   r   r(   ctxclient_payloadclient_firstserver_firstres_cmdexcr   r   r   _authenticate_aws    sd   

rJ   )r   r   r   r   r   r   )__doc__
__future__r   typingr   r   r   r   r   bson.binaryr   pymongo.errorsr	   r
   bson.typingsr   pymongo.auth_sharedr   pymongo.synchronous.poolr   _IS_SYNCrJ   r   r   r   r   <module>   s   