
    l h                        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Zy)z#MONGODB-AWS Authentication helpers.    )annotations)TYPE_CHECKINGAnyMappingTypeNBinary)ConfigurationErrorOperationFailure)_ReadableBuffer)MongoCredential)
ConnectionTc                   	 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/SchoolMeal/SchoolMeal/pds_admin_SchoolMeal/Backend/venv/lib/python3.12/site-packages/pymongo/synchronous/auth_aws.pybinary_typez5_authenticate_aws.<locals>.AwsSaslContext.binary_type6   s    M    c                ,    t        j                  |      S )zEncode a dictionary to BSON.)bsonencode)r   docs     r   bson_encodez5_authenticate_aws.<locals>.AwsSaslContext.bson_encode:   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   4   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{
	W   A
 	l // 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.auth_sharedr   pymongo.synchronous.poolr   _IS_SYNCrN   r)   r   r   <module>rY      s3    * " 4 4   ?,33Dr   