o
    ưi-                     @   s.  d dl Z d dlZd dlZd dlmZmZ d dlZd dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ e Zddeej d	efd
dZdee d	ee fddZ	ddedeeeef  d	ee fddZ	ddedee d	ee fddZ	ddedeeeef  fddZd	efddZdS )    N)OptionalUnion)verbose_logger)	DualCache)HTTPHandler)get_azure_ad_token_provider)get_secret_from_managertimeoutreturnc                 C   s    | du rt jddd} t| dS )a2  
    Factory function to create HTTPHandler for OIDC requests.
    This function can be mocked in tests.
    
    Args:
        timeout: Optional timeout for HTTP requests. Defaults to 600.0 seconds with 5.0 connect timeout.
    
    Returns:
        HTTPHandler instance configured for OIDC requests.
    Ng     @g      @)r	   connectr	   )httpxTimeoutr   r    r   S/home/app/Keep/.python/lib/python3.10/site-packages/litellm/secret_managers/main.py_get_oidc_http_handler   s   
r   valuec                 C   s@   | du rdS dh}dh}|    }||v rdS ||v rdS dS )a  
    Converts a string to a boolean if it's a recognized boolean string.
    Returns None if the string is not a recognized boolean value.

    :param value: The string to be checked.
    :return: True or False if the string is a recognized boolean, otherwise None.
    NtruefalseTF)striplower)r   Ztrue_valuesZfalse_valuesZvalue_lowerr   r   r   str_to_bool'   s   r   secret_namedefault_valuec                 C   s&   t | |d}|durt|tsdS |S )zi
    Guarantees response from 'get_secret' is either string or none. Used for fixing linting errors.
    )r   r   N)
get_secret
isinstancestr)r   r   r   r   r   r   get_secret_str?   s   r   c                 C   s,   t | |}|du rdS t|tr|S t|S )aP  
    Guarantees response from 'get_secret' is either boolean or none. Used for fixing linting errors.

    Args:
        secret_name: The name of the secret to get.
        default_value: The default value to return if the secret is not found.

    Returns:
        The secret value as a boolean or None if the secret is not found.
    N)r   r   boolr   )r   r   Z_secret_valuer   r   r   get_secret_boolM   s   

r   c                 C   s  t j}t j}d }| dr| dd} | dr| dd}|dd\}}d|ddd  }|dkrhtj| d}|d urC|S t	 }	|	j
dd	|id
did}
|
jdkrd|
j}tj| |dd |S td|dkr{td}|d u rytd|S |dkrtd}|d u rtd|S |dkrtd}td}|d u s|d u rtdtj| d}|d ur|S t	 }	|	j
|d	|id| ddd}
|
jdkr|
 
dd }tj| |dd |S td |d!krEtd"}|d u r(td# t|d$}z| }|d u rtd%|W S  ty' } zd&t| }t| t|d }~ww t|d'}| }|W  d    S 1 s?w   Y  ns|d(krgt|d'}| }|W  d    S 1 saw   Y  nQ|d)krt|}|d u r~td*| d+|S |d,krt|}|d u rtd*| d+t|d'}| }|W  d    S 1 sw   Y  ntd-zt rCt jd urCz*t j}d.}|d ur|j}|d ur|jd ur| |jvrd.}t||| |d/}W n* ty } ztd0|  d1t| d2t    t| }W Y d }~nd }~ww zt!|tr2t"#|}t!|t$r.|W W S |W W S W W d S  tyB   | Y W S w tj%
| }|d urRt&|nd }|d urbt!|t$rb|W S |W S  ty } z|d urz|W  Y d }~S |d }~ww )3Nzos.environ/ zoidc//   Zgoogle)keyz]http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identityZaudiencezMetadata-FlavorZGoogle)paramsheaders   i  )r#   r   ttlzGoogle OIDC provider failedZcircleciZCIRCLE_OIDC_TOKENz*CIRCLE_OIDC_TOKEN not found in environmentZcircleci_v2ZCIRCLE_OIDC_TOKEN_V2z-CIRCLE_OIDC_TOKEN_V2 not found in environmentZgithubZACTIONS_ID_TOKEN_REQUEST_URLZACTIONS_ID_TOKEN_REQUEST_TOKENzWACTIONS_ID_TOKEN_REQUEST_URL or ACTIONS_ID_TOKEN_REQUEST_TOKEN not found in environmentzBearer z!application/json; api-version=2.0)AuthorizationAcceptr   i'  zGithub OIDC provider failedZazureZAZURE_FEDERATED_TOKEN_FILEzTAZURE_FEDERATED_TOKEN_FILE not found in environment will use Azure AD token provider)Zazure_scopez'Azure OIDC provider returned None tokenzAzure OIDC provider failed: rfileenvzEnvironment variable z
 not foundZenv_pathzUnsupported OIDC providerlocal)clientkey_managerr   key_management_settingsz'Defaulting to os.environ value for key=z. An exception occurred - z.

)'litellmZ_key_management_system_key_management_settings
startswithreplacesplitjoin
oidc_cacheZ	get_cacher   getstatus_codetextZ	set_cache
ValueErrorosgetenvjsonr   warningr   	Exceptionr   erroropenread'_should_read_secret_from_secret_managersecret_manager_clientr   Zhosted_keysr   	traceback
format_excr   astliteral_evalr   environr   )r   r   Zkey_management_systemr0   secretZsecret_name_splitZoidc_providerZoidc_audZ
oidc_tokenZoidc_clientresponseZ
env_secretZactions_id_token_request_urlZactions_id_token_request_tokenZazure_federated_token_fileZazure_token_providere	error_msgfZtoken_file_pathr.   r/   Zsecret_value_as_boolr   r   r   r   d   s  












$
$





$





r   c                   C   s4   t jdurt jdurt jjdkst jjdkrdS dS )a  
    Returns True if the secret manager should be used to read the secret, False otherwise

    - If the secret manager client is not set, return False
    - If the `_key_management_settings` access mode is "read_only" or "read_and_write", return True
    - Otherwise, return False
    NZ	read_onlyZread_and_writeTF)r1   rE   r2   Zaccess_moder   r   r   r   rD     s   

rD   )N)rH   r<   rF   typingr   r   r   r1   Zlitellm._loggingr   Zlitellm.caching.cachingr   Z&litellm.llms.custom_httpx.http_handlerr   Z3litellm.secret_managers.get_azure_ad_token_providerr   Z.litellm.secret_managers.secret_manager_handlerr   r7   r   r   r   r   r   r   r   r   rD   r   r   r   r   <module>   sL    


 (