o
    {gA                     @  st  U d Z ddlmZ ddlZddlZddlZddlZddlmZm	Z	 ddl
mZmZmZmZmZmZm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mZ dd
lmZ ddl m!Z! ddl"m#Z#m$Z$ eruddl%m&Z& ddl'm(Z( dZ)dZ*zddl+Z,e-e.e/e,j01ddd dkrdZ*W n e2y   zddl,Z,W n e2y   dZ)Y nw Y nw dZ3dGddZ4dHd d!Z5dId#d$Z6dJd&d'Z7dKd(d)Z8dKd*d+Z9dKd,d-Z:dKd.d/Z;dKd0d1Z<e8e;e:e!e#e9ej=e4d2d3ej=e4d4d3e<d5	Z>d6e?d7< G d8d9 d9Z@G d:d; d;e@ZAG d<d= d=e@ZBG d>d? d?e@ZCeBej=eAd2d3ej=eAd4d3eCej=eAd4d3d@ZDdAe?dB< 	dLdMdEdFZEdS )NzAuthentication helpers.    )annotationsN)standard_b64decodestandard_b64encode)TYPE_CHECKINGAnyCallableMappingMutableMappingOptionalcast)quote)Binary)MongoCredential_authenticate_scram_start_parse_scram_response_xor)ConfigurationErrorOperationFailure)saslprep)_authenticate_aws)_authenticate_oidc_get_authenticator)Hello)
ConnectionTF.   )r      credentialsr   connr   	mechanismstrreturnNonec                  C  sx  | j }|dkrd}tj}t| jd}nd}tj}t|| jd}| j}| j	}t
j}	|j}
|
rL|
 rLt|
