
    h                         d Z ddlZddlZddlmZmZ ddlmZ ddlmZ ddl	Z	ddl
mZ ddlmZmZmZmZmZmZmZmZmZmZ ddlmZ  G d	 d
      Zy)z;
Hooks that are triggered when a litellm user event occurs
    N)datetimetimezone)Optional)	BaseModel)verbose_proxy_logger)
AUDIT_ACTIONSCommonProxyErrorsLiteLLM_AuditLogsLitellm_EntityTypeLiteLLM_UserTableLitellmTableNamesNewUserRequestNewUserResponseUserAPIKeyAuthWebhookEvent)create_audit_log_for_updatec                       e Zd Zedededefd       Zedededefd       Zedededede	fd       Z
e	 	 dd	ed
edee   dedee   dee   dee   fd       Zy)UserManagementEventHooksdataresponseuser_api_key_dictc                   K   ddl m}m} t        j	                  | ||       d{    	 |#t        t        j                  j                        |j                  j                  j                  d|j                  i       d{   }t        di |j                  d      }t        j                   t        j#                  |j                  d	|j                  ||d|j%                  d      
             y7 7 u# t
        $ r7}t'        j(                  dj+                  t-        |                   Y d}~yd}~ww xY ww)z
        This hook is called when a new user is created on litellm

        Handles:
        - Creating an audit log for the user creation
        - Sending a user invitation email to the user
        r   )litellm_proxy_admin_nameprisma_client)r   r   r   Nuser_id)whereT)exclude_nonecreatedr   actionlitellm_changed_byr   r   before_valueafter_valuez7Unable to create audit log for user on `/user/new` - {} )litellm.proxy.proxy_serverr   r   r    async_send_user_invitation_email	Exceptionr	   db_not_connected_errorvaluedblitellm_usertable
find_firstr   r   
model_dumpasynciocreate_taskcreate_internal_user_audit_logmodel_dump_jsonr   warningformatstr)r   r   r   r   r   user_rowuser_row_litellm_typedes           k/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/proxy/hooks/user_management_event_hooks.pyasync_user_created_hookz0UserManagementEventHooks.async_user_created_hook   sX     	W
 'GG/ H 
 	
 	
	$ 1 H H N NOO(5(8(8(J(J(U(U ("2"23 )V ) #H &7 &%%4%8&" (GG2::$'8'@'@&7-E!% 6 F F%) !G ! H 
" 	I	
#(  	 ((IPPQTUVQWX  			sL   $EC:EAC> C<A2C> 9E<C> >	D>-D94E9D>>Ec                   K   t        dt        j                  d|j                  |j                  xs d|j
                  |j                  |j                  |j                  |j                  
      }	 ddl
m} d}|r\t$        j&                  j)                  
      }t+        |      dkD  r.|D ])  }t-        ||      s|j/                  |       d{    + | j0                  du r"t2        j5                  | |||       d{    yy# t        $ r5 t        j                  dt        j                   j"                  z          d	}Y w xY w7 x7 Iw):
        Send a user invitation email to the user
        internal_user_createdzWelcome to LiteLLM Proxyg        )
eventevent_groupevent_messagetokenspend
max_budgetr   
user_emailteam_id	key_aliasr   )BaseEmailLoggerTz'Defaulting to using Legacy Email Hooks.F)callback_type)r=   N)r   r   r   r=   )r   r   USERr@   rA   rB   r   rC   rD   rE   >litellm_enterprise.enterprise_callbacks.send_emails.base_emailrF   ImportErrorr   r2   r	   missing_enterprise_packager)   litellmlogging_callback_managerget_custom_loggers_for_typelen
isinstancesend_user_invitation_emailsend_invite_emailr   $send_legacy_v1_user_invitation_email)r   r   r   r=   rF   use_enterprise_email_hooksinitialized_email_loggersemail_loggers           r8   r&   z9UserManagementEventHooks.async_send_user_invitation_emailV   sf     )*//4....'C**$$**$$((
 	/ *.& &(/(H(H(d(d- )e )% ,-1$=L!,@*EE"' F    %> !!T)*OO!"3	 P    *+  	/ ((9#>>DDE */&	/sO   A.E1D 9AE;EE	0EEE;EEEEEr=   c                    K   ddl m}m} d|j                  dg       vrt	        d      t        j                  |j                  j                  |             yw)r;   r   )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`)webhook_eventN)	r%   rX   rY   get
ValueErrorr.   r/   slack_alerting_instance&send_key_created_or_user_invited_email)r   r   r   r=   rX   rY   s         r8   rS   z=UserManagementEventHooks.send_legacy_v1_user_invitation_email   sd      	S *..z2>> M 
 	55\\# ] 	
s   AANr   r    r!   r   r"   r#   c                 J  K   t         j                  syt        t        t	        t        j                               t        j                  t        j                        |xs |j                  xs ||j                  t        j                  | |||	             d{    y7 w)a1  
        Create an audit log for an internal user.

        Parameters:
        - user_id: str - The id of the user to create the audit log for.
        - action: AUDIT_ACTIONS - The action to create the audit log for.
        - user_row: LiteLLM_UserTable - The user row to create the audit log for.
        - litellm_changed_by: Optional[str] - The user id of the user who is changing the user.
        - user_api_key_dict: UserAPIKeyAuth - The user api key dictionary.
        - litellm_proxy_admin_name: Optional[str] - The name of the proxy admin.
        N)	id
updated_at
changed_bychanged_by_api_key
table_name	object_idr    updated_valuesr"   )request_data)rL   store_audit_logsr   r
   r4   uuiduuid4r   nowr   utcr   api_keyr   USER_TABLE_NAMEr   s          r8   r0   z7UserManagementEventHooks.create_internal_user_audit_log   s     * '')*tzz|$#<<5- ,$,,,+#4#<#<,<<!*)
 	
 	
s   BB#B!B#)NN)__name__
__module____qualname__staticmethodr   r   r   r9   r&   r   rS   r4   r   r   r0   r$       r8   r   r      s   55!5 *5 5n 99!9 *9 9v 

!
 *
 	
 
0  '+%)%
%
%
 %SM%
 *	%

 #+3-%
 sm%
 c]%
 %
ru   r   )__doc__r.   rk   r   r   typingr   pydanticr   rL   litellm._loggingr   litellm.proxy._typesr   r	   r
   r   r   r   r   r   r   r   +litellm.proxy.management_helpers.audit_logsr   r   r$   ru   r8   <module>r|      sB      '    1   Tt
 t
ru   