o
    Zh                     @   s
  d dl mZ d dlZd dlmZ d dlmZmZ d dlm	Z	 d dl
mZmZ d dlmZ zd dlmZ W n ey?   dZY nw erdd 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Zedd eD Zdd ZG dd deZdd Zdd Z dS )    )absolute_importN)deepcopy)Hub_should_send_default_pii)AnnotatedValue)	text_type	iteritems)TYPE_CHECKING)RawPostDataException)Any)Dict)Optional)Union)Event)ZREMOTE_ADDRHTTP_X_FORWARDED_FORZHTTP_SET_COOKIEZHTTP_COOKIEZHTTP_AUTHORIZATIONZHTTP_X_API_KEYr   ZHTTP_X_REAL_IPc                 c   s*    | ]}| d r|td d V  qdS )ZHTTP_N)
startswithlen).0x r   [/var/www/html/lang_env/lib/python3.10/site-packages/sentry_sdk/integrations/_wsgi_common.py	<genexpr>'   s    

r   c                 C   s@   | d u rdS | j d }|dkp|dko|dkp|dko|dk S )NFZmax_request_body_sizeneverZsmalli  Zmediumi'  )options)clientcontent_lengthZbodiesr   r   r   request_body_within_bounds,   s   
r   c                   @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )RequestExtractorc                 C   s
   || _ d S N)request)selfr   r   r   r   __init__:   s   
zRequestExtractor.__init__c              	   C   s   t jj}|d u r
d S d }|  }|di }t r!t|  |d< t||s+t	
 }n(d }z|  }W n ttfy>   Y nw |  }|d urJ|}n	|rQt	 }nd }|d ur[||d< t||d< d S )Nr   cookiesdata)r   currentr   r   getr   dictr"   r   r   removed_because_over_size_limitraw_datar
   
ValueErrorparsed_bodyremoved_because_raw_datar   )r    eventr   r#   r   Zrequest_infor(   r*   r   r   r   extract_into_event>   s2   


z#RequestExtractor.extract_into_eventc                 C   s,   zt |  ddW S  ty   Y dS w )NZCONTENT_LENGTHr   )intenvr%   r)   r    r   r   r   r   h   s
   zRequestExtractor.content_lengthc                 C      t  r   NotImplementedErrorr0   r   r   r   r"   o      zRequestExtractor.cookiesc                 C   r1   r   r2   r0   r   r   r   r(   s   r4   zRequestExtractor.raw_datac                 C   r1   r   r2   r0   r   r   r   formw   r4   zRequestExtractor.formc                 C   sN   |   }|  }|s|r#tt|}t|D ]
\}}t ||< q|S |  S r   )r5   filesr&   r   r   r+   json)r    r5   r6   r#   key_r   r   r   r*   {   s   zRequestExtractor.parsed_bodyc                 C   s   t |  dS )NZCONTENT_TYPE)_is_json_content_typer/   r%   r0   r   r   r   is_json   s   zRequestExtractor.is_jsonc                 C   sb   z&|   sW d S |  }|d u rW d S t|trt|W S t|dW S  ty0   Y d S w )Nzutf-8)r;   r(   
isinstancer   r7   loadsdecoder)   )r    r(   r   r   r   r7      s   
zRequestExtractor.jsonc                 C   r1   r   r2   r0   r   r   r   r6      r4   zRequestExtractor.filesc                 C   r1   r   r2   )r    filer   r   r   size_of_file   r4   zRequestExtractor.size_of_filec                 C   r1   r   r2   r0   r   r   r   r/      r4   zRequestExtractor.envN)__name__
__module____qualname__r!   r-   r   r"   r(   r5   r*   r;   r7   r6   r@   r/   r   r   r   r   r   9   s    *r   c                 C   s0   | pd ddd }|dkp|do|dS )N ;   r   zapplication/jsonzapplication/z+json)splitr   endswith)ctmtr   r   r   r:      s
   
r:   c                 C   s   t  r| S dd t| D S )Nc                 S   s2   i | ]\}}||  d dtvr|nt qS )-r9   )upperreplaceSENSITIVE_HEADERSr   r'   )r   kvr   r   r   
<dictcomp>   s    z#_filter_headers.<locals>.<dictcomp>)r   r   )headersr   r   r   _filter_headers   s
   rS   )!
__future__r   r7   copyr   Zsentry_sdk.hubr   r   Zsentry_sdk.utilsr   Zsentry_sdk._compatr   r   Zsentry_sdk._typesr	   Zdjango.http.requestr
   ImportErrorZ
sentry_sdktypingr   r   r   r   r   ZSENSITIVE_ENV_KEYStuplerN   r   objectr   r:   rS   r   r   r   r   <module>   s6    s
