
    ^h)                         S SK r S SKrS SKrS SKJrJr  S SKJrJrJr  S SK	J
r
  S SKrS SKJr  S SKJrJrJrJrJrJrJrJrJrJrJr  Sr " S S	5      rg)
    N)datetimetimezone)AnyListOptional)status)verbose_proxy_logger)GenerateKeyRequestKeyManagementSystem
KeyRequestLiteLLM_AuditLogsLiteLLM_VerificationTokenLitellmTableNamesProxyErrorTypesProxyExceptionUpdateKeyRequestUserAPIKeyAuthWebhookEventzlitellm/c                      \ rS rSr\ SS\S\S\S\\	   4S jj5       r
\ SS\S\S\S\S\\	   4
S	 jj5       r\ SS\S
\\   S\S\S\\	   4
S jj5       r\S\	S\	4S j5       r\S
\\   4S j5       r\S\4S j5       rSrg)KeyManagementEventHooks   Ndataresponseuser_api_key_dictlitellm_changed_byc                   #    SSK Jn  SSKJn  U R                  SL a  [
        R                  U5      I Sh  vN   [        R                  SL a  [        R                  " U[        S9n[        R                  " U" [        [        [        R                   " 5       5      ["        R$                  " [&        R(                  5      U=(       d    UR*                  =(       d    UUR,                  [.        R0                  UR3                  SS5      S	USS
9	S95        [
        R5                  U R6                  =(       d    S[        R                   " 5        3UR3                  SS5      S9I Sh  vN   g GN2 N7f)z
Hook that runs after a successful /key/generate request

Handles the following:
- Sending Email with Key Details
- Storing Audit Logs for key generation
- Storing Generated Key in DB
r   create_audit_log_for_updatelitellm_proxy_admin_nameTNdefaulttoken_id created	id
updated_at
changed_bychanged_by_api_key
table_name	object_idactionupdated_valuesbefore_valuerequest_datazvirtual-key-token)secret_namesecret_token)+litellm.proxy.management_helpers.audit_logsr   litellm.proxy.proxy_serverr    send_invite_emailr   _send_key_created_emaillitellmstore_audit_logsjsondumpsstrasynciocreate_taskr   uuiduuid4r   nowr   utcuser_idapi_keyr   KEY_TABLE_NAMEget$_store_virtual_key_in_secret_manager	key_alias)r   r   r   r   r   r    _updated_valuess          h/home/james-whalen/.local/lib/python3.13/site-packages/litellm/proxy/hooks/key_management_event_hooks.pyasync_key_generated_hook0KeyManagementEventHooks.async_key_generated_hook   s"    	
 	H!!T))AA(KKK ##t+"jj3?O+!2tzz|,#+<<#=#5 $4,44$43+<+D+D#4#C#C"*,,z2">('6%)"$ &JJGL*G!gr2 K 
 	
 	
/ L.	
s"   4E-E(D+E-"E+#E-+E-existing_key_rowc                 0  #    SSK Jn  SSKJn  [        R
                  SL a  [        R                  " U R                  SS9[        S9nUR                  SS9n[        R                  " U[        S9n[        R                  " U" [        [        [        R                  " 5       5      [        R                  " [         R"                  5      U=(       d    UR$                  =(       d    UUR&                  [(        R*                  U R,                  SUUS9	S	95        g
7f)z^
Post /key/update processing hook

Handles the following:
- Storing Audit Logs for key update
r   r   r   Texclude_noner!   updatedr&   r0   N)r5   r   r6   r    r9   r:   r;   r<   r=   r>   r?   r   r@   rA   r   rB   r   rC   rD   rE   r   rF   key)	r   rN   r   r   r   r   r    rJ   _before_values	            rK   async_key_updated_hook.KeyManagementEventHooks.async_key_updated_hookP   s     	
 	H ##t+"jj)EsSO,11t1DM JJ}cBM+!2tzz|,#+<<#=#5 $4,44$43+<+D+D#4#C#C"&((('6%2"" 	s   DDkeys_being_deletedc                   #    SSK Jn  SSKJnJn  [
        R                  SL Ga   U R                   GH  nUR                  USSS9I Sh  vN n	U	c,  [        S	U S
3[        R                  S[        R                  S9eU	R                  SS9n	[        R                  " U	[         S9n
["        R$                  " U" ['        [!        [(        R*                  " 5       5      [,        R.                  " [0        R2                  5      U=(       d    UR4                  =(       d    UUR6                  [8        R:                  USSU
S9	S95        GM     [<        R?                  US9I Sh  vN   g GN N7f)z`
Post /key/delete processing hook

Handles the following:
- Storing Audit Logs for key deletion
r   r   )r    prisma_clientTrS   find_unique)r2   r+   
query_typeNzKey z
 not found)messagetypeparamcoderP   r!   deletedz{}r&   r0   )rW   ) r5   r   r6   r    rY   r9   r:   keysget_datar   r   bad_request_errorr   HTTP_404_NOT_FOUNDr;   r<   r=   r>   r?   r   r@   rA   r   rB   r   rC   rD   rE   r   rF   r   (_delete_virtual_keys_from_secret_manager)r   rW   r   r   r   r   r    rY   rS   key_row_key_rows              rK   async_key_deleted_hook.KeyManagementEventHooks.async_key_deleted_hook}   sN    	
 	W ##t+yy - 6 6%M !7 !  ?("&se: 6,>>##66	  ",,D,9::gs;##/%6"4::<0'/||HLL'A'9 (8088(87/@/H/H'8'G'G&)#,+/)1&! !D &NN1 O 
 	
 	
 	IB	
s%   AE&	E!
DE&E$E&$E&r3   r4   c                   #    [         R                  b  [         R                  R                  SL a  SSKJn  [         R
                  [        R                  :X  ad  [        [         R                  U5      (       aD  [         R                  R                  [         R                  R                   SU  3US9I Sh  vN   ggggg N	7f)z
Store a virtual key in the secret manager

Args:
    secret_name: Name of the virtual key
    secret_token: Value of the virtual key (example: sk-1234)
NTr   AWSSecretsManagerV2/)r3   secret_value)r9   _key_management_settingsstore_virtual_keys-litellm.secret_managers.aws_secret_manager_v2rl   _key_management_systemr   AWS_SECRET_MANAGER
isinstancesecret_manager_clientasync_write_secretprefix_for_stored_virtual_keys)r3   r4   rl   s      rK   rH   <KeyManagementEventHooks._store_virtual_key_in_secret_manager   s      ++7//BBdJ 22*==>"7#@#@BUVV!77JJ'.'G'G'f'f&gghithu$v%1 K    W> K 8s   B4C6C 7
Cc                   #    [         R                  b  [         R                  R                  SL a  SSKJn  [        [         R                  U5      (       a  U  H  nUR                  bN  [         R                  R                  [         R                  R                   SUR                   3S9I Sh  vN   M^  [        R                  " SUR                   S35        M     gggg N27f)	z
Deletes virtual keys from the secret manager

Args:
    keys_being_deleted: List of keys being deleted, this is passed down from the /key/delete operation
NTr   rk   rm   )r3   z]KeyManagementEventHooks._delete_virtual_key_from_secret_manager: Key alias not found for key z(. Skipping deletion from secret manager.)r9   ro   rp   rq   rl   rt   ru   rI   async_delete_secretrw   r	   warningr2   )rW   rl   rS   s      rK   re   @KeyManagementEventHooks._delete_virtual_keys_from_secret_manager   s      ++7//BBdJ g;;=PQQ1==4")"?"?"S"S/6/O/O/n/n.oopqtq~q~p  -A #T #   188"  AD  AJ  AJ  @K  Ks  !t  2 R K 8s   B-C$/C"03C$c                   #    SSK JnJn  SUR                  S/ 5      ;  a  [	        S5      e[        SSSU R                  S	S
5      U R                  SS5      U R                  SS5      U R                  SS 5      U R                  SS5      U R                  SS 5      S9	n[        R                  " UR                  R                  US95        g 7f)Nr   )general_settingsproxy_logging_objemailalertingzyEmail alerting not setup on config.yaml. Please set `alerting=['email']. 
Docs: https://docs.litellm.ai/docs/proxy/email`key_createdrS   zAPI Key Createdr2   r$   spendg        
max_budgetrD   team_idzDefault TeamrI   )	eventevent_groupevent_messager2   r   r   rD   r   rI   )webhook_event)
r6   r~   r   rG   
ValueErrorr   r>   r?   slack_alerting_instance&send_key_created_or_user_invited_email)r   r~   r   r   s       rK   r8   /KeyManagementEventHooks._send_key_created_email   s     R*..z2>> M  +,,w+,,w,||L#6LLD1LLN;ll;5

 	55\\# ] 	
s   C	C )N)__name__
__module____qualname____firstlineno__staticmethodr
   dictr   r   r=   rL   r   r   rU   r   r   r   rh   rH   re   r8   __static_attributes__r       rK   r   r      s@   
 -1	.
 .
.
 *.
 %SM	.
 .
`  -1*** * *	*
 %SM* *X  -1;; !:;; ; *	;
 %SM; ;z  SV  2  !:; 4 
 
 
r   r   )r>   r;   r@   r   r   typingr   r   r   fastapir   r9   litellm._loggingr	   litellm.proxy._typesr
   r   r   r   r   r   r   r   r   r   r   "LITELLM_PREFIX_STORED_VIRTUAL_KEYSr   r   r   rK   <module>r      sH       ' & &   1    &0 "l
 l
r   