
    gh                     f   S SK Jr  S SKrS SKJr  S SKrS SKJr  S SKJ	r	J
r
   S SKJr  S SKJr  \(       a2  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJrJr  Sr\" S \ 5       5      rSr\S 5       rS r " S S5      r S r!S r"S r# " S S5      r$g! \ a    Sr Nf = f)    )contextmanagerN)deepcopy)should_send_default_pii)AnnotatedValuelogger)RawPostDataException)TYPE_CHECKING)Any)Dict)Iterator)Mapping)MutableMapping)Optional)Union)EventHttpStatusCodeRange)REMOTE_ADDRHTTP_X_FORWARDED_FORHTTP_SET_COOKIEHTTP_COOKIEHTTP_AUTHORIZATIONHTTP_X_API_KEYr   HTTP_X_REAL_IPc              #   l   #    U  H*  oR                  S 5      (       d  M  U[        S 5      S v   M,     g7f)HTTP_N)
startswithlen).0xs     g/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/integrations/_wsgi_common.py	<genexpr>r!   &   s+      1!\\'5JAc'ln1s   44)CONNECTDELETEGETPATCHPOSTPUTTRACEc               #      #    S v   g 7fN r+       r    nullcontextr-   8   s
      
s   c                     U c  gU R                   S   nUS:H  =(       d)    US:H  =(       a    US:  =(       d    US:H  =(       a    US:  (       + $ )NFmax_request_body_sizeneversmalli  mediumi'  )options)clientcontent_lengthbodiess      r    request_body_within_boundsr7   >   sY    ~^^34F' 	;g8.5"8	;h9>E#9 r,   c                   `    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)RequestExtractorK   z$
Base class for request extraction.
c                     Xl         g r*   request)selfr=   s     r    __init__RequestExtractor.__init__U   s    r,   c                 *   [         R                  " 5       nUR                  5       (       d  g S nU R                  5       nUR	                  S0 5      n[        5       (       a  [        U R                  5       5      US'   [        X$5      (       d  [        R                  " 5       nOHS n U R                  5       nU R                  5       nUb  UnOU(       a  [        R                  " 5       nOS nUb  X5S'   [!        U5      US'   g ! [        [        4 a     N]f = f)Nr=   cookiesdata)
sentry_sdk
get_client	is_activer5   getr   dictrB   r7   r   removed_because_over_size_limitraw_datar   
ValueErrorparsed_bodyremoved_because_raw_datar   )r>   eventr4   rC   r5   request_inforJ   rL   s           r    extract_into_event#RequestExtractor.extract_into_eventY   s    &&(!!,,.yyB/"$$&*4<<>&:L#)&AA!AACD H==? **,K&"%>>@#' #L1i! )*5  s   $C? ?DDc                 v     [        U R                  5       R                  SS5      5      $ ! [         a     gf = f)NCONTENT_LENGTHr   )intenvrG   rK   r>   s    r    r5   RequestExtractor.content_length   s6    	txxz~~&6:;; 		s   (+ 
88c                     [        5       er*   NotImplementedErrorrV   s    r    rB   RequestExtractor.cookies       !##r,   c                     [        5       er*   rY   rV   s    r    rJ   RequestExtractor.raw_data   r\   r,   c                     [        5       er*   rY   rV   s    r    formRequestExtractor.form   r\   r,   c                 |    U R                  5       n U R                  5       nU(       d  U(       aY  0 nU(       a  [        UR	                  5       5      nU(       a.  UR                  5        H  n[        R                  " 5       X4'   M     U$ U R                  5       $ ! [         a    S n Nf = f! [         a    S n Nf = fr*   )	r`   	ExceptionfilesrH   itemskeysr   rM   json)r>   r`   rd   rC   keys        r    rL   RequestExtractor.parsed_body   s    	99;D	JJLE 5DDJJL) ::<C . G G IDI ( Kyy{#  	D	  	E	s"   B B, B)(B),B;:B;c                 R    [        U R                  5       R                  S5      5      $ )NCONTENT_TYPE)_is_json_content_typerU   rG   rV   s    r    is_jsonRequestExtractor.is_json   s    $TXXZ^^N%CDDr,   c                 J    U R                  5       (       d  g  U R                  5       nUc  g [	        U[
        5      (       a  [        R                  " U5      $ [        R                  " UR                  S5      5      $ ! [        [        4 a    S n Nhf = f! [         a     g f = f)Nzutf-8)	rm   rJ   r   rK   
isinstancestrrg   loadsdecode)r>   rJ   s     r    rg   RequestExtractor.json   s    	<<>> ==? (C((zz(++zz(//'":;; )*5       		s>   B A= B *B $B =BB BB 
B"!B"c                     [        5       er*   rY   rV   s    r    rd   RequestExtractor.files   r\   r,   c                     [        5       er*   rY   )r>   files     r    size_of_fileRequestExtractor.size_of_file   r\   r,   c                     [        5       er*   rY   rV   s    r    rU   RequestExtractor.env   r\   r,   r<   N)__name__
__module____qualname____firstlineno____doc__r?   rP   r5   rB   rJ   r`   rL   rm   rg   rd   ry   rU   __static_attributes__r+   r,   r    r9   r9   K   sE    (2T$$$.E2$$$r,   r9   c                     U =(       d    SR                  SS5      S   nUS:H  =(       d)    UR                  S5      =(       a    UR                  S5      $ )N ;   r   zapplication/jsonzapplication/z+json)splitr   endswith)ctmts     r    rl   rl      sM    
(		#q	!!	$B
   	!MM.) !KK r,   c           	          [        5       (       a  U $ U R                  5        VVs0 s HE  u  pUUR                  5       R                  SS5      [        ;  a  UO[
        R                  " 5       _MG     snn$ s  snnf )N-_)r   re   upperreplaceSENSITIVE_HEADERSr   rI   )headerskvs      r    _filter_headersr      sv       MMO $DA 	
wwy  c*2CC ??A	B
 $  s   AA5c                     U H)  n[        U[        5      (       a	  X:X  a    gM!   X;   a    gM+     g! [         a    [        R                  " S5         MQ  f = f)NTzFfailed_request_status_codes has to be a list of integers or containersF)rp   rT   	TypeErrorr   warning)codecode_rangestargets      r    _in_http_status_code_ranger      s[    fc""~	~     	NNX	s   1 AAc                   $    \ rS rSrSrS rS rSrg)HttpCodeRangeContaineri  z
Wrapper to make it possible to use list[HttpStatusCodeRange] as a Container[int].
Used for backwards compatibility with the old `failed_request_status_codes` option.
c                     Xl         g r*   _code_ranges)r>   r   s     r    r?   HttpCodeRangeContainer.__init__	  s    'r,   c                 ,    [        XR                  5      $ r*   )r   r   )r>   items     r    __contains__#HttpCodeRangeContainer.__contains__  s    )$0A0ABBr,   r   N)r}   r~   r   r   r   r?   r   r   r+   r,   r    r   r     s    
(Cr,   r   )%
contextlibr   rg   copyr   rD   sentry_sdk.scoper   sentry_sdk.utilsr   r   django.http.requestr   ImportErrortypingr	   r
   r   r   r   r   r   r   sentry_sdk._typesr   r   SENSITIVE_ENV_KEYStupler   DEFAULT_HTTP_METHODS_TO_CAPTUREr-   r7   r9   rl   r   r   r   r+   r,   r    <module>r      s    %    4 3 8 !%<	   1  
#  
 


I$ I$X&C Cq    s   B% %B0/B0