
    l hA              
      ^   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mZ ddlmZ ddlmZ ddlmZ dd	l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$m%Z% ddl&m'Z' erddl(m)Z) ddl*m+Z+ dZ,dZ-	 ddl.Z/ e0 e1e2e/jf                  ji                  d      dd             dk\  rdZ-dZ6	 	 	 	 	 	 	 	 d/dZ7d0dZ8d1dZ9d2dZ:d3dZ;d3dZ<d3dZ=d3dZ>e;e=eee< ej~                  e7d       ej~                  e7d      e>d Z@d!eAd"<    G d# d$      ZB G d% d&eB      ZC G d' d(eB      ZD G d) d*eB      ZEeD ej~                  eCd       ej~                  eCd      eE ej~                  eCd      d+ZFd,eAd-<   	 d4	 	 	 	 	 	 	 d5d.ZGy# e5$ r 	 ddl/Z/n# e5$ 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	CoroutineMappingMutableMappingOptionalcast)quote)Binary)_authenticate_aws)_authenticate_oidc_get_authenticator)_getaddrinfo)MongoCredential_authenticate_scram_start_parse_scram_response_xor)ConfigurationErrorOperationFailure)saslprep)AsyncConnection)HelloTF.   )r      c                  K   | 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'                  ||       d{   }|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'                  ||       d{   }t)        |d         }t        j@                  |d   |      st-        d      |d   s=d|d   t?        d      d}|j'                  ||       d{   }|d   st-        d      yy7 7 |7 w)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	mechanismr1   rE   	digestmodrC   r6   r7   _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                                    /var/www/html/SchoolMeal/SchoolMeal/pds_admin_SchoolMeal/Backend/venv/lib/python3.12/site-packages/pymongo/asynchronous/auth.py_authenticate_scramrd   H   s\     ##HO#NN	,,-44W=LL	+*>*>?FFwOFE IIE
--C
s&&(#}---~~)))NNz**!:;	!Rz3LL--??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{

 LL--6{"#JKK  _ .N * .s8   D'M)M*F#MM
A"M0M1M
MMc                N   t        |t              st        d      t        |      dk(  rt	        d      t        | t              st        dt        |              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 str, not z:mongo:r#   )r<   str	TypeErrorlen
ValueErrortyper2   md5updater4   	hexdigest)r1   r3   md5hashrC   s       rc   r5   r5      s    h$=>>
8}233h$CDNCSTUUkkmGZwxj)DNN4;;w'(r0   c                    t        ||      }t        j                         }|  | | }|j                  |j	                  d             |j                         S )z*Get an auth key to use for authentication.r#   )r5   r2   rk   rl   r4   rm   )rN   r1   r3   rE   rn   rC   s         rc   	_auth_keyrp      sO    h1FkkmGWXJvh'DNN4;;w'(r0   c                  K   |dv r| S t        | dddt        j                  t        j                         d{   d   \  }}}}}|dk(  r|j	                         S 	 t        j
                  |t        j                        }|d   j	                         S 7 Z# t        j                  $ r |j	                         cY S w xY ww)z2Canonicalize hostname following MIT-krb5 behavior.)FnoneNr   )familyrj   protoflagsforward)r   socketIPPROTO_TCPAI_CANONNAMElowergetnameinfoNI_NAMEREQDgaierror)hostnameoptionafsocktypert   	canonnamesockaddrnames           rc   _canonicalize_hostnamer      s        $$%%
 	
 	0	,B%H   !!!(F,>,>? 7==?'	
  ?? !  !s3   7B?B"B?$B B?#B<9B?;B<<B?c                   K   t         st        d      	 | j                  }| j                  }| j                  }|j
                  xs |j                  d   }t        ||j                         d{   }|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|       d{   }t/        d      D ]  }t        j(                  |	t1        |d               }|dk(  rt'        d      t        j*                  |	      xs d
}d|d   |d}|j-                  d|       d{   }|t        j$                  k(  s n t'        d      t        j2                  |	t1        |d               dk7  rt'        d      t        j4                  |	t        j*                  |	      |      dk7  rt'        d      t        j*                  |	      }d|d   |d}|j-                  d|       d{    t        j6                  |	       y7 7 \7 7 "# t        j6                  |	       w xY w# t        j8                  $ r}t'        t1        |            dd}~ww xY ww)zAuthenticate using GSSAPI.zEThe "kerberos" module must be installed to use GSSAPI authentication.r   N@:)gssflagsr*   )r   userdomainr3   z&Kerberos context failed to initialize. z*Unknown kerberos failure in step function.GSSAPI	saslStartrJ   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   r1   r3   mechanism_propertiesservice_hostaddressr   canonicalize_host_nameservice_nameservice_realm_USE_PRINCIPALrF   r   kerberosauthGSSClientInitGSS_C_MUTUAL_FLAGsplitAUTH_GSS_COMPLETEr   authGSSClientStepauthGSSClientResponser@   rangerf   authGSSClientUnwrapauthGSSClientWrapauthGSSClientCleanKrbError)rH   rI   r1   r3   propshostservice	principalresultrM   r   r   r%   rQ   response_excs                    rc   _authenticate_gssapir      sv     S
 	
