
    _in&                    @   d Z ddlmZ ddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZ ddlmZ ddlmZmZmZmZmZ dd	lmZ  eg d
          Z	  G d d          Z edg d          Z	  edg d          Z	  eddg          Z	 d,dZd-d Zd.d$Zd/d'Z d0d+Z!dS )1z6Constants and types shared across multiple auth types.    )annotationsN)standard_b64encode)
namedtuple)AnyDictMappingOptional)Binary)_OIDCAzureCallback_OIDCGCPCallback_OIDCK8SCallback_OIDCProperties_OIDCTestCallback)ConfigurationError)GSSAPIMONGODB-OIDCMONGODB-X509MONGODB-AWSPLAINzSCRAM-SHA-1zSCRAM-SHA-256DEFAULTc                  H    e Zd ZdZ ed           ZddZddZdd	ZddZ	dS )_CachedatareturnNonec                    d | _         d S Nr   selfs    6D:\Nbitz\venv\Lib\site-packages\pymongo/auth_shared.py__init__z_Cache.__init__7   s    			    otherobjectboolc                >    t          |t                    rdS t          S )NT
isinstancer   NotImplementedr    r$   s     r!   __eq__z_Cache.__eq__:   s    eV$$ 	4r#   c                >    t          |t                    rdS t          S )NFr(   r+   s     r!   __ne__z_Cache.__ne__@   s    eV$$ 	5r#   intc                    | j         S r   )	_hash_valr   s    r!   __hash__z_Cache.__hash__E   s
    ~r#   N)r   r   )r$   r%   r   r&   )r   r/   )
__name__
__module____qualname__	__slots__hashr1   r"   r,   r.   r2    r#   r!   r   r   2   sv        IXI         
     r#   r   MongoCredential)	mechanismsourceusernamepasswordmechanism_propertiescacheGSSAPIPropertiesservice_namecanonicalize_host_nameservice_realmservice_host_AWSPropertiesaws_session_tokenvalue
