o
    i=                     @   s  d dl Z d dl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	 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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mZ d dlmZ d dlmZ d dlmZ d dl m!Z! de"ddfddZ#de$ddfddZ%de&e' fddZ(de'fd d!Z)G d"d# d#e!Z*e* ZG d$d% d%e!Z+e+ Z,dS )&    N)machine)system)Optional)API_SECURITY)APPSEC)DEFAULT)EXPLOIT_PREVENTION)IAST)(IAST_TRUNCATION_MAX_VALUE_LENGTH_DEFAULT)LOGIN_EVENTS_MODE)TELEMETRY_INFORMATION_NAME)
APPSEC_ENV)	SpanTypes)AI_GUARD_ENABLED)AI_GUARD_ENDPOINT)AI_GUARD_MAX_CONTENT_SIZE)AI_GUARD_MAX_MESSAGES_LENGTH)AI_GUARD_TIMEOUT)in_aws_lambda)config)DDConfigrreturnc                 C   s   | dk rt dd S )Nr   zvalue must be non negative
ValueErrorr    r   Q/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/settings/asm.py_validate_non_negative_int   s   r   c                 C   s   | dk s| dkrt dd S )Nr   d   z*percentage value must be between 0 and 100r   r   r   r   r   _validate_percentage!   s   r    optionsc                    s   dt dt f fdd}|S )Nstr_inr   c                    s(    D ]}| |  r|  S q d S )Nr   )
startswithlower)r"   or!   r   r   parse'   s
   z_parse_options.<locals>.parse)str)r!   r'   r   r&   r   _parse_options&   s   r)   c                  C   s   t jt jt} ddddt  }t  }t dkr-|dkr-ddlm} |d	kr-d
}dddd}|	||}t j
| dddd|dd| S )z=
    Build the filename of the libddwaf library to load.
    sodylibdll)LinuxDarwinWindowsr/   amd64r   )maxsizel        x86x64x86_64win32)r0   i686r2   z..appsec_ddwaflibddwaflibz	libddwaf.)ospathdirname__file__r   r   r$   sysr1   getjoin)_DIRNAMEFILE_EXTENSIONARCHIr1   TRANSLATE_ARCHARCHITECTUREr   r   r   build_libddwaf_filename0   s   
