
    ht                        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d
Zy)z#MONGODB-AWS Authentication helpers.    )annotations)TYPE_CHECKINGAnyMappingTypeNBinary)ConfigurationErrorOperationFailure)_ReadableBuffer)MongoCredential)
Connectionc                   	 ddl }ddlm}m}  |d       |j                  dk  rt        d       G d d	|j                        }	  ||j                  | j                  | j                  | j                  j                              }|j                  d      }d
d|d}	|j                  d|	      }
|
}t        d      D ]8  }|j                  |d         }d
|
d   |d}|j                  d|      }|d   s8 y y# t        $ r}t        d      |d}~ww xY w# |j                   $ r)} |d       t#        | d|j$                   d      dd}~wt&        $ r
  |d        w xY 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                  $    e Zd ZddZddZddZy))_authenticate_aws.<locals>.AwsSaslContextc                    t         S )z#Return the bson.binary.Binary type.r   )selfs    [/var/www/html/retail-simulation-api/retail/lib/python3.12/site-packages/pymongo/auth_aws.pybinary_typez5_authenticate_aws.<locals>.AwsSaslContext.binary_type5   s    M    c                ,    t        j                  |      S )zEncode a dictionary to BSON.)bsonencode)r   docs     r   bson_encodez5_authenticate_aws.<locals>.AwsSaslContext.bson_encode9   s    ;;s##r   c                ,    t        j                  |      S )zDecode BSON to a dictionary.)r   decode)r   datas     r   bson_decodez5_authenticate_aws.<locals>.AwsSaslContext.bson_decode=   s    ;;t$$r   N)returnzType[Binary])r   Mapping[str, Any]r#   bytes)r!   r   r#   r$   )__name__
__module____qualname__r   r   r"    r   r   AwsSaslContextr   3   s    		$	%r   r*      zMONGODB-AWS)	saslStart	mechanismpayloadz	$external
   r.   conversationId)saslContinuer0   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)credentialsconnr4   er   r   r*   ctxclient_payloadclient_firstserver_firstres_cmdexcs                  r   _authenticate_awsrN      s   
 t$q  !cdd%)88 %"**$$$$00BB
 $%&]~^||K>rA XXc)n5N !"./?"@)C
 ,,{C0C6{ Y   A
 	n // t$e./?/K/K.LAN
	  t$s<   C9 B.D 5D 7D 9	DDDE%$E		E)rC   r   rD   r   r#   None)__doc__
__future__r   typingr   r   r   r   r   bson.binaryr	   pymongo.errorsr
   r   bson.typingsr   pymongo.authr   pymongo.poolr   rN   r)   r   r   <module>rX      s.    * " 4 4   ?,,'Er   