Ë
    Ü_Ëi�@  ã            
      óJ  — 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$ 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. e/ e0e1e.jd                  jg                  d«      dd «      «      dk\  rdZ,dZ5d/d„Z6d0d„Z7d1d„Z8d2d„Z9d3d„Z:d3d„Z;d3d„Z<d3d„Z=e:e<e!e#e; ej|                  e6d¬«       ej|                  e6d¬«      e=d œZ?d!e@d"<    G d#„ d$«      ZA G d%„ d&eA«      ZB G d'„ d(eA«      ZC G d)„ d*eA«      ZDeC ej|                  eBd¬«       ej|                  eBd¬«      eD ej|                  eBd¬«      d+œZEd,e@d-<   	 d4	 	 	 	 	 	 	 d5d.„ZFy# e4$ r 	 ddl.Z.n# e4$ 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)Ú_getaddrinfo)Ú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Ú	mechanismr0   rD   Ú	digestmodrB   r5   r6   Ú_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/pod-logistic/pod-api/venv/lib/python3.12/site-packages/pymongo/synchronous/auth.pyÚ_authenticate_scramrc   G   s:  € à×#Ñ#€HØ�OÒ#ØˆÜ—N‘Nˆ	Ü˜×,Ñ,Ó-×4Ñ4°WÓ=‰àˆÜ—L‘Lˆ	Ü ¨+×*>Ñ*>Ó?×FÑFÀwÓOˆØ×Ñ€FØ×Ñ€Eô �I‰I€Eà
�-‰-€CÙ
ˆs×&Ñ&Ô(Ü˜#œ}Ô-Ð-Ð-Ø�~‰~Ð)Ð)Ð)ØŸN™NÑˆˆzØ×*Ñ*‰ä!:¸;È	Ó!RÑˆˆz˜3Ø�l‰l˜6 3Ó'ˆàˆ?Ðˆ?Ø�y‘>€LÜ" <Ó0€FÜ�V˜D‘\Ó"€JØ�DÒÜÐLÓMÐMØ�$‰<€DØ�D‰\€FØ×Ñ˜UÔ#ÜÐBÓCÐCà  6Ñ)€MØ‡z‚zØ5:·Z±ZÑ2ˆ
�J ¡{à5KÑ2ˆ
�J  {ñ ˜ š¨*¸Ò*CÜ×)Ñ)¨&°$Ô8JÈ4Ó8PÐR\Ó]ˆÙ˜;¨°yÓA×HÑHÓJˆ
Ù˜;¨°yÓA×HÑHÓJˆ
Ø  *¨d°JÐ?ˆŒ
Ù˜:Ó&×-Ñ-Ó/€JØ�y‰y˜* l°MÐBÓC€HÙ�z 8¨YÓ7×>Ñ>Ó@€JØÔ-¬d°:¸zÓ.JÓKÑK€LØ—9‘9˜m¨\Ð:Ó;€Lä#¡E¨*°hÀ	Ó$J×$QÑ$QÓ$SÓT€Jð ØÐ.Ñ/Ü˜,Ó'ñ€Cð
 �,‰,�v˜sÓ
#€Cä" 3 y¡>Ó2€FÜ×Ñ˜v d™|¨ZÔ8ÜÐFÓGÐGð ˆvŠ;àØ!Ð"2Ñ3Ü˜c“{ñ
ˆð
 �l‰l˜6 3Ó'ˆØ�6Š{Ü"Ð#JÓKÐKð ð r/   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Útyper1   Úmd5Úupdater3   Ú	hexdigest)r0   r2   Úmd5hashrB   s       rb   r4   r4   š   s‘   € ä�h¤Ô$ÜÐ=Ó>Ð>Ü
