
    h(                         d Z ddlZddlmZmZmZmZ ddlmZm	Z	m
Z
 ddlZddlmZ ddlmZmZmZ ddlmZ ddlmZ dd	lmZ erdd
lmZ eeef   ZneZ G d d      Zy)z
Handles Authentication Errors
    N)TYPE_CHECKINGAnyOptionalUnion)HTTPExceptionRequeststatus)verbose_proxy_logger)ProxyErrorTypesProxyExceptionUserAPIKeyAuth)_get_request_ip_address)PrismaDBExceptionHandler)ServiceTypes)Spanc                   @    e Zd Zedededededee	   dede
fd       Zy	)
UserAPIKeyAuthExceptionHandlererequestrequest_datarouteparent_otel_spanapi_keyreturnc           
        K   ddl m}m}m} t	        j
                         rQt	        j                  |       r<|j                  j                  t        j                  d| d       t        dd||      S t        ||j                  dd	      
      }	t        j                  dj!                  t#        |       |	      d|	i       t        |||      }
t%        j&                  |j)                  || |
t*        j,                  |             t/        | t0        j2                        r't5        | j6                  t*        j8                  dd      t/        | t:              rYt5        t=        | ddt#        |        d      t*        j,                  t=        | dd      t=        | dt>        j@                              t/        | t4              r| t5        dt#        |       z   t*        j,                  t=        | dd      t>        j@                        w)a  
        Handles Connection Errors when reading a Virtual Key from LiteLLM DB
        Use this if you don't want failed DB queries to block LLM API reqiests

        Reliability scenarios this covers:
        - DB is down and having an outage
        - Unable to read / recover a key from the DB

        Returns:
            - UserAPIKeyAuth: If general_settings.allow_requests_on_db_unavailable is True

        Raises:
            - Orignal Exception in all other cases
        r   )general_settingslitellm_proxy_admin_nameproxy_logging_objget_key_objectg        )service	call_typeerrordurationzfailed-to-connect-to-db)key_nametokenuser_idrequest_routeuse_x_forwarded_forF)r   r(   z^litellm.proxy.proxy_server.user_api_key_auth(): Exception occured - {}
Requester IP Address:{}requester_ip)extra)r   r   r'   )r   original_exceptionuser_api_key_dict
error_typer   Ni  )messagetypeparamcodedetailzAuthentication Error()r0   Nonestatus_codezAuthentication Error, )!litellm.proxy.proxy_serverr   r   r   r   &should_allow_request_on_db_unavailableis_database_connection_errorservice_logging_objservice_failure_hookr   DBr   r   getr
   	exceptionformatstrasynciocreate_taskpost_call_failure_hookr   
auth_error
isinstancelitellmBudgetExceededErrorr   r.   budget_exceededr   getattrr	   HTTP_401_UNAUTHORIZED)r   r   r   r   r   r   r   r   r   r)   r,   s              e/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/proxy/auth/auth_exception_handler.py_handle_authentication_errorz;UserAPIKeyAuthExceptionHandler._handle_authentication_error   s    .	
 	
 %KKM(EEaH 11FF$*	 G  "2/0#	  3$4$8$89NPU$VL !**qxxF  &|4 !/!1#!
 !88!-'(&7.99 9  !W889$II(88	  !]+$#Ax3HQPQ1RS(33!!Wf5 M63O3OP	  A~. 03q69$//a&111	 s   HHN)__name__
__module____qualname__staticmethod	Exceptionr   dictr?   r   r   r   rK        rJ   r   r      sc    aaa a 	a
 #4.a a 
a arS   r   )__doc__r@   typingr   r   r   r   fastapir   r   r	   rE   litellm._loggingr
   litellm.proxy._typesr   r   r   litellm.proxy.auth.auth_utilsr   "litellm.proxy.db.exception_handlerr   litellm.types.servicesr   opentelemetry.tracer   _Spanr   rR   rS   rJ   <module>r^      sU     6 6 2 2  1 P P A G /1DDc crS   