
    h7.                     `   d Z ddlmZ ddlmZmZmZmZmZm	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mZ dd	lmZ dd
lmZ ddlmZmZ ddlmZmZ  e       Z G d d      ZejA                  d ee      gdg       ee      fdedededefd       Z!ejE                  d ee      gdg       ee      fdededefd       Z#ejE                  d ee      gdge      ejE                  d ee      gdge       e	dd      d ee      fdedede$dee$   def
d               Z%ejM                  d! ee      gdg       e	dd       ee      fdedede$defd"       Z'd#ed$ed%efd&Z(ejS                  d! ee      gdg       e	dd       ee      fdededede$def
d'       Z*y)(z2
CRUD endpoints for storing reusable credentials.
    )Optional)	APIRouterDependsHTTPExceptionRequestResponsePathN)verbose_proxy_logger)CredentialAccessor)_get_masked_values)CommonProxyErrorsUserAPIKeyAuth)user_api_key_auth)encrypt_value_helper)handle_exception_on_proxyjsonify_object)CreateCredentialItemCredentialItemc                   &    e Zd Zededefd       Zy)CredentialHelperUtils
credentialreturnc                 x    i }| j                   j                         D ]  \  }}t        |      ||<    || _         | S )z<Encrypt values in credential.credential_values and add to DB)credential_valuesitemsr   )r   encrypted_credential_valueskeyvalues       h/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/proxy/credential_endpoints/endpoints.pyencrypt_credential_valuesz/CredentialHelperUtils.encrypt_credential_values   sE     ')#$66<<>JC/CE/J', ?'B
$    N)__name__
__module____qualname__staticmethodr   r     r!   r   r   r      s"    n   r!   r   z/credentialszcredential management)dependenciestagsrequestfastapi_responser   user_api_key_dictc                 r  K   ddl m}m} 	 |'t        ddt        j
                  j                  i      |j                  rj|t        dd      |j                  |j                        }|t        dd	      |j                  |j                        }|t        dd	      ||_
        |j                  t        d
d      t        |j                  |j                  |j                        }t        j                  |      }	|	j!                         }
t#        |
      }|j$                  j&                  j)                  i ||j*                  |j*                  d       d{    t-        j.                  |g       dddS 7 # t0        $ r%}t3        j4                  |       t7        |      d}~ww xY ww)zz
    [BETA] endpoint. This might change unexpectedly.
    Stores credential in DB.
    Reloads credentials in memory.
    r   )
llm_routerprisma_clientN  errorstatus_codedetailzELLM router not found. Please ensure you have a valid router instance.  Model not foundi  zPCredential values are required. Unable to infer credential values from model ID.credential_namer   credential_info)
created_by
updated_by)dataTzCredential created successfullysuccessmessage)litellm.proxy.proxy_serverr-   r.   r   r   db_not_connected_errorr   model_idget_deploymentget_deployment_credentialsr   r   r7   r8   r   r    
model_dumpr   dblitellm_credentialstablecreateuser_idr   upsert_credentials	Exceptionr
   	exceptionr   )r)   r*   r   r+   r-   r.   modelr   processed_credentialencrypted_credentialcredentials_dictcredentials_dict_jsonifiedes                r   create_credentialrR   !   s      E4+ !2!I!I!O!OP  !# #b 
 --j.A.ABE}#<MNN * E E##! !(#<MNN+<J(''/i   .&66(::&66 

  5NN  
 0::<%34D%E"77>>,/77/77 ? 
 	
 	
 	--/C.DE,MNN	
  +&&q)'**+s;   	F7EF $F%F F7F 	F4 F//F44F7c                    K   	 t         j                  D cg c]/  }|j                  t        |j                        |j
                  d1 }}d|dS c c}w # t        $ r}t        |      cY d}~S d}~ww xY ww):
    [BETA] endpoint. This might change unexpectedly.
    r6   T)r=   credentialsN)litellmcredential_listr7   r   r   r8   rJ   r   )r)   r*   r+   r   masked_credentialsrQ   s         r   get_credentialsrY   j   s     , &55
 	 $.#=#=%7
8T8T%U#-#=#=
 
  0BCC
  ,(++,sE   A7A 4A
A A7A 	A4
A/)A4*A7/A44A7z+/credentials/by_name/{credential_name:path})r'   r(   response_modelz /credentials/by_model/{model_id}.z9The credential name, percent-decoded; may contain slashes)descriptionr7   rA   c           	        K   ddl m} 	 |r|t        dd      |j                  |      }|t        dd      |j	                  |      }|t        dd      t        |d	d	
      }t        dj                  |j                  |      |i       }	|	S |rpt        j                  D ]M  }	|	j                  |k(  st        |	j                  t        |	j                  d	d	
      |	j                        }
|
c S  t        dd|z         t        dd      # t        $ r%}t        j                   |       t#        |      d}~ww xY ww)rT   r   )r-   Nr/   zLLM router not foundr1   r4   r5      )unmasked_lengthnumber_of_asterisksz{}-credential-{}r6   z+Credential not found. Got credential name: z$Credential name or model ID required)r?   r-   r   rB   rC   r   r   format
model_namerV   rW   r7   r   r8   rJ   r
   rK   r   )r)   r*   r7   rA   r+   r-   rL   r   masked_credential_valuesr   masked_credentialrQ   s               r   get_credentialrd      sk    , 6-+!#<RSS--h7E}#<MNN * E Eh O (#<MNN'9! !$%($
 ( 2 9 9%:J:JH U": "J %55
--@(6(2(B(B*<&88,-01+
 )3(B(B)% -, 6  DV 
  (N   +&&q)'**+sA   EBD E$D 8;D 3E4D 	E  D;;E  Ez#/credentials/{credential_name:path}c                   K   ddl m} 	 |'t        ddt        j                  j
                  i      |j                  j                  j                  d|i       d{    t        j                  D cg c]  }|j                  |k7  r| c}t        _
        d	d
dS 7 ?c c}w # t        $ r}t        |      cY d}~S d}~ww xY ww)rT   r   r.   Nr/   r0   r1   r7   whereTzCredential deleted successfullyr<   )r?   r.   r   r   r@   r   rE   rF   deleterV   rW   r7   rJ   r   )r)   r*   r7   r+   r.   credrQ   s          r   delete_credentialrk      s      9, !2!I!I!O!OP  77>>$o6 ? 
 	
 	
  //#
##6 #

  ,MNN	

#
  ,(++,sY   CAB% BB% 5B B% CB%  B% %	C.
B>8C9C>CCdb_credentialupdated_patchr   c                    t        | j                  | j                  | j                        }t        j                  |      }|j                  r|j                  |_        |j                  rH|j                  j                         D ci c]  \  }}||
 }}}|j                  j                  |       |j                  r;	 d|j                  vri |_        |j                  j                  |j                         |S c c}}w )z(
    Update a credential in the DB.
    )r7   r8   r   r8   )r   r7   r8   r   r   r    r   update)rl   rm   merged_credentialrN   kvencrypted_paramss          r   update_db_credentialrt      s     '%55%55'99 1JJ ++,@,P,P) -- 2CCIIK
QAqD
 
 	++223CD ++$$5$E$EE02-))001E1U1UV
s   C<c                   K   ddl m} 	 |'t        ddt        j                  j
                  i      |j                  j                  j                  d|i       d{   }|t        d	d
      t        ||      }t        |j                               }|j                  j                  j                  d|ii |d|j                  i       d{    dddS 7 ~7 # t        $ r}	t        |	      cY d}	~	S d}	~	ww xY ww)rT   r   rf   Nr/   r0   r1   r7   rg   r4   zCredential not found in DB.r:   )rh   r;   TzCredential updated successfullyr<   )r?   r.   r   r   r@   r   rE   rF   find_uniquert   r   rD   ro   rH   rJ   r   )
r)   r*   r   r7   r+   r.   rl   rp   credential_object_jsonifiedrQ   s
             r   update_credentialrx     s(     9, !2!I!I!O!OP  ,..GGSS$o6 T 
 
  C8UVV0
K&45F5Q5Q5S&T#77>>$o6-/77 ? 
 	
 	
  ,MNN
	
  ,(++,sZ   DAC! CA4C! CC! DC! C! !	C?*
C:4C?5D:C??D)+__doc__typingr   fastapir   r   r   r   r   r	   rV   litellm._loggingr
   .litellm.litellm_core_utils.credential_accessorr   *litellm.litellm_core_utils.litellm_loggingr   litellm.proxy._typesr   r   $litellm.proxy.auth.user_api_key_authr   0litellm.proxy.common_utils.encrypt_decrypt_utilsr   litellm.proxy.utilsr   r   litellm.types.utilsr   r   routerr   postrR   getrY   strrd   ri   rk   rt   patchrx   r&   r!   r   <module>r      s    N N  1 M I B B Q I D	  +,-
!	"   )00A(B	A+A+A+ %A+ &	A+
A+H +,-
!	"   )00A(B,,, &,
,, 1+,-
!	"!	   &+,-
!	"!	    1lm"(/0A(B9+9+9+ 9+ sm	9+
 &9+9+x )+,-
!	"    1lm(/0A(B	,,, , &	,
,@#!#2@##L )+,-
!	"    1lm(/0A(B",",", ", 	",
 &",
",r!   