str | boolr   c                P    g d}| dv r| dv S | |vrt          d|  d|           | S )N)FTnoneforwardforwardAndReverse)truefalseTF)rN   TzCANONICALIZE_HOST_NAME 'z' not in valid options: )
ValueError)rH   valid_namess     r!    _validate_canonicalize_host_namerR   Z   sT    GGGK...&&K`E``S^``aaaLr#   mechstrr;   Optional[str]userpasswdextraMapping[str, Any]databasec           	        | dvr|t          |  d          | dk    r||dk    rt          d          |                    di           }|                    dd	          }|                    d
d          }|                    dd          }	t          |	          }	|                    d          }
t	          ||	|
|          }t          | d|||d          S | dk    r<|t          d          ||dk    rt          d          t          | d|ddd          S | dk    ry||t          d          ||dk    rt          d          |                    di           }|                    d          }t          |          }t          | d|||d          S | dk    r|                    di           }|                    d          }|                    d          }|                    d          }|                    dd          }g d}|                    d|          }|                    dd          |t          d          d }|d!}t          |          |s|r'|t          |          |r|rd"}t          |          n||d#k    r"|d$}t          |          t                      }n|d%k    r#d}|st          d&          t          |          }na|d'k    r#d}|st          d(          t          |          }n8|d)k    rd}t                      }n!t          d*|           t          |          t          ||||||pd+          }t          | d|||t                                S | d,k    r|p|pd}t          | |||dd          S |p|pd-}|t          d.          t          | |||dt                                S )/z8Build and return a mechanism specific credentials tuple.)r   r   r   Nz requires a usernamer   z	$externalz:authentication source must be $external or None for GSSAPIauthmechanismpropertiesSERVICE_NAMEmongodbSERVICE_HOSTCANONICALIZE_HOST_NAMErO   SERVICE_REALMrA   r   z+Passwords are not supported by MONGODB-X509z@authentication source must be $external or None for MONGODB-X509r   z;username without a password is not supported by MONGODB-AWSz?authentication source must be $external or None for MONGODB-AWSAWS_SESSION_TOKEN)rG   r   OIDC_CALLBACKOIDC_HUMAN_CALLBACKENVIRONMENTTOKEN_RESOURCE )z*.mongodb.netz*.mongodb-dev.netz*.mongodb-qa.netz*.mongodbgov.net	localhostz	127.0.0.1z::1ALLOWED_HOSTSz4ALLOWED_HOSTS is only valid with OIDC_HUMAN_CALLBACKzVauthentication with MONGODB-OIDC requires providing either a callback or a environmentz)password is not supported by MONGODB-OIDCz5cannot set both OIDC_CALLBACK and OIDC_HUMAN_CALLBACKtestz;test environment for MONGODB-OIDC does not support usernameazurezTAzure environment for MONGODB-OIDC requires a TOKEN_RESOURCE auth mechanism propertygcpzOGCP provider for MONGODB-OIDC requires a TOKEN_RESOURCE auth mechanism propertyk8sz+unrecognized ENVIRONMENT for MONGODB-OIDC: )callbackhuman_callbackenvironmentallowed_hoststoken_resourcer<   r   adminzA password is required)r   rP   getrR   r@   r9   rF   r   r   r   r   r   r   )rS   r;   rV   rW   rX   rZ   
propertiesrB   rE   canonicalizerD   propsrG   	aws_propsrn   ro   environrr   default_allowedrq   msg
oidc_propssource_databases                          r!   _build_credentials_tupler~   d   s    BBBt| D!>!>!>???x&K"7"7YZZZYY8"==
!~~ni@@!~~nd;;!~~&>HH7EE"77 %#/'%	
 
 
 t[$tLLL			$%RSSS&K"7"7_```t[$dDIII			$%bccc&K"7"7$Q   YY8"==
&NN+>??"5FGGG	t[$	4PPP			YY8"==
>>/22#(=>>..//#(8"==
 
 
 #HH>>/400<AW$%[\\\d 	 =C$S)))  	*~  	*"(--- .N .M(--- &  #WC,S111,..G##% ,n   .n==E!!% ,i   ,N;;E!!+--()`W^)`)`aaa$S)))$)')ZR
 
 

 t[$
FHHUUU	 ;H;t_dFD$OOO 7H7>$%=>>>t_dFD&((SSSr#   firbytessecc                \    d                     d t          | |          D                       S )zXOR two byte strings together.r#   c                :    g | ]\  }}t          ||z  g          S r8   )r   ).0xys      r!   
<listcomp>z_xor.<locals>.<listcomp>   s(    >>>1UAE7^^>>>r#   )joinzip)r   r   s     r!   _xorr      s+    88>>C>>>???r#   responseDict[bytes, bytes]c                Z    t          d |                     d          D                       S )z-Split a scram response into key, value pairs.c              3     K   | ]I}t          j        t           j        t          t          f         |                    d d                    V  JdS )   =   N)typingcastTupler   split)r   items     r!   	<genexpr>z(_parse_scram_response.<locals>.<genexpr>   s[         	FL.

40C0CDD     r#      ,)dictr   )r   s    r!   _parse_scram_responser      s<      NN4((     r#   credentialsr:   4tuple[bytes, bytes, typing.MutableMapping[str, Any]]c                    | j         }|                    d                              dd                              dd          }t          t	          j        d                    }d|z   dz   |z   }d	|t          d
|z             d	ddid}|||fS )Nzutf-8r   s   =3Dr   s   =2C    s   n=s   ,r=r   s   n,,skipEmptyExchangeT)	saslStartr:   payloadautoAuthorizeoptions)r<   encodereplacer   osurandomr
   )r   r:   r<   rV   nonce
first_barecmds          r!   _authenticate_scram_startr      s     #H??7##++D&99AA$OODrz"~~..E&.J &:-..'. C *c!!r#   )rH   rI   r   rI   )rS   rT   r;   rU   rV   rU   rW   rU   rX   rY   rZ   rU   r   r9   )r   r   r   r   r   r   )r   r   r   r   )r   r9   r:   rT   r   r   )"__doc__
__future__r   r   r   base64r   collectionsr   r   r   r   r	   bsonr
   pymongo.auth_oidc_sharedr   r   r   r   r   pymongo.errorsr   	frozenset
MECHANISMSr   r9   r@   rF   rR   r~   r   r   r   r8   r#   r!   <module>r      s    = < " " " " " " 				  % % % % % % " " " " " " / / / / / / / / / / / /                    . - - - - -Y	 	 	 
 :       . *TTT  ? :ccc   6 ,/B.CDD :   {T {T {T {T|@ @ @ @
   " " " " " "r#   