ˆ8ƒ}˜ÒÜÐ2Ó3Ð3Ü�h¤Ô$ÜÐCÄDÈÃNÐCSÐTÓUÐUä�k‰k‹m€GØˆZ�w˜x˜jÐ)€DØ‡N�N�4—;‘;˜wÓ'Ô(Ø×ÑÓÐr/   c                ó²   — t        ||«      }t        j                  «       }| › |› |› �}|j                  |j	                  d«      «       |j                  «       S )z*Get an auth key to use for authentication.r"   )r4   r1   rj   rk   r3   rl   )rM   r0   r2   rD   rm   rB   s         rb   Ú	_auth_keyro   ©   sO   € ä˜h¨Ó1€FÜ�k‰k‹m€GØˆW�X�J˜v˜hÐ'€DØ‡N�N�4—;‘;˜wÓ'Ô(Ø×ÑÓÐr/   c                óf  — |dv r| S t        | dddt        j                  t        j                  ¬«      d   \  }}}}}|dk(  r|j	                  «       S 	 t        j
                  |t        j                  «      }|d   j	                  «       S # t        j                  $ r |j	                  «       cY S w xY w)z2Canonicalize hostname following MIT-krb5 behavior.)FÚnoneNr   )Úfamilyri   ÚprotoÚflagsÚforward)r   ÚsocketÚIPPROTO_TCPÚAI_CANONNAMEÚlowerÚgetnameinfoÚNI_NAMEREQDÚgaierror)ÚhostnameÚoptionÚafÚsocktypers   Ú	canonnameÚsockaddrÚnames           rb   Ú_canonicalize_hostnamer„   ²   s¸   € ð �Ñ Øˆô 	ØØØØÜ×$Ñ$Ü×%Ñ%ô	
ð ñ	0	Ñ,€Bˆ�%˜ Hð �ÒØ�‰Ó Ð ð!Ü×!Ñ! (¬F×,>Ñ,>Ó?ˆð �‰7�=‰=‹?Ðøô �?‰?ò !Ø�‰Ó Ò ð!ús   Á$B
 Â
#B0Â/B0c                óÄ  — t         st        d«      ‚	 | j                  }| j                  }| j                  }|j
                  xs |j                  d   }t        ||j                  «      }|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(                  |	t1        |d   «      «      }|dk(  rt'        d«      ‚t        j*                  |	«      xs d
}d|d   |dœ}|j-                  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|«       t        j6                  |	«       y# t        j6                  |	«       w xY w# t        j8                  $ r}t'        t1        |«      «      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Údomainr2   z&Kerberos context failed to initialize.Ú z*Unknown kerberos failure in step function.ÚGSSAPI©Ú	saslStartrI   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   r0   r2   Úmechanism_propertiesÚservice_hostÚaddressr„   Úcanonicalize_host_nameÚservice_nameÚservice_realmÚ_USE_PRINCIPALrE   r   ÚkerberosÚauthGSSClientInitÚGSS_C_MUTUAL_FLAGÚsplitÚAUTH_GSS_COMPLETEr   ÚauthGSSClientStepÚauthGSSClientResponser?   Úrangere   ÚauthGSSClientUnwrapÚauthGSSClientWrapÚauthGSSClientCleanÚKrbError)rG   rH   r0   r2   ÚpropsÚhostÚserviceÚ	principalÚresultrL   r‰   rŠ   r$   rP   ÚresponseÚ_Úexcs                    rb   Ú_authenticate_gssapir¯   Ï   sF  € åÜ ØSó
ð 	
ðd3Ø×'Ñ'ˆØ×'Ñ'ˆØ×0Ñ0ˆð ×!Ñ!Ò4 T§\¡\°!¡_ˆÜ% d¨E×,HÑ,HÓIˆØ×$Ñ$ sÑ*¨TÑ1ˆØ×ÑÐ*Ø ‘m e×&9Ñ&9Ñ9ˆGàÐÝð  ŸH™H¤e¨H£o´u¸X³Ð%GÓH�	Ü&×8Ñ8Ø˜Y´×1KÑ1Kô‘�™ð ˜(‘?Ø#+§>¡>°#°qÓ#9‘L�D™&à#+¨T˜&�DÜ&×8Ñ8ØÜ%×7Ñ7ØØ!Ø%ô‘�™ô #×4Ñ4°WÄx×GaÑGaÔb‰KˆF�Cà”X×/Ñ/Ò/Ü"Ð#KÓLÐLð:	-ô
 ×)Ñ)¨#¨rÓ2°aÒ7Ü&Ð'SÓTÐTô ×4Ñ4°SÓ9ˆGàØ%Ø"Ø!"ñ	ˆCð —|‘| K°Ó5ˆHô ˜2“Yò V�Ü!×3Ñ3°C¼¸XÀiÑ=PÓ9QÓR�Ø˜R’<Ü*Ð+WÓXÐXä"×8Ñ8¸Ó=ÒCÀ�ð %&Ø&.Ð/?Ñ&@Ø&ñ�ð
  Ÿ<™<¨°SÓ9�àœX×7Ñ7Ó7ÙðVô" 'Ð'TÓUÐUô ×+Ñ+¨C´°X¸iÑ5HÓ1IÓJÈaÒOÜ&Ð'YÓZÐZä×)Ñ)¨#¬x×/MÑ/MÈcÓ/RÐT\Ó]ÐabÒbÜ&Ð'WÓXÐXä×4Ñ4°SÓ9ˆGà !Ø"*Ð+;Ñ"<Ø"ñˆCð
 �L‰L˜ cÔ*ô ×'Ñ'¨Õ,øŒH×'Ñ'¨Õ,ûä×Ñò 3Üœs 3›xÓ(¨dÐ2ûð3ús8   “E.L2 ÆCL ÉB&L ÌL2 ÌL/Ì/L2 Ì2MÍ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)r5   r0   r2   r3   r   r?   )rG   rH   r5   r0   r2   r$   rP   s          rb   Ú_authenticate_plainr³   =  se   € à×Ñ€FØ×#Ñ#€HØ×#Ñ#€HØ�h�Z˜t H :Ð.×6Ñ6Ó8€GàØÜ˜'“?Øñ	€Cð 	‡L�L�˜Õr/   c                ó®   — |j                   }|r|j                  «       ryt        | |j                  «      j	                  «       }|j                  d|«       y)z Authenticate using MONGODB-X509.Nr�   )r9   r:   Ú_X509Contextr–   Úspeculate_commandr?   )rG   rH   rL   rP   s       rb   Ú_authenticate_x509r·   L  sC   € à
