Ë
    lQêjä  ã                   ó   — d dl Z d dlZd dlZd dlZd dl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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j4                  e«      Zd	d
gZdZ G d„ d
e«      Z G d„ d	e«      Z y)é    N)Úoverride)Ú	SecretStr)ÚUserIdentityÚServerAuthenticationProviderÚClientAuthProviderÚClientAuthHeadersÚ	AuthError)ÚSystem)ÚChromaAuthError)ÚOpenTelemetryGranularityÚtrace_method)ÚDictÚ!BasicAuthenticationServerProviderÚBasicAuthClientProviderÚAuthorizationc                   óB   ‡ — e Zd ZdZdeddfˆ fd„Zedefd„«       Zˆ xZ	S )r   z�
    Client auth provider for basic auth. The credentials are passed as a
    base64-encoded string in the Authorization header prepended with "Basic ".
    ÚsystemÚreturnNc                 óÖ   •— t         ‰| �  |«       |j                  | _        |j                  j	                  d«       t        t        |j                  j                  «      «      | _        y )NÚchroma_client_auth_credentials)	ÚsuperÚ__init__ÚsettingsÚ	_settingsÚrequirer   Ústrr   Ú_creds)Úselfr   Ú	__class__s     €úg/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/auth/basic_authn/__init__.pyr   z BasicAuthClientProvider.__init__,   sI   ø€ Ü‰Ñ˜Ô ØŸ™ˆŒØ�‰×ÑÐ @ÔAÜ¤ F§O¡O×$RÑ$RÓ SÓTˆ�ó    c                 óÂ   — t        j                  | j                  j                  «       › j	                  d«      «      j                  d«      }t        t        d|› �«      iS )Núutf-8zBasic )Úbase64Ú	b64encoder   Úget_secret_valueÚencodeÚdecodeÚAUTHORIZATION_HEADERr   )r   Úencodeds     r    Úauthenticatez$BasicAuthClientProvider.authenticate2   sY   € ä×"Ñ"Ø�{‰{×+Ñ+Ó-Ð.×6Ñ6°wÓ?ó
ç
‰&�‹/ð 	ô !¤)¨f°W°IÐ,>Ó"?ð
ð 	
r!   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   r   r+   Ú__classcell__©r   s   @r    r   r   &   s:   ø„ ñð
U˜vð U¨$õ Uð ð
Ð/ò 
ó ô
r!   c                   ó|   ‡ — e Zd ZdZdeddfˆ fd„Z edej                  «      e	de
eef   defd„«       «       Zˆ xZS )	r   a/  
    Server auth provider for basic auth. The credentials are read from
    `chroma_server_authn_credentials_file` and each line must be in the format
    <username>:<bcrypt passwd>.

    Expects tokens to be passed as a base64-encoded string in the Authorization
    header prepended with "Basic".
    r   r   Nc                 óÚ  •— t         ‰| �  |«       |j                  | _        i | _        | j                  «       }|D ]©  }|j                  «       sŒ|j                  «       j                  d«      D �cg c]  }|‘Œ }}|r|d   rt        |«      dk7  st        |«      st        d|› d�«      ‚|d   }|d   }|| j                  v rt        d«      ‚t        |«      | j                  |<   Œ« y c c}w )Nú:r   é   z$Invalid htpasswd credentials found: z3. Lines must be exactly <username>:<bcrypt passwd>.é   zXDuplicate username found in [chroma_server_authn_credentials]. Usernames must be unique.)r   r   r   r   r   Úread_creds_or_creds_fileÚstripÚsplitÚlenÚallÚ
ValueErrorr   )	r   r   ÚcredsÚlineÚvÚ
_raw_credsÚusernameÚpasswordr   s	           €r    r   z*BasicAuthenticationServerProvider.__init__F   sù   ø€ Ü‰Ñ˜Ô ØŸ™ˆŒà,.ˆŒØ×-Ñ-Ó/ˆàò 	8ˆDØ—:‘:”<ØØ%)§Z¡Z£\×%7Ñ%7¸Ó%<Ö= š!Ð=ˆJÐ=áØ˜q’MÜ˜
“O qÒ(Ü˜:”ä Ø:¸:¸,ð GHð Hóð ð " !‘}ˆHØ! !‘}ˆHØ˜4Ÿ;™;Ñ&Ü ð0óð ô
 %.¨hÓ$7ˆD�K‰K˜Ò!ñ-	8ùò >s   Á0	C(z.BasicAuthenticationServerProvider.authenticateÚheadersc           	      óz  — 	 t         j                  «       |j                  «       vrt        t         dz   «      ‚|t         j                  «          }t	        j
                  dd|«      }|j                  «       }t        j                  |«      j                  d«      }d|vrt        d«      ‚|j                  dd«      \  }}t        |«      }t        |«      }|| j                  vrt        d«      ‚t        j                  |j                  d«      | j                  |   j!                  «       j                  d«      «      }|st        d«      ‚t#        |¬	«      S # t        $ r+}t$        j'                  d
