o
    iI                     @   s  d 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 ddlm	Z
 ddlmZ ddlZdd	lmZ 	
d!dedejdejeeejf  deddf
ddZ			
d!dededejdejeeejf  deddfddZ				
d"dedejdedejeeejf  deddfddZ				
d#dedejdeje dejeeejf  deddfddZ			
d!dejdeje dejeeejf  deddf
ddZdedeeejf ddfdd ZdS )$a  
Public User Tracking SDK Version 2

This module provides a public interface for tracking user events.
This replaces the previous version of the SDK available in ddtrace.appsec.trace_utils
Implementation can change in the future, but the interface will remain compatible.
    N)_asm_request_context)
_constants)_metrics)_trace_utils)get_blocked)WAF_ACTIONS)BlockingExceptionFloginuser_idmetadata_autoreturnc                 C   s6   t d |rtjjntjj}tjd|| ||d dS )z
    Track a successful user login event.

    This function should be called when a user successfully logs in to the application.
    It will create an event that can be used for monitoring and analysis.
    login_successN)r	   r   login_events_mode)r   _report_ato_sdk_usager   LOGIN_EVENTS_MODEAUTOSDKr   track_user_login_success_event)r	   r
   r   r   mode r   Q/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/appsec/track_user_sdk.pytrack_login_success   s   
	r   existsc                 C   s8   t d |rtjjntjj}tjd||| ||d dS )z
    Track a failed user login event.

    This function should be called when a user fails to log in to the application.
    It will create an event that can be used for monitoring and analysis.
    login_failureN)r   r	   r   r   )r   r   r   r   r   r   r   track_user_login_failure_event)r	   r   r
   r   r   r   r   r   r   track_login_failure#   s
   

r   Tsuccessc                 C   sN   t d |rtjjntjj}tjd||| |d |r%tjdd|d dS dS )z
    Track a user signup event.

    This function should be called when a user successfully signs up for the application.
    It will create an event that can be used for monitoring and analysis.
    signupN)r	   r   
signup_sdkr   )	r   r   r   r   r   r   r   track_user_signup_eventtrack_custom_event)r	   r
   r   r   r   r   r   r   r   track_signup7   s   
r#   
session_idc                 C   s  t  }|du r
dS |r|tjjt| | r"|tjjt|  |p%i }|ddp1|dd}|ddp=|dd}|ddpI|dd}	|ddpU|d	d}
t	j
d|t|tra|ndt|tri|ndt|	trq|	ndt|
try|
nd||||rtjjntjjd

 |rt	jdd|d |s|tjjtjj t  r|rt|nd| dd}|r||d< t j|dd}|rtdd |jD rtt dS dS dS dS )z|
    Track an authenticated user.

    This function should be called when a user is authenticated in the application."
    Nnameusr.nameemail	usr.emailscope	usr.scoperoleusr.roler%   r'   r)   r+   r$   span	may_blockr   auth_sdkr    sdk)REQUEST_USER_IDREQUEST_USERNAMELOGIN_SUCCESSREQUEST_SESSION_IDTcustom_data
force_sentc                 s        | ]}|t jt jfv V  qd S N_WAF_ACTIONSBLOCK_ACTIONREDIRECT_ACTION.0actionr   r   r   	<genexpr>|       
ztrack_user.<locals>.<genexpr>)r   get_entry_span_set_tag_strr   APPSECUSER_LOGIN_USERIDstrUSER_LOGIN_USERNAMEpopr   set_user
isinstancer   r   r   r"   !AUTO_LOGIN_EVENTS_COLLECTION_MODEin_asm_contextcall_waf_callbackanyactionsr   _get_blocked)r	   r
   r$   r   r   r.   metausr_name	usr_email	usr_scopeusr_roler7   resr   r   r   
track_userK   sV   
	rY   c                 C   s  t  }|du r
dS | r|tjjt|  |pi }|ddp%|dd}|ddp1|dd}|ddp=|dd}|ddpI|d	d}	tj	d| t
|trU|ndt
|tr]|ndt
|tre|ndt
|	trm|	nd||||rwtjjntjjd

 |rtjdd|d |s|tjjtjj t  r| rt| nddd}
|r||
d< t j|
dd}|rtdd |jD rtt dS dS dS dS )z
    Track an authenticated user with only user id.

    This function should be called when a user is authenticated in the application."
    Nr%   r&   r'   r(   r)   r*   r+   r,   r-   r0   r    r1   )r2   r4   r5   Tr6   c                 s   r9   r:   r;   r?   r   r   r   rB      rC   z track_user_id.<locals>.<genexpr>)r   rD   rE   r   rF   rG   rH   rJ   r   rK   rL   r   r   r   r"   rM   rN   rO   rP   rQ   r   rR   )r
   r$   r   r   r.   rS   rT   rU   rV   rW   r7   rX   r   r   r   track_user_id   sP   
rZ   
event_namec                 C   s   t d tjd| |d dS )z
    Track a custom user event.

    This function should be called when a custom user event occurs in the application.
    It will create an event that can be used for monitoring and analysis.
    customNr    )r   r   r   r"   )r[   r   r   r   r   r"      s   
r"   )NNF)NTNF)NNNF)__doc__typingtddtrace.appsecr   r   r   r   #ddtrace.appsec._asm_request_contextr   rR   ddtrace.appsec._constantsr   r<   ddtrace.appsec.trace_utilsddtraceddtrace.internal._exceptionsr   rH   AnyOptionaldictboolr   r   r#   rY   rZ   r"   r   r   r   r   <module>   s    



9
$3