d3''''00 !!4T\\!_+D%2N2NOO$$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 "\\+s;;H 2Y V!33CXi=P9QRR<*+WXX"88=C %&&./?&@&
 "&k3!??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
 ,,{C000 '',u Pf < @* 1 '', 3s3x(d23s   NAM /L:0DM AM !L="A;M M M 6B)M M M $M 9N:M =M  M M MM N1NNNc                   K   | j                   }| j                  }| j                  }d| d| j                         }ddt	        |      dd}|j                  ||       d{    y7 w)z(Authenticate using SASL PLAIN (RFC 4616) r*   PLAINr   N)r6   r1   r3   r4   r   r@   )rH   rI   r6   r1   r3   r%   rQ   s          rc   _authenticate_plainr   @  so     F##H##HhZtH:.668G'?	C ,,vs
###s   A A*"A(#A*c                   K   |j                   }|r|j                         ryt        | |j                        j	                         }|j                  d|       d{    y7 w)z Authenticate using MONGODB-X509.Nr   )r:   r;   _X509Contextr   speculate_commandr@   )rH   rI   rM   rQ   s       rc   _authenticate_x509r   O  sM     
--C
s&&(
{DLL
1
C
C
EC
,,{C
(((s   AA#A!A#c                  K   |j                   dk\  r|j                  r|j                  }n]| j                  }|j                         }|dz   | j                  z   |d<   |j                  ||d       d {   j                  dg       }d|v rt        | |d       d {   S t        | |d       d {   S t        | |d       d {   S 7 W7 07 7 
w)N   r   saslSupportedMechsF)publish_eventsr!   SCRAM-SHA-1)max_wire_versionnegotiated_mechsr6   	hello_cmdr1   r@   getrd   )rH   rI   mechsr6   rQ   s        rc   _authenticate_defaultr   Z  s     !  ))E ''F.."C(.{7K7K(KC$%<<E<JJOO$bE e#,[$PPP,[$NNN(dMJJJ K QNJsH   A1C3C4(CCC1C2CCCCCCr   )rJ   r!   )r   MONGODB-X509zMONGODB-AWSMONGODB-OIDCr   r   r!   DEFAULTz6Mapping[str, Callable[..., Coroutine[Any, Any, 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)rH   r?   r   )selfrH   r   s      rc   __init__z_AuthContext.__init__z  s    &EI%r0   c                t    t         j                  | j                        }|rt        t         || |            S y r   )_SPECULATIVE_AUTH_MAPr   rJ   r   r   )credsr   spec_clss      rc   from_credentialsz_AuthContext.from_credentials  s2     ),,U__=hug&>??r0   c                    t         r   )NotImplementedErrorr   s    rc   r   z_AuthContext.speculate_command  s    !!r0   c                &    |j                   | _         y r   )r?   )r   hellos     rc   parse_responsez_AuthContext.parse_response  s    (-(F(F%r0   c                ,    t        | j                        S r   )boolr?   r   s    rc   r;   z _AuthContext.speculate_succeeded  s    D1122r0   N)rH   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   r;    r0   rc   r   r   y  sC    
 )8	 "G3r0   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>   rJ   )r   rH   r   rJ   	__class__s       rc   r   z_ScramContext.__init__  s"     	g.9="r0   c                    t        | j                  | j                        \  }}}| j                  j                  |d<   ||f| _        |S Ndb)r   rH   rJ   r6   r>   )r   rN   rO   rQ   s       rc   r   z_ScramContext.speculate_command  sE    !:4;K;KT^^!\z3$$++D	 *-
r0   )rH   r   r   r   rJ   rf   r   r   r   )r   r   r   r   r   __classcell__)r   s   @rc   r=   r=     s-    #*#5D#QT#	#r0   r=   c                      e Zd ZddZy)r   c                n    ddd}| j                   j                  | j                   j                  |d<   |S )Nr*   r   )authenticaterJ   r   )rH   r1   )r   rQ   s     rc   r   z_X509Context.speculate_command  s8     ~>$$0**33CK
r0   N)r   zMutableMapping[str, Any]r   r   r   r   r   r0   rc   r   r     s    r0   r   c                      e Zd ZddZy)_OIDCContextc                    t        | j                  | j                        }|j                         }|y | j                  j                  |d<   |S r   )r   rH   r   get_spec_auth_cmdr6   )r   authenticatorrQ   s      rc   r   z_OIDCContext.speculate_command  sH    *4+;+;T\\J--/;$$++D	
r0   Nr   r   r   r0   rc   r   r     s    r0   r   )r   r   r!   r   r   zMapping[str, Any]r   c                   K   | j                   }t        |   }|dk(  rt        | ||       d{    y || |       d{    y7 7 w)zAuthenticate connection.r   N)rJ   r   r   )rH   rI   reauthenticaterJ   	auth_funcs        rc   r   r     sQ      %%I)$IN" dNCCCT*** 	D*s    +A	AA	A A	A	)rH   r   rI   r   rJ   rf   r   r   )r1   rf   r3   rf   r   rf   )rN   rf   r1   rf   r3   rf   r   rf   )r~   rf   r   z
str | boolr   rf   )rH   r   rI   r   r   r   )F)rH   r   rI   r   r   r   r   r   )H__doc__
__future__r   	functoolsr2   r8   rw   base64r   r   typingr   r   r   r	   r
   r   r   r   urllib.parser   bson.binaryr   pymongo.asynchronous.auth_awsr   pymongo.asynchronous.auth_oidcr   r   pymongo.asynchronous.helpersr   pymongo.auth_sharedr   r   r   r   pymongo.errorsr   r   pymongo.saslprepr   pymongo.asynchronous.poolr   pymongo.hellor   r   r   winkerberosr   tuplemaprA   __version__r   ImportError_IS_SYNCrd   r5   rp   r   r   r   r   r   partialr   __annotations__r   r=   r   r   r   r   r   r0   rc   <module>r     s    "     9	 	 	   ; 6  @ %9#	"Sh**005bq9:;vE RL RL(7RLDGRL	RLj:k3\$)K( #&$& $9$$%8MR&Y&&':oV$	E	A 	3 32L "< <  !$9$$]mL&Y&&}P  y  /J, (  QV	+ 	+(7	+IM	+		+A   s6   4F F,FF,F&#F,%F&&F,+F,