
    l8'hA                    H   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rddl%m&Z& ddl'm(Z( dZ)dZ*	 ddl+Z, e- e.e/e,j`                  jc                  d      dd             dk\  rdZ*dZ3d/dZ4d0dZ5d1dZ6d2dZ7d3dZ8d3dZ9d3dZ:d3dZ;d3dZ<e8e;e:e!e#e9 ejz                  e4d       ejz                  e4d      e<d 	Z>d!e?d"<    G d# d$      Z@ G d% d&e@      ZA G d' d(e@      ZB G d) d*e@      ZCeB ejz                  eAd       ejz                  eAd      eC ejz                  eAd      d+ZDd,e?d-<   	 d4	 	 	 	 	 	 	 d5d.ZEy# e2$ r 	 ddl,Z,n# e2$ r dZ)Y nw xY wY w xY w)6z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      c                Z   | j                   }|dk(  r7d}t        j                  }t        | j                        j                  d      }n7d}t        j                  }t        || j                        j                  d      }| j                  }| j                  }t        j                  }	|j                  }
|
rL|
j                         r<t        |
t              sJ |
j                   J |
j                   \  }}|
j"                  }n"t%        | |      \  }}}|j'                  ||      }|J |d   }t)        |      }t+        |d         }|dk  rt-        d	      |d
   }|d   }|j/                  |      st-        d      d|z   }|j0                  r|j0                  \  }}}}nd\  }}}}|r
||k7  s||k7  r\t        j2                  ||t5        |      |      } |	|d|      j7                         } |	|d|      j7                         }||||f|_         ||      j7                         }dj9                  |||f      } |	|||      j7                         }dt;        t=        ||            z   }dj9                  ||f      }t;         |	|||      j7                               }d|d   t?        |      d}|j'                  ||      }t)        |d         }t        j@                  |d   |      st-        d      |d   s5d|d   t?        d      d}|j'                  ||      }|d   st-        d      yy)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) credentialsconn	mechanismr/   rC   	digestmodrA   r4   r5   _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_sigs                                    T/var/www/html/trade_iq/venv/lib/python3.12/site-packages/pymongo/synchronous/auth.py_authenticate_scramrb   F   s:   ##HO#NN	,,-44W=LL	+*>*>?FFwOFE IIE
--C
s&&(#}---~~)))NNz**!:;	!Rz3ll63'??y>L"<0FVD\"JDLMM$<DD\FU#BCC 6)Mzz5:ZZ2
J{5K2
J{ **C))&$8J48PR\];yAHHJ
;yAHHJ
 *dJ?
:&--/Jyy*lMBCHz8Y7>>@J-d:z.JKKL99m\:;L#E*h	$J$Q$Q$STJ ./,'C
 ,,vs
#C"3y>2Fvd|Z8FGG v;!"23c{

 ll63'6{"#JKK  r.   c                6   t        |t              st        d      t        |      dk(  rt	        d      t        | t              st        d      t        j                         }|  d| }|j                  |j                  d             |j                         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:   str	TypeErrorlen
ValueErrorr0   md5updater2   	hexdigest)r/   r1   md5hashrA   s       ra   r3   r3      s    h$=>>
8}233h$=>>kkmGZwxj)DNN4;;w'(r.   c                    t        ||      }t        j                         }|  | | }|j                  |j	                  d             |j                         S )z*Get an auth key to use for authentication.r!   )r3   r0   rh   ri   r2   rj   )rL   r/   r1   rC   rk   rA   s         ra   	_auth_keyrm      sO    h1FkkmGWXJvh'DNN4;;w'(r.   c                B   t        j                  | dddt         j                  t         j                        d   \  }}}}}	 t        j                  |t         j
                        }|d   j                         S # t         j                  $ r |j                         cY S w xY w)z2Canonicalize hostname following MIT-krb5 behavior.Nr   )socketgetaddrinfoIPPROTO_TCPAI_CANONNAMEgetnameinfoNI_NAMEREQDgaierrorlower)hostnameafsocktypeproto	canonnamesockaddrnames          ra   _canonicalize_hostnamer~      s     06/A/A$1f00&2E2E00	,B%H!!!(F,>,>? 7==? ?? !  !s   $A8 8#BBc                   t         st        d      	 | j                  }| j                  }| j                  }|j
                  d   }|j                  rt        |      }|j                  dz   |z   }|j                  |dz   |j                  z   }|t        rOdj                  t        |      t        |      f      }t        j                  ||t        j                        \  }}	nrd|v r|j!                  dd      \  }
}n|d}}
t        j                  |t        j                  |
||      \  }}	n(t        j                  |t        j                        \  }}	|t        j"                  k7  rt%        d	      	 t        j&                  |	d
      dk7  rt%        d      t        j(                  |	      }dd|dd}|j+                  d|      }t-        d      D ]}  }t        j&                  |	t/        |d               }|dk(  rt%        d      t        j(                  |	      xs d
}d|d   |d}|j+                  d|      }|t        j"                  k(  s} n t%        d      t        j0                  |	t/        |d               dk7  rt%        d      t        j2                  |	t        j(                  |	      |      dk7  rt%        d      t        j(                  |	      }d|d   |d}|j+                  d|       t        j4                  |	       y# t        j4                  |	       w xY w# t        j6                  $ r}t%        t/        |            dd}~ww xY w)zAuthenticate using GSSAPI.zEThe "kerberos" module must be installed to use GSSAPI authentication.r   @N:)gssflagsr(   )r   userdomainr1   z&Kerberos context failed to initialize. z*Unknown kerberos failure in step function.GSSAPI	saslStartrH   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   r/   r1   mechanism_propertiesaddresscanonicalize_host_namer~   service_nameservice_realm_USE_PRINCIPALrD   r   kerberosauthGSSClientInitGSS_C_MUTUAL_FLAGsplitAUTH_GSS_COMPLETEr   authGSSClientStepauthGSSClientResponser>   rangerd   authGSSClientUnwrapauthGSSClientWrapauthGSSClientCleanKrbError)rF   rG   r/   r1   propshostservice	principalresultrK   r   r   r#   rO   response_excs                    ra   _authenticate_gssapir      s<    S
 	
e3''''00 ||A'')$/D$$s*T1*me&9&99G  HHeHouX%GH	&88Y1K1K (?#+>>#q#9LD&#+T&D&88%77!% #44WxGaGabKFCX///"#KLL:	-
 ))#r2a7&'STT 44S9G%"!"	C ||K5H 2Y V!33CXi=P9QRR<*+WXX"88=C %&&./?&@&
  <<S9X777V" ''TUU ++CXi5H1IJaO&'YZZ))#x/M/Mc/RT\]abb&'WXX44S9G !"*+;"<"C
 LLc* '',H'', 3s3x(d23s8   E!L% 5CL B&L 5L% L""L% %M8MMc                    | j                   }| j                  }| j                  }d| d| j                         }ddt	        |      dd}|j                  ||       y)z(Authenticate using SASL PLAIN (RFC 4616) r(   PLAINr   N)r4   r/   r1   r2   r   r>   )rF   rG   r4   r/   r1   r#   rO   s          ra   _authenticate_plainr   /  se    F##H##HhZtH:.668G'?	C 	LLr.   c                    |j                   }|r|j                         ryt        | |j                        j	                         }|j                  d|       y)z Authenticate using MONGODB-X509.Nr   )r8   r9   _X509Contextr   speculate_commandr>   )rF   rG   rK   rO   s       ra   _authenticate_x509r   >  sC    
--C
s&&(
{DLL
1
C
C
ECLLc"r.   c                    | j                   }| j                  }| j                  }|j                  |ddi      }|d   }t	        |||      }d|||d}|j                  ||       y)zAuthenticate using MONGODB-CR.getnoncer(   rL   )authenticater   rL   keyN)r4   r/   r1   r>   rm   )	rF   rG   r4   r/   r1   r   rL   r   querys	            ra   _authenticate_mongo_crr   I  sm    F##H##H||FZO4HWE
E8X
.C 5MELLr.   c                R   |j                   dk\  r|j                  r|j                  }nU| j                  }|j                         }|dz   | j                  z   |d<   |j                  ||d      j                  dg       }d|v rt        | |d      S t        | |d      S t        | |d      S )N   r   saslSupportedMechsF)publish_eventsr   SCRAM-SHA-1)max_wire_versionnegotiated_mechsr4   	hello_cmdr/   r>   getrb   )rF   rG   mechsr4   rO   s        ra   _authenticate_defaultr   X  s    !  ))E ''F.."C(.{7K7K(KC$%\\&#e\DIIJ^`bcEe#&{D/JJ&{D-HH";mDDr.   r   )rH   r   )	r   z
MONGODB-CRMONGODB-X509zMONGODB-AWSMONGODB-OIDCr   r   r   DEFAULTz!Mapping[str, Callable[..., None]]	_AUTH_MAPc                  J    e Zd ZddZe	 	 	 	 	 	 dd       Zd	dZd
dZddZy)_AuthContextc                .    || _         d | _        || _        y N)rF   r=   r   )selfrF   r   s      ra   __init__z_AuthContext.__init__w  s    &EI%r.   c                t    t         j                  | j                        }|rt        t         || |            S y r   )_SPECULATIVE_AUTH_MAPr   rH   r   r   )credsr   spec_clss      ra   from_credentialsz_AuthContext.from_credentials|  s2     ),,U__=hug&>??r.   c                    t         r   )NotImplementedErrorr   s    ra   r   z_AuthContext.speculate_command  s    !!r.   c                &    |j                   | _         y r   )r=   )r   hellos     ra   parse_responsez_AuthContext.parse_response  s    (-(F(F%r.   c                ,    t        | j                        S r   )boolr=   r   s    ra   r9   z _AuthContext.speculate_succeeded  s    D1122r.   N)rF   r   r   tuple[str, int]returnNone)r   r   r   r   r   zOptional[_AuthContext]r   z"Optional[MutableMapping[str, Any]])r   zHello[Mapping[str, Any]]r   r   )r   r   )	__name__
__module____qualname__r   staticmethodr   r   r   r9    r.   ra   r   r   v  sC    
 )8	 "G3r.   r   c                  8     e Zd Z	 	 	 	 	 	 	 	 d fdZddZ xZS )r;   c                B    t         |   ||       d | _        || _        y r   )superr   r<   rH   )r   rF   r   rH   	__class__s       ra   r   z_ScramContext.__init__  s"     	g.9="r.   c                    t        | j                  | j                        \  }}}| j                  j                  |d<   ||f| _        |S Ndb)r   rF   rH   r4   r<   )r   rL   rM   rO   s       ra   r   z_ScramContext.speculate_command  sE    !:4;K;KT^^!\z3$$++D	 *-
