o
    Á¿i½  ã                   @   sø   d dl Z d dlZd dlmZ d dlmZ G dd„ dejƒZejej	B ej
B ejB ejB ejB ejB ejB ejB ejB ejB ejB ejB ejB ejB ejB ejB ZejejB ejB ejB ejB Zej ej!B Z"de#fdd„Z$defdd	„Z%de&fd
d„Z'dS )é    N)Úconfigc                   @   s€   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdS )ÚFlagsé   é   é   é   é    é@   é€   é   i   i   i   i   i   i    i  @ i  € i   i   i   i   i   l        l        l        l        l         l       € l        l         N) Ú__name__Ú
__module__Ú__qualname__ÚASM_ACTIVATIONÚASM_IP_BLOCKINGÚASM_DD_RULESÚASM_EXCLUSIONSÚASM_REQUEST_BLOCKINGÚASM_ASM_RESPONSE_BLOCKINGÚASM_USER_BLOCKINGÚASM_CUSTOM_RULESÚASM_CUSTOM_BLOCKING_RESPONSEÚASM_TRUSTED_IPSÚASM_PROCESSOR_OVERRIDESÚASM_CUSTOM_DATA_SCANNERSÚASM_EXCLUSION_DATAÚASM_RASP_SQLIÚASM_RASP_LFIÚASM_RASP_SSRFÚASM_RASP_SHIÚASM_RASP_XXEÚASM_RASP_RCEÚASM_RASP_NOSQLIÚASM_RASP_XSSÚASM_AUTO_USERÚASM_ENDPOINT_FINGERPRINTÚASM_SESSION_FINGERPRINTÚASM_NETWORK_FINGERPRINTÚASM_HEADER_FINGERPRINTÚASM_RASP_CMDIÚASM_DD_MULTICONFIGÚASM_TRACE_TAGGING_RULES© r,   r,   úP/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/appsec/_capabilities.pyr      s<    r   Úreturnc                  C   s   t ƒ } t| @ dkS ©Nr   )Ú_rc_capabilitiesÚ_FEATURE_REQUIRED)Úflagsr,   r,   r-   Ú_asm_feature_is_required@   s   r3   c                  C   sX   t dƒ} tjr*tjr| t jO } tjr"tjd u r"| tO } tj	r"| t
O } tjr*| t jO } | S r/   )r   r   Ú_remote_config_enabledÚ
asm_configÚ_asm_can_be_enabledr   Ú_asm_enabledÚ_asm_static_rule_fileÚ_ALL_ASM_BLOCKINGÚ_ep_enabledÚ	_ALL_RASPÚ"_auto_user_instrumentation_enabledr$   ©Úvaluer,   r,   r-   r0   E   s   

r0   c                  C   s(   t ƒ } t |  |  ¡ d d d¡¡ ¡ S )ab  return the bit representation of the composed capabilities in base64
    bit 0: Reserved
    bit 1: ASM 1-click Activation
    bit 2: ASM Ip blocking

    Int Number  -> binary number    -> bytes representation -> base64 representation
    ASM Activation:
    2           -> 10               -> b'\x02'              -> "Ag=="
    ASM Ip blocking:
    4           -> 100              -> b'\x04'              -> "BA=="
    ASM Activation and ASM Ip blocking:
    6           -> 110              -> b'\x06'              -> "Bg=="
    ...
    256         -> 100000000        -> b'\x01\x00'          -> b'AQA='
    é   r   Úbig)r0   Úbase64Ú	b64encodeÚto_bytesÚ
bit_lengthÚdecoder=   r,   r,   r-   Ú_appsec_rc_capabilitiesS   s   "rF   )(rA   ÚenumÚ!ddtrace.internal.settings._configr   Úddtrace.internal.settings.asmr5   ÚIntFlagr   r   r   r   r   r   r   r   r   r   r   r   r%   r&   r'   r(   r*   r+   r9   r   r   r   r   r)   r;   r   r$   r1   Úboolr3   r0   ÚstrrF   r,   r,   r,   r-   Ú<module>   sX    !ÿþýüûúùø	÷
öõôóòñðÿ