
    gh)                        S SK r S SKJr  S SKrS SKJrJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJrJr  S SKJr  S S	KJr  S S
KJrJr  S SKJrJrJrJr  S SKJr  \(       aa  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%  S SKJ&r&  S SK'J(r(J)r)  \$" S5      r*\$" S5      r+\$" S5      r, " S S\%5      r-\" S5      r.S(S jr/S)S jr0 " S S 5      r1 S*S! jr2S" r3S# r4S$ r5 " S% S&5      r6S' r7g)+    N)partial)get_host_get_headers)continue_trace)OPshould_send_default_pii)DEFAULT_HTTP_METHODS_TO_CAPTURE_filter_headersnullcontext)track_session)use_isolation_scope)TransactionTransactionSource)
ContextVarcapture_internal_exceptionsevent_from_exceptionreraise)TYPE_CHECKING)Callable)Dict)Iterator)Any)Tuple)Optional)TypeVar)Protocol)ExcInfo)EventEventProcessorWsgiResponseIterWsgiResponseHeadersWsgiExcInfoc                       \ rS rSrSS jrSrg)StartResponse+   Nc                     g N )selfstatusresponse_headersexc_infos       _/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/integrations/wsgi.py__call__StartResponse.__call__,   s        r)   r(   )__name__
__module____qualname____firstlineno__r/   __static_attributes__r)   r1   r.   r%   r%   +   s    	r1   r%   sentry_wsgi_middleware_appliedc                 B    U R                  S5      R                  X5      $ )Nlatin1)encodedecode)scharseterrorss      r.   wsgi_decoding_dancer?   4   s    88H$$W55r1   c                    U R                  SS5      R                  S5      nU R                  SS5      R                  S5      nU SU 3nU R                  S5      < S[        X5      < S[	        U5      R                  S5      < 3$ )zLReturn the absolute URL without query string for the given WSGI
environment.SCRIPT_NAME /	PATH_INFOzwsgi.url_schemez://)getrstriplstripr   r?   )environuse_x_forwarded_forscript_name	path_infopaths        r.   get_request_urlrM   9   s~     ++mR077<KK,33C8I]!I;'D 	%&.D!((- r1   c                   .    \ rS rSrSrSS\4S jrS rSrg)	SentryWsgiMiddlewareH   apprI   span_originhttp_methods_to_captureFmanualc                 4    Xl         X l        X0l        X@l        g r(   rQ   )r*   rR   rI   rS   rT   s        r.   __init__SentryWsgiMiddleware.__init__P   s     #6 &'>$r1   c                 $   [         R                  S5      (       a  U R                  X5      $ [         R                  S5         [        R
                  " 5        n[        USS9   [        5          UR                  5         SUl	        UR                  [        XR                  5      5        S S S 5        UR                  SS5      R                  5       nS nX@R                  ;   a3  [        U[         R"                  S[$        R&                  U R(                  S	9nUb  [        R*                  " US
U0S9O	[-        5           U R                  U[/        [0        X%5      5      nS S S 5        S S S 5        S S S 5        [         R                  S5        [9        WW5      $ ! , (       d  f       N= f! [2         a    [5        [7        5       6    Nff = f! , (       d  f       Np= f! , (       d  f       Ny= f! , (       d  f       N= f! [         R                  S5        f = f)NFTrequest)session_modewsgiREQUEST_METHODrB   zgeneric WSGI request)opnamesourceoriginwsgi_environ)custom_sampling_context)_wsgi_middleware_appliedrE   rR   set
sentry_sdkisolation_scoper   r   clear_breadcrumbs_nameadd_event_processor_make_wsgi_event_processorrI   upperrT   r   r   HTTP_SERVERr   ROUTErS   start_transactionr   r   _sentry_start_responseBaseExceptionr   _capture_exception_ScopedResponse)r*   rH   start_responsescopemethodtransactionresponses          r.   r/   SentryWsgiMiddleware.__call__]   s   #''..88G44 $$T*)	0++-"5yA46//1&,116 ')A)A 7 %[[)92>DDFF"&K!=!==&4#!~~!7#4#:#:#'#3#3' '2	 #44'5CW4M
 )]+;'+xx ' '$:N!"(H+- B .P %((/uh//Q 76F  - ;#%7%9:;+ +- BA .-P %((/s   G8 G'"G-<F)BG9G; F%G#G'+G8 
F"G%G	?GG	G
GG
G$	 G''
G51G8 8H)rR   rT   rS   rI   N)	r2   r3   r4   r5   	__slots__r
   rW   r/   r6   r)   r1   r.   rO   rO   H   s    I " ??10r1   rO   c                     [        5          [        UR                  SS5      S   5      nUb  UR                  U5        S S S 5        Uc  U " X#5      $ U " X#U5      $ ! , (       d  f       N"= f)N    r   )r   intsplitset_http_status)old_start_responserw   r+   r,   r-   
status_ints         r.   rp   rp      sh     
%	&c1-a01
"''
3 
'
  "&;;!&HEE 
'	&s   3A
A(c              #   n   #    SS/n[        5       (       a  US/-  nU H  nX ;   d  M
  X U   4v   M     g7f)z
Returns our explicitly included environment variables we want to
capture (server name, port and remote addr if pii is enabled).
SERVER_NAMESERVER_PORTREMOTE_ADDRNr   )rH   keyskeys      r.   _get_environr      sD      =)D   	>s|## s   "55c                      U S   R                  S5      S   R                  5       $ ! [        [        4 a     Of = f U S   $ ! [         a     Of = fU R	                  S5      $ )z
Infer the user IP address from various headers. This cannot be used in
security sensitive situations since the value may be forged from a client,
but it's good enough for the event payload.
HTTP_X_FORWARDED_FOR,r   HTTP_X_REAL_IPr   )r   stripKeyError
IndexErrorrE   )rH   s    r.   get_client_ipr      sw    -.44S9!<BBDDj! '((  ;;}%%s   $' ::A 
AAc                     [         R                  " 5       n U S   n[        U[        5      =(       a    UR                  S;   nU(       dA  [        U [        R                  " 5       R                  SSS.S9u  p4[        R                  " X4S9  U $ )zt
Captures the current exception and sends it to Sentry.
Returns the ExcInfo tuple to it can be reraised afterwards.
r}   )r   Nr\   F)typehandled)client_options	mechanism)hint)
sysr-   
isinstance
SystemExitcoder   rf   
get_clientoptionscapture_event)r-   eshould_skip_captureeventr   s        r.   rr   rr      sv     ||~HA %Q
3K)8K*%002::%%8

 	  2Or1   c                   .    \ rS rSrSrSrS rS rS rSr	g)rs      a=  