r.   )rF   r   r   r   rH   rd   r   r   r   )r   r   r   r   r   __classcell__)r   s   @ra   r;   r;     s-    #*#5D#QT#	#r.   r;   c                      e Zd ZddZy)r   c                n    ddd}| j                   j                  | j                   j                  |d<   |S )Nr(   r   )r   rH   r   )rF   r/   )r   rO   s     ra   r   z_X509Context.speculate_command  s8     ~>$$0**33CK
r.   N)r   zMutableMapping[str, Any]r   r   r   r   r   r.   ra   r   r     s    r.   r   c                      e Zd ZddZy)_OIDCContextc                    t        | j                  | j                        }|j                         }|y | j                  j                  |d<   |S r   )r   rF   r   get_spec_auth_cmdr4   )r   authenticatorrO   s      ra   r   z_OIDCContext.speculate_command  sH    *4+;+;T\\J--/;$$++D	
r.   Nr   r   r   r.   ra   r   r     s    r.   r   )r   r   r   r   r   zMapping[str, Any]r   c                f    | j                   }t        |   }|dk(  rt        | ||       y || |       y)zAuthenticate connection.r   N)rH   r   r   )rF   rG   reauthenticaterH   	auth_funcs        ra   r   r     s7     %%I)$IN";n=+t$r.   )rF   r   rG   r   rH   rd   r   r   )r/   rd   r1   rd   r   rd   )rL   rd   r/   rd   r1   rd   r   rd   )rw   rd   r   rd   )rF   r   rG   r   r   r   )F)rF   r   rG   r   r   r   r   r   )F__doc__
__future__r   	functoolsr0   r6   ro   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mapr?   __version__r   ImportError_IS_SYNCrb   r3   rm   r~   r   r   r   r   r   partialr   __annotations__r   r;   r   r   r   r   r   r.   ra   <module>r     s    "     9      @ % :
 #3	"Sh**005bq9:;vE PLfl3^# E$ #(&$& $9$$%8MR&Y&&':oV$
0	, 
3 32L "< <  !$9$$]mL&Y&&}P  y  /J, (  LQ	% 	%(2	%DH	%		%   s6   ;4F F!FF!FF!FF! F!