
    l8'h "                    <   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 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y)z6Constants and types shared across multiple auth types.    )annotationsN)standard_b64encode)
namedtuple)AnyDictMappingOptional)Binary)_OIDCAzureCallback_OIDCGCPCallback_OIDCProperties_OIDCTestCallback)ConfigurationError)	GSSAPIz
MONGODB-CRMONGODB-OIDCMONGODB-X509MONGODB-AWSPLAINzSCRAM-SHA-1zSCRAM-SHA-256DEFAULTc                  @    e Zd ZdZ ed       ZddZddZddZd	dZ	y)
_Cachedatac                    d | _         y Nr   selfs    O/var/www/html/trade_iq/venv/lib/python3.12/site-packages/pymongo/auth_shared.py__init__z_Cache.__init__7   s	    	    c                0    t        |t              ryt        S )NT
isinstancer   NotImplementedr   others     r   __eq__z_Cache.__eq__:   s    eV$r    c                0    t        |t              ryt        S )NFr"   r%   s     r   __ne__z_Cache.__ne__@   s    eV$r    c                    | j                   S r   )	_hash_valr   s    r   __hash__z_Cache.__hash__E   s    ~~r    N)returnNone)r&   objectr-   bool)r-   int)
__name__
__module____qualname__	__slots__hashr+   r   r'   r)   r,    r    r   r   r   2   s$    IXI
r    r   MongoCredential)	mechanismsourceusernamepasswordmechanism_propertiescacheGSSAPIPropertiesservice_namecanonicalize_host_nameservice_realm_AWSPropertiesaws_session_tokenc           	        | dvr|t        |  d      | dk(  r||dk7  rt        d      |j                  di       }|j                  dd	      }t        |j                  d
d            }|j                  d      }	t	        |||	      }
t        | d|||
d      S | dk(  r/|t        d      ||dk7  rt        d      t        | d|ddd      S | dk(  r`||t        d      ||dk7  rt        d      |j                  di       }|j                  d      }t        |      }t        | d|||d      S | dk(  rC|j                  di       }|j                  d      }|j                  d      }|j                  d      }|j                  dd      }g d}|j                  d|      }d}|d}t        |      |s|r|t        |      |r|rd }t        |      |m|d!k(  r|d"}t        |      t               }nY|d#k(  rd}|st        d$      t        |      }n9|d%k(  rd}|st        d&      t        |      }nt        d'|       t        |      t        ||||||(      }t        | d|||t                     S | d)k(  r|xs |xs d}t        | |||dd      S |xs |xs d*}|t        d+      t        | |||dt                     S ),z8Build and return a mechanism specific credentials tuple.)r   r   r   Nz requires a username.r   z	$externalz:authentication source must be $external or None for GSSAPIauthmechanismpropertiesSERVICE_NAMEmongodbCANONICALIZE_HOST_NAMEFSERVICE_REALMr@   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)rE   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_HOSTSzVauthentication 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 propertyz+unrecognized ENVIRONMENT for MONGODB-OIDC: )callbackhuman_callbackenvironmentallowed_hoststoken_resourcer;   r   adminzA password is required.)r   
ValueErrorgetr0   r?   r8   rD   r   r   r   r   r   )mechr:   userpasswdextradatabase
propertiesrA   canonicalizerC   propsrE   	aws_propsrW   rX   environr[   default_allowedrZ   msg
oidc_propssource_databases                         r   _build_credentials_tuplerm   Z   sn    BBt| D6)>!?@@x&K"7YZZYY8"=
!~~ni@JNN+CUKL"7 %#/'
 t[$tLL		$%RSS&K"7_``t[$dDII		$%bcc&K"7$Q  YY8"=
&NN+>?"5FG	t[$	4PP		YY8"=
>>/2#(=>../#(8"=
 #Hd 	 =C$S))~"(--NM(-- & #WC,S11,.G#%,n  .n=E!%,i  ,N;(+VW^V_)`aa$S))$)')

 t[$
FHUU	 ;H;t_dFD$OO 7H7>$%>??t_dFD&(SSr    c           
         dj                  t        | |      D cg c]  \  }}t        ||z  g       c}}      S c c}}w )zXOR two byte strings together.r    )joinzipbytes)firsecxys       r   _xorrv      s3    88C>1UAE7^>??>s   <
c                D    t        d | j                  d      D              S )z-Split a scram response into key, value pairs.c              3     K   | ]E  }t        j                  t         j                  t        t        f   |j	                  d d             G yw)   =   N)typingcastTuplerq   split).0items     r   	<genexpr>z(_parse_scram_response.<locals>.<genexpr>   s;       	FLL.

40CDs   AA   ,)dictr~   )responses    r   _parse_scram_responser      s%     NN4(  r    c                   | j                   }|j                  d      j                  dd      j                  dd      }t        t	        j
                  d            }d|z   dz   |z   }d	|t        d
|z         d	ddid}|||fS )Nzutf-8ry   s   =3Dr   s   =2C    s   n=s   ,r=rz   s   n,,skipEmptyExchangeT)	saslStartr9   payloadautoAuthorizeoptions)r;   encodereplacer   osurandomr
   )credentialsr9   r;   r`   nonce
first_barecmds          r   _authenticate_scram_startr      s     ##H??7#++D&9AA$ODrzz"~.E&.J &:-.'.C *c!!r    )r_   strr:   Optional[str]r`   r   ra   r   rb   zMapping[str, Any]rc   r   r-   r8   )rr   rq   rs   rq   r-   rq   )r   rq   r-   zDict[bytes, bytes])r   r8   r9   r   r-   z4tuple[bytes, bytes, typing.MutableMapping[str, Any]]) __doc__
__future__r   r   r{   base64r   collectionsr   r   r   r   r	   bsonr
   pymongo.auth_oidc_sharedr   r   r   r   pymongo.errorsr   	frozenset
MECHANISMSr   r8   r?   rD   rm   rv   r   r   r7   r    r   <module>r      s    = " 	  % " / /   .

 : . T ? S  6 ,/B.CD :sT
sTsT sT 	sT
 sT sT sTl@
" "-0"9"r    