�-‰-€CÙ
ˆs×&Ñ&Ô(àä
�{ D§L¡LÓ
1×
CÑ
CÓ
E€CØ‡L�L�˜cÕ"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_mechsr5   Ú	hello_cmdr0   r?   Úgetrc   )rG   rH   Úmechsr5   rP   s        rb   Ú_authenticate_defaultrÂ   W  s­   € Ø×Ñ Ò!Ø× Ò Ø×)Ñ)‰Eà ×'Ñ'ˆFØ—.‘.Ó"ˆCØ(.°©°{×7KÑ7KÑ(KˆCÐ$Ñ%Ø—\‘\ &¨#¸e�\ÓD×IÑIÐJ^Ð`bÓcˆEØ˜eÑ#Ü& {°D¸/ÓJÐJä& {°D¸-ÓHÐHä" ;°°mÓDÐDr/   r¼   )rI   r    )rŒ   ú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)rG   r>   r–   )ÚselfrG   r–   s      rb   Ú__init__z_AuthContext.__init__u  s   € Ø&ˆÔØEIˆÔ%Øˆ�r/   c                ót   — t         j                  | j                  «      }|rt        t         || |«      «      S y rÊ   )Ú_SPECULATIVE_AUTH_MAPrÀ   rI   r   rÈ   )Úcredsr–   Úspec_clss      rb   Úfrom_credentialsz_AuthContext.from_credentialsz  s2   € ô )×,Ñ,¨U¯_©_Ó=ˆÙÜœ¡h¨u°gÓ&>Ó?Ð?Ør/   c                ó   — t         ‚rÊ   )ÚNotImplementedError©rË   s    rb   r¶   z_AuthContext.speculate_commandƒ  s   € Ü!Ð!r/   c                ó&   — |j                   | _         y rÊ   )r>   )rË   Úhellos     rb   Úparse_responsez_AuthContext.parse_response†  s   € Ø(-×(FÑ(FˆÕ%r/   c                ó,   — t        | j                  «      S rÊ   )Úboolr>   rÔ   s    rb   r:   z _AuthContext.speculate_succeeded‰  s   € Ü�D×1Ñ1Ó2Ð2r/   N)rG   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:   © r/   rb   rÈ   rÈ   t  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=   rI   )rË   rG   r–   rI   Ú	__class__s       €rb   rÌ   z_ScramContext.__init__Ž  s"   ø€ ô 	‰Ñ˜ gÔ.Ø9=ˆŒØ"ˆ�r/   c                ó’   — t        | j                  | j                  «      \  }}}| j                  j                  |d<   ||f| _        |S ©NÚdb)r   rG   rI   r5   r=   )rË   rM   rN   rP   s       rb   r¶   z_ScramContext.speculate_command•  sE   € Ü!:¸4×;KÑ;KÈTÏ^É^Ó!\Ñˆˆz˜3à×$Ñ$×+Ñ+ˆˆD‰	à  *Ð-ˆŒØˆ
r/   )rG   r   r–   rÚ   rI   re   rÛ   rÜ   rÝ   )rÞ   rß   rà   rÌ   r¶   Ú__classcell__)ræ   s   @rb   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Ã   )ÚauthenticaterI   r‰   )rG   r0   )rË   rP   s     rb   r¶   z_X509Context.speculate_commandŸ  s8   € Ø ¨~Ñ>ˆØ×Ñ×$Ñ$Ð0Ø×*Ñ*×3Ñ3ˆC�‰KØˆ
r/   N)rÛ   zMutableMapping[str, Any]©rÞ   rß   rà   r¶   râ   r/   rb   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   rG   r–   Úget_spec_auth_cmdr5   )rË   ÚauthenticatorrP   s      rb   r¶   z_OIDCContext.speculate_command§  sH   € Ü*¨4×+;Ñ+;¸T¿\¹\ÓJˆØ×-Ñ-Ó/ˆØˆ;ØØ×$Ñ$×+Ñ+ˆˆD‰	Øˆ
r/   NrÝ   rî   râ   r/   rb   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)rI   rÆ   r   )rG   rH   ÚreauthenticaterI   Ú	auth_funcs        rb   rí   rí   ¹  s7   € ð ×%Ñ%€IÜ˜)Ñ$€IØ�NÒ"Ü˜;¨¨nÕ=á�+˜tÕ$r/   )rG   r   rH   r   rI   re   rÛ   rÜ   )r0   re   r2   re   rÛ   re   )rM   re   r0   re   r2   re   rÛ   re   )r}   re   r~   z
str | boolrÛ   re   )rG   r   rH   r   rÛ   rÜ   )F)rG   r   rH   r   rõ   rÙ   rÛ   rÜ   )GÚ__doc__Ú
__future__r   Ú	functoolsr1   r7   rv   Ú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.synchronous.helpersr   Úpymongo.hellor   Úpymongo.synchronous.poolr   r“   rš   Úwinkerberosr›   ÚtupleÚmapr@   Ú__version__rž   ÚImportErrorÚ_IS_SYNCrc   r4   ro   r„   r¯   r³   r·   rÂ   ÚpartialrÆ   Ú__annotations__rÈ   r<   rµ   rð   rÎ   rí   râ   r/   rb   ú<module>r     só  ðò Ý "ã Û Û Û ß 9÷÷ ñ õ å ÷ó ÷ @Ý %Ý :÷õ 5áÝ#Ý3à€Ø€ð	Û"á‰S��h×*Ñ*×0Ñ0°Ó5°b°qÐ9Ó:Ó;¸vÒEØˆð €óPLófóóó:k3ó\ó#óEð$ #Ø&Ø$Ø&Ø Ø$�9×$Ñ$Ð%8ÀMÔRØ&�Y×&Ñ&Ð':ÀoÔVØ$ñ	0€	Ð,ó 	÷3ñ 3ô2�Lô ô"�<ô ô�<ô ð !Ø$�9×$Ñ$ ]¸mÔLØ&�Y×&Ñ& }ÀÔPØ Ø ˆy× Ñ  ¸/ÔJñ,Ð Ð(ó ð LQð	%Ø ð	%Ø(2ð	%ØDHð	%à	ô	%øðy ò ðÜøØò ØŠðüðús6   Â4F ÆF"ÆFÆF"ÆFÆF"ÆFÆF"Æ!F"