t)        |«      › �«       Y d }~n†d }~wt*        $ rw}t-        j.                  |j0                  «      }|d   }	|	j2                  }
|	j4                  }t$        j'                  dt7        |«      j8                  › d|› d|
› �«       Y d }~nd }~ww xY wt;        j<                  t?        j@                  dd«      «       tC        «       ‚)Nz header not foundz^Basic Ú r#   r4   z#Invalid Authorization header formatr6   zInvalid username or password)Úuser_idz7BasicAuthenticationServerProvider.authenticate failed: éÿÿÿÿzNBasicAuthenticationServerProvider.authenticate failed: Failed to authenticate z at gü©ñÒMbP?g{®Gázt?)"r)   ÚlowerÚkeysr	   ÚreÚsubr8   r$   Ú	b64decoder(   r9   r   r   ÚbcryptÚcheckpwr'   r&   r   ÚloggerÚerrorÚreprÚ	ExceptionÚ	tracebackÚ
extract_tbÚ__traceback__ÚlinenoÚfilenameÚtyper,   ÚtimeÚsleepÚrandomÚuniformr   )r   rC   Ú_auth_headerÚbase64_decodedrA   rB   Ú
_pwd_checkÚeÚtbÚlast_call_stackÚline_numberrW   s               r    Úauthenticate_or_raisez7BasicAuthenticationServerProvider.authenticate_or_raisee   sö  € ð
$	Ü#×)Ñ)Ó+°7·<±<³>ÑAÜÔ 4Ð7JÑ JÓKÐKØ"Ô#7×#=Ñ#=Ó#?Ñ@ˆLÜŸ6™6 *¨b°,Ó?ˆLØ'×-Ñ-Ó/ˆLä#×-Ñ-¨lÓ;×BÑBÀ7ÓKˆNØ˜.Ñ(ÜÐ EÓFÐFØ!/×!5Ñ!5°c¸1Ó!=ÑˆH�hÜ˜8“}ˆHÜ˜8“}ˆHØ˜tŸ{™{Ñ*ÜÐ >Ó?Ð?äŸ™Ø—‘ Ó(Ø—‘˜HÑ%×6Ñ6Ó8×?Ñ?ÀÓHóˆJñ ÜÐ >Ó?Ð?Ü¨Ô1Ð1øÜò 	Ü�L‰LØIÌ$ÈqË'ÈÐS÷ñ ûô ò 		Ü×%Ñ% a§o¡oÓ6ˆBà  ™fˆOØ)×0Ñ0ˆKØ&×/Ñ/ˆHÜ�L‰Lð*Ü*.¨q«'×*:Ñ*:Ð);¸4À¸zÈÈ;È-ðY÷ñ ûð		úô 	�
‰
Ü�N‰N˜5 %Ó(ô	
ô ÓÐs%   ‚EE Å	HÅ!FÆHÆA-HÈH)r,   r-   r.   r/   r
   r   r   r   ÚALLr   r   r   r   rd   r0   r1   s   @r    r   r   <   s`   ø„ ñð8˜vð 8¨$õ 8ñ> Ø8Ð:R×:VÑ:Vóð ð) ¨T°#°s°(©^ð ) Àò ) ó óô) r!   )!r$   r[   rJ   rY   rS   rM   ÚloggingÚ	overridesr   Úpydanticr   Úchromadb.authr   r   r   r   r	   Úchromadb.configr
   Úchromadb.errorsr   Ú chromadb.telemetry.opentelemetryr   r   Útypingr   Ú	getLoggerr,   rO   Ú__all__r)   r   r   © r!   r    ú<module>rq      s}   ðÛ Û Û 	Û Û ã Û å Ý ÷õ õ #Ý +÷õ ð 
ˆ×	Ñ	˜8Ó	$€à.Ð0IÐ
J€à&Ð ô
Ð0ô 
ô,V Ð(Dõ V r!   