o
    ưi                     @   sz   d Z ddlZddlZddlmZmZ ddlZddlmZ ddl	m
Z
 dd Z	dded	ed
edee dee f
ddZdS )z^
Secret Manager Handler

Handles retrieving secrets from different secret management systems.
    N)AnyOptional)print_verbose)KeyManagementSystemc                 C   s:   ddl }ztt|  | kW S  |jy   Y dS w )z"Check if a string is valid base64.r   NF)binasciibase64	b64encode	b64decodedecodeError)sr    r   e/home/app/Keep/.python/lib/python3.10/site-packages/litellm/secret_managers/secret_manager_handler.py
_is_base64   s   r   clientkey_managersecret_namekey_management_settingsreturnc              
   C   sf  d}|t jjkst| jd t| j dkr| |j}|S |t jjks*| jjdkr]t	
|}|du r7tdt|}|du rGt|}|}ntd| jtj|dd	}|jd
}|S |t jjkr	 t	
|d}	|	du rutd|t|	}
d|
i}| jdi |}|d }|d
}t|tr| }|S |t jjkrddlm} t| |rd}|dur|j}| j||d}td|  |S |t j jkrz| !|}td|  |du rtd| W |S  ty } ztdt|  |d}~ww |t j"jkr1z| j|d}|du rtd| W |S  ty0 } ztdt|  |d}~ww |t j#jkrfz| j|d}|du rKtd| W |S  tye } ztdt|  |d}~ww |t j$jkrddl%m&} t| |r| j||r|' ndd}|du rtd| |S tdt| j |dkrt	
|}|S | |j(}|S )a`  
    Get a secret from the configured secret manager.
    
    Args:
        client: The secret manager client instance
        key_manager: The type of key manager (e.g., "azure_key_vault", "google_kms", etc.)
        secret_name: The name/path of the secret to retrieve
        key_management_settings: Optional settings for the key management system
        
    Returns:
        The secret value as a string, or None if not found
        
    Raises:
        ValueError: If the secret cannot be retrieved or required parameters are missing
        Exception: For other errors during secret retrieval
    N.z+azure.keyvault.secrets._client.SecretClientZKeyManagementServiceClientzBGoogle KMS requires the encrypted secret to be in the environment!Tz@Google KMS requires the encrypted secret to be encoded in base64)name
ciphertext)requestzutf-8z+AWS KMS - Encrypted Value of Key={} is NoneZCiphertextBlobZ	Plaintextr   )AWSSecretsManagerV2)r   primary_secret_namezget_secret_value_response: z$secret from google secret manager:  z-No secret found in Google Secret Manager for zAn error occurred - )r   z0No secret found in Hashicorp Secret Manager for z/No secret found in CyberArk Secret Manager for )CustomSecretManager)r   Zoptional_paramsz-No secret found in Custom Secret Manager for zMCustom secret manager client must be an instance of CustomSecretManager, got localr   ))r   ZAZURE_KEY_VAULTvaluetype
__module____name__Z
get_secretZ
GOOGLE_KMS	__class__osgetenv
ValueErrorr   r   r	   ZdecryptlitellmZ_google_kms_resource_name	plaintextr
   ZAWS_KMS	Exceptionformat
isinstancestrstripZAWS_SECRET_MANAGERZ-litellm.secret_managers.aws_secret_manager_v2r   r   Zsync_read_secretr   ZGOOGLE_SECRET_MANAGERZ%get_secret_from_google_secret_managerZHASHICORP_VAULTZCYBERARKZCUSTOMZ*litellm.integrations.custom_secret_managerr   Z
model_dumpZsecret_value)r   r   r   r   secretZencrypted_secretZb64_flagr   responseZencrypted_valueZciphertext_blobparamsr&   r   r   er   r   r   r   get_secret_from_manager   s   p

Y


D
4
.
%



r0   )N)__doc__r   r"   typingr   r   r%   Zlitellm._loggingr   Z"litellm.types.secret_managers.mainr   r   r*   r0   r   r   r   r   <module>   s(    