o
    ưi(                     @   s   d Z ddlZddlZddlZddlZddlmZmZmZ ddl	Z	ddl
mZ dd Zdee fdd	ZG d
d dZ	 deeef fddZdS )z
This is a file for the AWS Secret Manager Integration

Relevant issue: https://github.com/BerriAI/litellm/issues/1883

Requires:
* `os.environ["AWS_REGION_NAME"], 
* `pip install boto3>=1.28.57`
    N)AnyDictOptional)KeyManagementSystemc                   C   s   dt jvr	tdd S )NAWS_REGION_NAME7Missing required environment variable - AWS_REGION_NAME)osenviron
ValueError r   r   a/home/app/Keep/.python/lib/python3.10/site-packages/litellm/secret_managers/aws_secret_manager.pyvalidate_environment   s   
r   use_aws_kmsc              
   C   sh   | d u s| du r
d S zdd l }t  |jdtdd}|t_tjt_	W d S  t
y3 } z|d }~ww NFr   Zkmsr   )Zregion_name)boto3r   clientr   getenvlitellmZsecret_manager_clientr   ZAWS_KMSZ_key_management_system	Exception)r   r   
kms_clienter   r   r   load_aws_kms   s   r   c                   @   sF   e Zd ZdZdddZdd Zdee fd	d
Zde	de
fddZdS )AWSKeyManagementService_V2zJ
    V2 Clean Class for decrypting keys from AWS KeyManagementService
    returnNc                 C   s   |    | jdd| _d S )NT)r   )r   r   r   )selfr   r   r   __init__1   s   z#AWSKeyManagementService_V2.__init__c                 C   sT   dt jvr	tdd}t dd d urd}n
t dd d ur d}|du r(tdd S )Nr   r   FZLITELLM_LICENSETZ&LITELLM_SECRET_AWS_KMS_LITELLM_LICENSEzkAWSKeyManagementService V2 is an Enterprise Feature. Please add a valid LITELLM_LICENSE to your envionment.)r   r	   r
   r   )r   Zis_litellm_license_in_envr   r   r   r   5   s   
z/AWSKeyManagementService_V2.validate_environmentr   c              
   C   sZ   |d u s|du r
d S zdd l }t  |jdtdd}|W S  ty, } z|d }~ww r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   G   s   z'AWSKeyManagementService_V2.load_aws_kmssecret_namec           	      C   s   | j d u r	tdt|d }|d u rtd|t|tr*|dr*|	dd}t
|}d|i}| j jdi |}|d }|d}t|trN| }zt|}t|tr\|W S W |S  tyh   Y |S w )	Nzkms_client is Nonez+AWS KMS - Encrypted Value of Key={} is Noneaws_kms/ ZCiphertextBlobZ	Plaintextzutf-8r   )r   r
   r   r   r   format
isinstancestr
startswithreplacebase64	b64decodeZdecryptdecodestripastliteral_evalbool)	r   r   Zencrypted_valueZciphertext_blobparamsresponseZ	plaintextsecretZsecret_value_as_boolr   r   r   decrypt_valueV   s4   





z(AWSKeyManagementService_V2.decrypt_value)r   N)__name__
__module____qualname____doc__r   r   r   r*   r   r!   r   r.   r   r   r   r   r   ,   s    
r   r   c                  C   s   t  } i }tj D ]6\}}|d urt|tr| ds,|d ur@t|tr@|dr@| j|d}t	j
dd|t	jd}|||< q
|S )NZlitellm_secret_aws_kmsr   )r   Zlitellm_secret_aws_kms_r   )flags)r   r   r	   itemsr    r!   lowerr"   r.   resub
IGNORECASE)Zaws_kms
new_valueskvZdecrypted_valuer   r   r   decrypt_env_var   s   r<   )r2   r(   r$   r   r6   typingr   r   r   r   Zlitellm.proxy._typesr   r   r*   r   r   r!   r<   r   r   r   r   <module>   s    
L