Users a separate scope for each response chunk.

This will make WSGI apps more tolerant against:
- WSGI servers streaming responses from a different thread/from
  different threads than the one that called start_response
- close() not being called
- WSGI servers streaming responses interleaved from the same thread
)	_response_scopec                     Xl         X l        g r(   )r   r   )r*   ru   rx   s      r.   rW   _ScopedResponse.__init__   s    !r1   c              #     #    [        U R                  5      n [        U R                  5          [	        U5      nS S S 5        Wv   M0  ! [
         a     S S S 5        g [         a    [        [        5       6    N=f = f! , (       d  f       NG= f7fr(   )	iterr   r   r   nextStopIterationrq   r   rr   )r*   iteratorchunks      r.   __iter___ScopedResponse.__iter__   s{     '$T[[13 NE 2 K  % 	 21
 % 3/123 21sJ   ,BA<A	B	
A9A<	BA96A<8A99A<<
B
Bc                     [        U R                  5          U R                  R                  5         S S S 5        g ! [         a     N[
         a    [        [        5       6    N0f = f! , (       d  f       g = fr(   )r   r   r   closeAttributeErrorrq   r   rr   )r*   s    r.   r   _ScopedResponse.close  s\     -/$$& .- "   /+-./ .-s2   A&;
A#A&A# A&"A##A&&
A4N)
r2   r3   r4   r5   __doc__rz   rW   r   r   r6   r)   r1   r.   rs   rs      s     (I"
/r1   rs   c                    ^^^^^^ [        U 5      m[        X5      mU R                  S5      mU R                  S5      m[        [	        U 5      5      m[        [        [        U 5      5      5      mUUUUUU4S jnU$ )NQUERY_STRINGr]   c                   > [        5          U R                  S0 5      n[        5       (       a+  U R                  S0 5      nT(       a  UR                  ST5        T	US'   TUS'   TUS'   TUS'   TUS'   S S S 5        U $ ! , (       d  f       U $ = f)	NrZ   user
ip_addressurlquery_stringrv   envheaders)r   
setdefaultr	   )
r   r   request_info	user_info	client_ipr   r   rv   r   request_urls
       r.   event_processor3_make_wsgi_event_processor.<locals>.event_processor#  s    (* ++Ir:L&((!,,VR8	((yA"-L+7L(%+L""%L&-L# +  +* s   A&A<<
B)r   rM   rE   dictr   r   r   )	rH   rI   r   r   r   r   rv   r   r   s	      @@@@@@r.   rk   rk     sk     g&I!'?K;;~.L[[)*F
|G$
%Cd<#89:G & r1   )zutf-8replace)Fr(   )8r   	functoolsr   rf   sentry_sdk._werkzeugr   r   sentry_sdk.apir   sentry_sdk.constsr   sentry_sdk.scoper	   $sentry_sdk.integrations._wsgi_commonr
   r   r   sentry_sdk.sessionsr   r   sentry_sdk.tracingr   r   sentry_sdk.utilsr   r   r   r   typingr   r   r   r   r   r   r   r   r   r   sentry_sdk._typesr   r    r!   r"   r#   r%   rd   r?   rM   rO   rp   r   r   rr   rs   rk   r)   r1   r.   <module>r      s    
   7 )   4 
 . 0 =  !(712!"78-(K  &&FG 6
F0 F0\ F,$"&(,)/ )/X(r1   