
    l hp%                    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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 	 	 	 	 	 	 ddZ!y)z6Constants 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                  @    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    y/var/www/html/SchoolMeal/SchoolMeal/pds_admin_SchoolMeal/Backend/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service_host_AWSPropertiesaws_session_tokenc                H    g d}| dv r| dv S | |vrt        d|  d|       | S )N)FTnoneforwardforwardAndReverse)truefalseTF)rL   TzCANONICALIZE_HOST_NAME 'z' not in valid options: )
ValueError)valuevalid_namess     r    _validate_canonicalize_host_namerQ   Z   sD    GK..&&K3E7:RS^R_`aaLr!   c           	     (   | dvr|t        |  d      | dk(  r||dk7  rt        d      |j                  di       }|j                  dd	      }|j                  d
d      }|j                  dd      }	t        |	      }	|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(  rx|j                  di       }|j                  d      }|j                  d      }|j                  d      }|j                  dd      }g d}|j                  d|      }|j                  dd      |t        d      d }|d!}t        |      |s|r|t        |      |r|rd"}t        |      ||d#k(  r|d$}t        |      t               }nk|d%k(  rd}|st        d&      t        |      }nK|d'k(  rd}|st        d(      t        |      }n+|d)k(  rd}t               }nt        d*|       t        |      t        ||||||xs d+      }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 usernamer   z	$externalz:authentication source must be $external or None for GSSAPIauthmechanismpropertiesSERVICE_NAMEmongodbSERVICE_HOSTCANONICALIZE_HOST_NAMErM   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   rN   getrQ   r@   r9   rF   r   r   r   r   r   r   )mechr;   userpasswdextradatabase
propertiesrB   rE   canonicalizerD   propsrG   	aws_propsre   rf   environri   default_allowedrh   msg
oidc_propssource_databases                          r   _build_credentials_tuplerz   d   s    BBt| D6)=!>??x&K"7YZZYY8"=
!~~ni@!~~nd;!~~&>H7E"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>>/40<AW$%[\\d 	 =C$S))~"(--NM(-- & #WC,S11,.G#%,n  .n=E!%,i  ,N;E!+-(+VW^V_)`aa$S))$)')ZR

 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   _xorr      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Tupler~   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-8r   s   =3Dr   s   =2C    s   n=s   ,r=r   s   n,,skipEmptyExchangeT)	saslStartr:   payloadautoAuthorizeoptions)r<   encodereplacer   osurandomr
   )credentialsr:   r<   rm   nonce
first_barecmds          r   _authenticate_scram_startr      s     ##H??7#++D&9AA$ODrzz"~.E&.J &:-.'.C *c!!r!   )rO   
str | boolr.   r   )rl   strr;   Optional[str]rm   r   rn   r   ro   zMapping[str, Any]rp   r   r.   r9   )r   r~   r   r~   r.   r~   )r   r~   r.   zDict[bytes, bytes])r   r9   r:   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   r   pymongo.errorsr   	frozenset
MECHANISMSr   r9   r@   rF   rQ   rz   r   r   r   r8   r!   r   <module>r      s    = " 	  % " / /   .	
 : . T ? c  6 ,/B.CD :{T
{T{T {T 	{T
 {T {T {T|@
" "-0"9"r!   