o
    Á¿ií	  ã                   @   sú   d dl 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  mZ deeef d	eeee f fd
d„Zdeeee f dee ded	eeeeef df fdd„Zdeeee f d	eeeef  fdd„ZdS )é    N)ÚSimpleCookie)ÚAny)ÚOptional)ÚUnion)Úparse_qs)ÚhttpÚrequest_headersÚreturnc                 C   sB   i }|   ¡ D ]\}}t |¡}|rt|ƒ ¡ ||< qd||< q|S )z„Normalize headers according to the WAF expectations.

    The WAF expects headers to be lowercased and empty values to be None.
    N)ÚitemsÚ
http_utilsÚnormalize_header_nameÚstrÚstrip)r   ÚheadersÚkeyÚvalueÚnormalized_key© r   úN/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/appsec/_http_utils.pyÚnormalize_headers   s   

r   Únormalized_headersÚbodyÚis_body_base64c              	   C   sÌ   |du rdS |rz	t  |¡ ¡ }W n ttfy   Y dS w z=|  d¡}|s)W dS |dv r3t |¡W S |dv r<t|ƒW S |dv rFt	 
|¡W S | d¡rRt || ¡W S |dkrYW dS W dS  tye   Y dS w )z6Parse a request body based on the content-type header.Nzcontent-type)zapplication/jsonzapplication/vnd.api+jsonz	text/json)zapplication/x-url-encodedz!application/x-www-form-urlencoded)zapplication/xmlztext/xmlzmultipart/form-dataz
text/plain)Úbase64Ú	b64decodeÚdecodeÚ
ValueErrorÚ	TypeErrorÚgetÚjsonÚloadsr   Ú	xmltodictÚparseÚ
startswithr   Úparse_form_multipartÚ	Exception)r   r   r   Úcontent_typer   r   r   Úparse_http_body   s4   ÿ


ÿr'   c                 C   sV   ddh}|D ]"}|| v r(t ƒ }| | }| |= |r| |¡ dd„ | ¡ D ƒ  S qdS )z%Extract cookies from the WAF headers.Úcookiez
set-cookiec                 S   s   i | ]\}}||j “qS r   )r   )Ú.0ÚkÚvr   r   r   Ú
<dictcomp>N   s    z0extract_cookies_from_headers.<locals>.<dictcomp>N)r   Úloadr
   )r   Úcookie_namesÚnamer(   Úheaderr   r   r   Úextract_cookies_from_headersB   s   
úr1   )r   Úhttp.cookiesr   r   Útypingr   r   r   Úurllib.parser   Úddtrace.internal.utilsr   r   Úddtrace.vendor.xmltodictÚvendorr!   Údictr   r   Úboolr'   r1   r   r   r   r   Ú<module>   s8    
ÿ
þÿþý
ü$ÿþ