ts<J |
jdusCJ |
j\}}|
j}nt| |\}}}|||}|dus`J |d }t|}t|d }|dk rvtd	|d
 }|d }||stdd| }|jr|j\}}}}nd\}}}}|r||ks||krt||t||}|	|d| }|	|d| }||||f|_|| }d|||f}|	||| }dtt|| }d||f}t|	||| }d|d t|d}|||}t|d }t
 |d |std|d s8d|d tdd}|||}|d s:tddS dS )zAuthenticate using SCRAM.SCRAM-SHA-256sha256utf-8sha1Npayload   ii   z+Server returned an invalid iteration count.   s   rz!Server returned an invalid nonce.s	   c=biws,r=)NNNNs
   Client Keys
   Server Key   ,s   p=   conversationIdsaslContinuer-   r'      vz%Server returned an invalid signature.done    z%SASL conversation failed to complete.)!usernamehashlibr$   r   passwordencoder&   _password_digestsourcecachehmacHMACauth_ctxspeculate_succeeded
isinstance_ScramContext
scram_dataspeculative_authenticater   commandr   intr   
startswithdatapbkdf2_hmacr   digestjoinr   r   r   compare_digest) r   r   r   r3   rG   	digestmodrE   r8   r9   _hmacctxnonce
first_barerescmdserver_firstparsed
iterationssaltrnoncewithout_proof
client_key
server_keycsaltciterationssalted_pass
stored_keyauth_msg
client_sigclient_proofclient_final
server_sig rb   u/var/www/bot.gig.net.ua/public_html/telegram/P1/HellBot/venv/lib/python3.10/site-packages/pymongo/synchronous/auth.py_authenticate_scramF   s|   



rd   r3   r5   c                 C  sf   t |ts	tdt|dkrtdt | tstdt }|  d| }||d |	 S )z0Get a password digest to use for authentication.z#password must be an instance of strr   zpassword can't be emptyz#username must be an instance of strz:mongo:r%   )
r>   r    	TypeErrorlen
ValueErrorr4   md5updater6   	hexdigest)r3   r5   md5hashrE   rb   rb   rc   r7      s   

r7   rM   c                 C  s:   t ||}t }|  | | }||d | S )z*Get an auth key to use for authentication.r%   )r7   r4   rh   ri   r6   rj   )rM   r3   r5   rG   rk   rE   rb   rb   rc   	_auth_key   s
   
rl   hostnamec                 C  sb   t | dddt jt jd \}}}}}z	t |t j}W n t jy*   |  Y S w |d  S )z2Canonicalize hostname following MIT-krb5 behavior.Nr   )socketgetaddrinfoIPPROTO_TCPAI_CANONNAMEgetnameinfoNI_NAMEREQDgaierrorlower)rm   afsocktypeproto	canonnamesockaddrnamerb   rb   rc   _canonicalize_hostname   s   r|   c              
   C  s^  t stdz| j}| j}| j}|jd }|jrt|}|jd | }|j	dur0|d |j	 }|durmt
rMdt|t|f}tj||tjd\}}	n*d|v rZ|dd\}
}n|d}
}tj|tj|
||d\}}	n
tj|tjd\}}	|tjkrtd	zt|	d
dkrtdt|	}dd|dd}|d|}tdD ]0}t|	t|d }|dkrtdt|	pd
}d|d |d}|d|}|tjkr nqtdt|	t|d dkrtdt|	t|	|dkrtdt|	}d|d |d}|d| W t|	 W dS t|	 w  tjy. } ztt|dd}~ww )zAuthenticate using GSSAPI.zEThe "kerberos" module must be installed to use GSSAPI authentication.r   @N:)gssflagsr,   )r   userdomainr5   z&Kerberos context failed to initialize. z*Unknown kerberos failure in step function.GSSAPI	saslStartr   r'   autoAuthorize	$external
   r'   r-   r.   z+Kerberos authentication failed to complete.z0Unknown kerberos failure during GSS_Unwrap step.z.Unknown kerberos failure during GSS_Wrap step.)HAVE_KERBEROSr   r3   r5   mechanism_propertiesaddresscanonicalize_host_namer|   service_nameservice_realm_USE_PRINCIPALrH   r   kerberosauthGSSClientInitGSS_C_MUTUAL_FLAGsplitAUTH_GSS_COMPLETEr   authGSSClientStepauthGSSClientResponserB   ranger    authGSSClientUnwrapauthGSSClientWrapauthGSSClientCleanKrbError)r   r   r3   r5   propshostservice	principalresultrL   r   r   r'   rP   response_excrb   rb   rc   _authenticate_gssapi   s   






r   c                 C  sH   | j }| j}| j}d| d|  }ddt|dd}||| dS )z(Authenticate using SASL PLAIN (RFC 4616) r,   PLAINr   N)r8   r3   r5   r6   r   rB   )r   r   r8   r3   r5   r'   rP   rb   rb   rc   _authenticate_plain/  s   r   c                 C  s6   |j }|r| rdS t| |j }|d| dS )z Authenticate using MONGODB-X509.Nr   )r<   r=   _X509Contextr   speculate_commandrB   )r   r   rL   rP   rb   rb   rc   _authenticate_x509>  s
   r   c           	      C  sT   | j }| j}| j}||ddi}|d }t|||}d|||d}||| dS )zAuthenticate using MONGODB-CR.getnoncer,   rM   )authenticater   rM   keyN)r8   r3   r5   rB   rl   )	r   r   r8   r3   r5   r   rM   r   queryrb   rb   rc   _authenticate_mongo_crI  s   r   c                 C  s|   |j dkr8|jr|j}n| j}| }|d | j |d< |j||dddg }d|v r2t| |dS t| |dS t| |dS )N   r   saslSupportedMechsF)publish_eventsr#   SCRAM-SHA-1)max_wire_versionnegotiated_mechsr8   	hello_cmdr3   rB   getrd   )r   r   mechsr8   rP   rb   rb   rc   _authenticate_defaultX  s   
r   r   )r   r#   )	r   z
MONGODB-CRMONGODB-X509zMONGODB-AWSMONGODB-OIDCr   r   r#   DEFAULTz!Mapping[str, Callable[..., None]]	_AUTH_MAPc                   @  sB   e Zd ZdddZedddZdddZdddZdddZdS )_AuthContextr   r   r   tuple[str, int]r!   r"   c                 C  s   || _ d | _|| _d S N)r   rA   r   )selfr   r   rb   rb   rc   __init__w  s   
z_AuthContext.__init__credsOptional[_AuthContext]c                 C  s$   t | j}|rtt|| |S d S r   )_SPECULATIVE_AUTH_MAPr   r   r   r   )r   r   spec_clsrb   rb   rc   from_credentials|  s   z_AuthContext.from_credentials"Optional[MutableMapping[str, Any]]c                 C  s   t r   )NotImplementedErrorr   rb   rb   rc   r     s   z_AuthContext.speculate_commandhelloHello[Mapping[str, Any]]c                 C  s   |j | _ d S r   )rA   )r   r   rb   rb   rc   parse_response  s   z_AuthContext.parse_responseboolc                 C  s
   t | jS r   )r   rA   r   rb   rb   rc   r=     s   
z _AuthContext.speculate_succeededN)r   r   r   r   r!   r"   )r   r   r   r   r!   r   r!   r   )r   r   r!   r"   )r!   r   )	__name__
__module____qualname__r   staticmethodr   r   r   r=   rb   rb   rb   rc   r   v  s    


r   c                      s(   e Zd Zd fd	d
ZdddZ  ZS )r?   r   r   r   r   r   r    r!   r"   c                   s   t  || d | _|| _d S r   )superr   r@   r   )r   r   r   r   	__class__rb   rc   r     s   
z_ScramContext.__init__r   c                 C  s.   t | j| j\}}}| jj|d< ||f| _|S Ndb)r   r   r   r8   r@   )r   rM   rN   rP   rb   rb   rc   r     s   
z_ScramContext.speculate_command)r   r   r   r   r   r    r!   r"   r   )r   r   r   r   r   __classcell__rb   rb   r   rc   r?     s    r?   c                   @     e Zd ZdddZdS )r   r!   MutableMapping[str, Any]c                 C  s&   ddd}| j jd ur| j j|d< |S )Nr,   r   )r   r   r   )r   r3   )r   rP   rb   rb   rc   r     s   
z_X509Context.speculate_commandN)r!   r   r   r   r   r   rb   rb   rb   rc   r         r   c                   @  r   )_OIDCContextr!   r   c                 C  s2   t | j| j}| }|d u rd S | jj|d< |S r   )r   r   r   get_spec_auth_cmdr8   )r   authenticatorrP   rb   rb   rc   r     s   z_OIDCContext.speculate_commandNr   r   rb   rb   rb   rc   r     r   r   )r   r   r#   r   r   zMapping[str, Any]r   reauthenticater   c                 C  s4   | j }t| }|dkrt| || dS || | dS )zAuthenticate connection.r   N)r   r   r   )r   r   r   r   	auth_funcrb   rb   rc   r     s
   r   )r   r   r   r   r   r    r!   r"   )r3   r    r5   r    r!   r    )rM   r    r3   r    r5   r    r!   r    )rm   r    r!   r    )r   r   r   r   r!   r"   )F)r   r   r   r   r   r   r!   r"   )F__doc__
__future__r   	functoolsr4   r:   rn   base64r   r   typingr   r   r   r   r	   r
   r   urllib.parser   bson.binaryr   pymongo.auth_sharedr   r   r   r   pymongo.errorsr   r   pymongo.saslprepr   pymongo.synchronous.auth_awsr   pymongo.synchronous.auth_oidcr   r   pymongo.hellor   pymongo.synchronous.poolr   r   r   winkerberosr   tuplemaprC   __version__r   ImportError_IS_SYNCrd   r7   rl   r|   r   r   r   r   r   partialr   __annotations__r   r?   r   r   r   r   rb   rb   rb   rc   <module>   s   $	"

S

	

o