rG   c                       s  e Zd ZU ejeeddZej	Z
ejee ejddZedkr!dZejhZejhZejdejeejddZejeejdddZejeejdddZejeejddZejeej dddZ!ejeej"dddZ#ejeej$e%dZ&eje'ej(e)dZ*ejeej+ddZ,dZ-dZ.ejeej/e0j1e2e0j3e0j1e0j4gd	Z5dZ6ee e7d
< ejeej8ddZ9ejeej:ddZ;ejeej<ddZ=ejeej>ddZ?ejee@jAddZBejee@jCddZDejee@jEddZFejee@jGddZHeje'e@jIeJjIdZKdZLeM ZNeOjPQeNZRejedeJjSeddZTejedddZUejeejVeJjWdZXejeejYeJjZdZ[ejeej\ddZ]ejeej^ddZ_ejeej`ddZaeje'ejbddZceje'ejdddZeejeejfddZgejedddZhejedddZiejedddZjdZkejeeljmddZnejeeljoddZpeje'eljqderdZseje'eljtderdZuejeeljvdewdZxejeejoddZyejedddZzejedddZ{ejedddZ|ejedddZ}ejedddZ~ejedddZee7d < eje'd!d"dZe'e7d#< g d$Zejeejd%dZdZdZd&ej  kod'k n  oejd(pejd) Zee7d*< dZee e7d+<  fd,d-Zed.d/ Zd0d1 Zd;d3d4Zed2efd5d6Zed2efd7d8Zed2efd9d:Z  ZS )<	ASMConfigFdefaultN iast_enabledT)rJ   privateg      >@)rJ   parser"_auto_user_instrumentation_rc_modeDD_APPSEC_WAF_TIMEOUTz,Timeout in milliseconds for WAF computations)rJ   	help_typehelp _DD_APPSEC_DEDUPLICATION_ENABLEDz(?i)^.*(?:p(?:ass)?w(?:or)?d|pass(?:_?phrase)?|secret|(?:api_?|private_?|public_?|access_?|secret_?)key(?:_?id)?|password|token|username|user_id|last.name|consumer_?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?)z(?i)bearer\s+[a-z0-9\._\-]+|token:[a-z0-9]{13}|password|gh[opsu]_[0-9a-zA-Z]{36}|ey[I-L][\w=-]+\.ey[I-L][\w=-]+(\.[\w.+\/=-]+)?|[\-]{5}BEGIN[a-z\s]+PRIVATE\sKEY[\-]{5}[^\-]+[\-]{5}END[a-z\s]+PRIVATE\sKEY|ssh-rsa\s*[a-z0-9\/\.+]{100,}   DD_IAST_DEDUPLICATION_ENABLED'DD_IAST_SECURITY_CONTROLS_CONFIGURATION_DD_IAST_USE_ROOT_SPAN)rJ   	validator    g     R@DD_DJANGO_INCLUDE_USER_NAMEDD_DJANGO_INCLUDE_USER_EMAILDD_DJANGO_INCLUDE_USER_LOGINDD_DJANGO_INCLUDE_USER_REALNAME%DD_FASTAPI_ASYNC_BODY_TIMEOUT_SECONDSg?4DD_API_SECURITY_DOWNSTREAM_BODY_ANALYSIS_SAMPLE_RATEg      ?_dr_sample_rate4DD_API_SECURITY_MAX_DOWNSTREAM_REQUEST_BODY_ANALYSIS   _dr_body_limit_per_request)4_asm_enabled_asm_can_be_enabled_asm_static_rule_file%_asm_obfuscation_parameter_key_regexp'_asm_obfuscation_parameter_value_regexp_asm_processed_span_types_asm_http_span_types_apm_tracing_enabled_bypass_instrumentation_for_waf#_is_testing_instrumentation_for_waf_iast_enabled_iast_request_sampling_iast_debug_iast_propagation_debug_iast_telemetry_report_lvl_iast_security_controls_iast_is_testing_iast_use_root_span!_iast_truncation_max_value_length_ep_enabled_use_metastruct_for_triggers_use_metastruct_for_iast%_auto_user_instrumentation_local_moderO   "_auto_user_instrumentation_enabled_user_model_login_field_user_model_email_field_user_model_name_field_api_security_enabled_api_security_sample_delay!_api_security_parse_response_bodyr`   rc   _waf_timeout_iast_redaction_enabled_iast_redaction_name_pattern_iast_redaction_value_pattern_iast_max_concurrent_requests&_iast_max_vulnerabilities_per_requests_iast_lazy_taint_iast_deduplication_enabled_ep_stack_trace_enabled_ep_max_stack_traces_ep_max_stack_trace_depth_ep_stack_top_percent_iast_stack_trace_enabled_asm_config_keys_asm_deduplication_enabled_django_include_user_name_django_include_user_email_django_include_user_login_django_include_user_realnamezx^[+-]?((0b[01]+)|(0x[0-9A-Fa-f]+)|(\d+\.?\d*(?:[Ee][+-]?\d+)?|\.\d+(?:[Ee][+-]?\d+)?)|(X\'[0-9A-Fa-f]+\')|(B\'[01]+\'))$)      r   )r      r   wincygwin_iast_supported_rc_client_idc                    s   t    t r| jtj | jtj dt_	d| _
| j
s"d| _| jsCd| _d| _d| _d| _d| _d| _tj| _d| _d| _d S |   d S )NF)super__init__r   ri   addr   
SERVERLESSrj   tracer_config_remote_config_enabledr   rn   _asm_libddwaf_availablerd   re   r   rw   r{   r   DISABLEDrz   _load_modules_asm_rc_enabled_eval_asm_can_be_enabledself	__class__r   r   r     s&   

zASMConfig.__init__c                 C   s   t tjv rtjS | jS N)r   r;   environr   ENABLED_ORIGIN_ENV_asm_enabled_originr   r   r   r   asm_enabled_origin/  s   
zASMConfig.asm_enabled_originc                 C      |    dS zhFor testing purposes, reset the configuration to its default values given current environment variables.Nr   r   r   r   r   reset5     zASMConfig.resetr   c                 C   s`   t tjvotj| _t| jo| jp| j| _	| jrtjp| j| _
t tjv r,| jr.dt_d S d S d S NT)r   r;   r   r   r   re   boolrw   rd   r   r    _trace_resource_renaming_enabledr   r   r   r   r   9  s   
z"ASMConfig._eval_asm_can_be_enabledc                 C   s   | j o| jo| jS r   )r   rd   r   r   r   r   r   _api_security_feature_active@  s   z&ASMConfig._api_security_feature_activec                 C   s   | j p
| jp
tjdu o| j S r   )rd   rn   r   _sca_enabledrk   r   r   r   r   _apm_opt_outD  s   zASMConfig._apm_opt_outc                 C   s(   | j r| jr| jd ur| jS | jS tjS r   )rd   r{   rO   rz   r   r   r   r   r   r   _user_event_modeJ  s
   
zASMConfig._user_event_mode)r   N)__name__
__module____qualname__r   varr   r   rd   r   ENABLED_ORIGIN_DEFAULTr   r   r(   	RULE_FILErf   r   WEBri   rj   r   _from_endpointr@   r	   ENVrn   ENV_PROPAGATION_ENABLED_iast_propagation_enabledENV_SINK_POINTS_ENABLED_iast_sink_points_enabledfloatENV_REQUEST_SAMPLINGro   	ENV_DEBUGrp   ENV_PROPAGATION_DEBUGrq   ENV_TELEMETRY_REPORT_LVLr   rr   int'ENV_DD_IAST_TRUNCATION_MAX_VALUE_LENGTHr
   rv   APM_TRACING_ENVrk   rx   ry   AUTO_USER_INSTRUMENTATION_MODEr   IDENTr)   r   ANONrz   rO   __annotations__&AUTO_USER_INSTRUMENTATION_MODE_ENABLEDr{   USER_MODEL_LOGIN_FIELDr|   USER_MODEL_EMAIL_FIELDr}   USER_MODEL_NAME_FIELDr~   r   ENV_VAR_ENABLEDr   SAMPLE_DELAYr   PARSE_RESPONSE_BODYr   ENDPOINT_COLLECTION!_api_security_endpoint_collectionENDPOINT_COLLECTION_LIMITr   '_api_security_endpoint_collection_limit_api_security_activerG   _asm_libddwafr;   r<   existsr   WAF_TIMEOUTr   r    OBFUSCATION_PARAMETER_KEY_REGEXP'APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXPrg   "OBFUSCATION_PARAMETER_VALUE_REGEXP)APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXPrh   REDACTION_ENABLEDr   REDACTION_NAME_PATTERNr   REDACTION_VALUE_PATTERNr   DD_IAST_MAX_CONCURRENT_REQUESTSr   #DD_IAST_VULNERABILITIES_PER_REQUESTr   
LAZY_TAINTr   r   rs   ru   rt   r   
EP_ENABLEDrw   STACK_TRACE_ENABLEDr   MAX_STACK_TRACESr   r   MAX_STACK_TRACE_DEPTHr   STACK_TOP_PERCENTr    r   r   r   r   r   r   _fast_api_async_body_timeoutr`   rc   r   REDACTION_VALUE_NUMERAL_iast_redaction_numeral_patternrl   rm   r?   version_infoplatformr#   r   r   r   propertyr   r   r   r   r   r   __classcell__r   r   r   r   rH   D   s   
 


	


6

rH   c                   @   sl   e Zd ZejeeddZejee	ddZ
ejeeddZejeeddZejeeddZg dZdd	 Zd
S )AIGuardConfigFrI   rK   i      i'  )_ai_guard_enabled_ai_guard_endpoint_ai_guard_max_content_size_ai_guard_max_messages_length_ai_guard_timeoutc                 C   r   r   r   r   r   r   r   r   f  r   zAIGuardConfig.resetN)r   r   r   r   r   r   r   r   r(   r   r   r   r   r   r   r   r   r   _ai_guard_config_keysr   r   r   r   r   r   V  s    r   )-r;   os.pathr   r   r   r?   typingr   ddtrace.appsec._constantsr   r   r   r   r	   r
   r   r   ddtrace.constantsr   ddtrace.extr   ddtrace.internal.constantsr   r   r   r   r   ddtrace.internal.serverlessr   !ddtrace.internal.settings._configr   r   ddtrace.internal.settings._corer   r   r   r   r    listr(   r)   rG   rH   r   ai_guard_configr   r   r   r   <module>   sD    
  
