
    ghf                        S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	r	S SK
Jr  S SKJrJrJr  S SKJr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 J!r!J"r"  S SK#J$r$  \$(       a  S SK#J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,  S SK-J.r.J/r/   S SK0r0S SK0J1r2  S SK3J4r4  S SK5J6r6  S SK7J8r8  S SK9J:r:  S SK;J<r<  S SK=J>r>  S SK?J@r@JArAJBrCJDrD   S SKFJGrG    S SKIrJSrKSrL " S S\5      rMS rN\" \M5      S,S j5       rOS rP\" \M5      S  5       rQS! rRS" rSS# rTS$ rUS% rVS& rW " S' S(5      rXS) rYS* rZS+ r[g! \E a	    \" S5      ef = f! \E a	    S SKHJGrG   Nf = f! \E a    S SKJrJ Nf = f! \E a    SrJ Nf = f)-    N)Set)deepcopy)JSONDecodeError)OP)DidNotEnableIntegration$_DEFAULT_FAILED_REQUEST_STATUS_CODES)DEFAULT_HTTP_METHODS_TO_CAPTUREHttpCodeRangeContainer_is_json_content_typerequest_body_within_bounds)SentryAsgiMiddleware)should_send_default_pii)SOURCE_FOR_STYLETransactionSource)AnnotatedValuecapture_internal_exceptionsensure_integration_enabledevent_from_exceptionparse_versiontransaction_from_function)TYPE_CHECKING)Any	AwaitableCallable	ContainerDictOptionalTupleUnion)EventHttpStatusCodeRange)__version__)	Starlette)
UploadFile)
Middleware)AuthenticationMiddleware)Request)Match)ASGIAppReceiveScopeSendzStarlette is not installed)ExceptionMiddlewarezgeneric Starlette request)endpointurlc                   H    \ rS rSrSrS\ 3rSrS\S\4S jr	\
S 5       rS	rg
)StarletteIntegrationR   	starlettez
auto.http. r0   Tc                 \   U[         ;  a  [        SU< S[         < S35      eXl        X0l        [	        [        [        R                  U5      5      U l        [        U[        5      (       a  UU l        g [        R                  " S[        SS9  Uc  [        U l        g [!        U5      U l        g )Nz%Invalid value for transaction_style: z (must be in )zgPassing a list or None for failed_request_status_codes is deprecated. Please pass a set of int instead.   )
stacklevel)TRANSACTION_STYLE_VALUES
ValueErrortransaction_stylemiddleware_spanstuplemapstrupperhttp_methods_to_capture
isinstancer   failed_request_status_codeswarningswarnDeprecationWarningr	   r   )selfr<   rD   r=   rB   s        d/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/integrations/starlette.py__init__StarletteIntegration.__init__X   s     $<<$&>@  "3 0',S<S-T'U$1377+ , MM4"	 +23W03I/40    c                      [        [        5      n U c  [        SR                  [        5      5      e[	        5         [        5         [        5         U S:  a  [        5         g g )Nz Unparsable Starlette version: {})r      )r   STARLETTE_VERSIONr   formatpatch_middlewarespatch_asgi_apppatch_request_responsepatch_templates)versions    rI   
setup_onceStarletteIntegration.setup_once|   sW       12?299:KL  	 g rL   )rD   rB   r=   r<   N)__name__
__module____qualname____firstlineno__
identifieroriginr<   r	   r
   rJ   staticmethodrV   __static_attributes__ rL   rI   r2   r2   R   sA    J*&F  $H ?"H  rL   r2   c                 d   ^ U R                   mU4S jnTR                  S;  nU(       a  Xl         U $ )Nc                   >^^^#    [         R                  " 5       R                  [        5      nUb  UR                  (       d  T" XTT40 UD6I S h  vN $ U R
                  R                  m[        XU5      u  pgUb#  [         R                  " 5       R                  UUS9  [         R                  " [        R                  T[        R                  S9 nUR                  ST5        UU4S jn	[        TS[!        T5      5      n
U
S:H  nU(       d  U	OTnUU4S jn[        TS[!        T5      5      nUS:H  nU(       d  UOTnT" XUU40 UD6I S h  vN sS S S 5        $  GN
 N! , (       d  f       g = f7f)	Nsourceopnamer]   starlette.middleware_namec            
        >#    [         R                  " [        R                  [	        TS[        T5      5      [        R                  S9 nUR                  ST5        T" U 0 UD6I S h  vN sS S S 5        $  N! , (       d  f       g = f7fNrZ   re   rh   )	
sentry_sdk
start_spanr   MIDDLEWARE_STARLETTE_RECEIVEgetattrr@   r2   r]   set_tag)argskwargsspanmiddleware_namereceives      rI   _sentry_receiveO_enable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_receive   ss     **66 .#g,G/66 LL!<oN!($!9&!99  : 0   AB	
A8(A6)A8,
B	6A88
BB	rX   ru   c            
        >#    [         R                  " [        R                  [	        TS[        T5      5      [        R                  S9 nUR                  ST5        T" U 0 UD6I S h  vN sS S S 5        $  N! , (       d  f       g = f7frj   )	rk   rl   r   MIDDLEWARE_STARLETTE_SENDrn   r@   r2   r]   ro   )rp   rq   rr   rs   sends      rI   _sentry_sendL_enable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_send   ss     **33 ~s4yA/66 LL!<oN!%t!6v!66  7 rw   r{   )rk   
get_clientget_integrationr2   r=   	__class__rX    _get_transaction_from_middlewareget_current_scopeset_transaction_namerl   r   MIDDLEWARE_STARLETTEr]   ro   rn   r@   )appscopert   rz   rq   integrationrg   rd   middleware_spanru   receive_namereceive_patchednew_receiver{   	send_namesend_patchednew_sendrs   old_calls     ``             @rI   _create_span_call6_enable_span_for_middleware.<locals>._create_span_call   sX     ++-==>RSk&B&B!#gtFvFFF--00 8KP((*?? @ 
 ""&& '..
 ##$?Q: #7JGEL*.??O1@/gK7  j#d)<I$6L+7|TH!#k8NvNNK
 
 Gb OK
 
s>   AE1EB E1A;E EE E1E  
E.*E1)r   %_sentry_authenticationmiddleware_call _sentry_exceptionmiddleware_call)__call__rX   )middleware_classr   not_yet_patchedr   s      @rI   _enable_span_for_middlewarer      s=    ((H5On '' 0 O $5!rL   c                     [        U [        R                  " 5       R                  [        R
                  US.S9u  p#[        R                  " X#S9  g )N)typehandled)client_options	mechanism)hint)r   rk   r}   optionsr2   r\   capture_event)	exceptionr   eventr   s       rI   _capture_exceptionr      sC     '!,,.66/::wOKE U.rL   c                    ^^ U R                   mS[        T5      ;  nU(       a%  U4S jnX l         U R                  mU4S jnX0l        gg)zL
Capture all exceptions in Starlette app and
also extract user information.
_sentry_middleware_initc                    >^ T" U /UQ70 UD6  U R                   R                  5       mU4S jnU R                   R                  5        H  nX0R                   U'   M     g )Nc                   >#    [         R                  " 5       R                  [        5      nUS   nUb^  [	        US5      =(       a:    [        UR                  [        5      =(       a    UR                  UR                  ;   nU(       a
  [        USS9  S n[        U5      R                   H  nUT;   d  M  TU   n  O   Uc  g [        U5      (       a  U" U /UQ70 UD6I S h  vN $ U" U /UQ70 UD6$  N7f)Nr   status_codeT)r   )rk   r}   r~   r2   hasattrrC   r   intrD   r   r   __mro___is_async_callable)	rH   rp   rq   r   expis_http_server_errorold_handlerclsold_handlerss	           rI   !_sentry_patched_exception_handlerfpatch_exception_middleware.<locals>._sentry_middleware_init.<locals>._sentry_patched_exception_handler   s     (335EE( 1g*]3 W&s<WOO{/V/VV )
 ,*3= #9,,Cl*&23&7 -
 &%k22!,T!CD!CF!CCC&t=d=f== Ds   B-C34,C3 C1!C3)_exception_handlerscopykeys)rH   rp   rq   r   keyr   old_middleware_inits        @rI   r   ;patch_exception_middleware.<locals>._sentry_middleware_init   sZ    6t6v6  3388:L>@ //4460Q((- 7rL   c                 J   >#    [        U5        T" XX#5      I S h  vN   g  N7fN_add_user_to_sentry_scoperH   r   rt   rz   r   s       rI   r   Dpatch_exception_middleware.<locals>._sentry_exceptionmiddleware_call  s       &e,4666s   #!#N)rJ   r@   r   )r   r   r   r   r   r   s       @@rI   patch_exception_middlewarer      sR     +33/s;N7OOO(	RT %<!#,,	7  %E!A rL   c                    SU ;  a  g[        5       (       d  g0 nU S   n[        USS5      nU(       a  UR                  SUR                  5        [        USS5      nU(       a  UR                  SUR                  5        [        USS5      nU(       a  UR                  SUR
                  5        [        R                  " 5       nXl        g)zN
Extracts user information from the ASGI scope and
adds it to Sentry's scope.
userNusernameidemail)	r   rn   
setdefaultr   r   r   rk   get_isolation_scoper   )r   	user_infostarlette_userr   user_idr   sentry_scopes          rI   r   r   .  s     U"$$I6]N~z48HZ)@)@AndD1GT>#4#45NGT2EWn&:&:;113L!rL   c                 b   ^ U R                   mS[        T5      ;  nU(       a  U4S jnX l         gg)z'
Add user information to Sentry scope.
r   c                 J   >#    T" XX#5      I S h  vN   [        U5        g  N7fr   r   r   s       rI   r   Npatch_authentication_middleware.<locals>._sentry_authenticationmiddleware_callY  s#     4666%e, 7s   #!#N)r   r@   )r   r   r   r   s      @rI   patch_authentication_middlewarer   N  s4    
  ((H=S]RO	-
 %J! rL   c                  t   ^ [         R                  mS[        T5      ;  n U (       a  U4S jnU[         l        gg)zU
Patches Starlettes `Middleware` class to record
spans for every middleware invoked.
r   c                    > U[         :X  a  T" X/UQ70 UD6$ [        U5      nT" X/UQ70 UD6  U[        :X  a  [        U5        U[        :X  a  [        U5        g g r   )r   r   r'   r   r.   r   )rH   r   rp   rq   span_enabled_clsr   s        rI   r   2patch_middlewares.<locals>._sentry_middleware_initm  se    ***4FtFvFF:3?HHH../4))*3/ *rL   N)r&   rJ   r@   )r   r   r   s     @rI   rQ   rQ   a  s8     %--/s;N7OOO	0 6
! rL   c                  H   ^ [         R                  mU4S jn U [         l        g)z?
Instrument Starlette ASGI app using the SentryAsgiMiddleware.
c           	      R  >^ #    [         R                  " 5       R                  [        5      nUc  T" T XU5      I S h  vN $ [	        UU 4S j[        R
                  UR                  [        R                  U(       a  UR                  O[        SS9nU" XU5      I S h  vN $  Ne N7f)Nc                     > T" T/U Q70 UD6$ r   r`   )akwold_apprH   s     rI   <lambda>Bpatch_asgi_app.<locals>._sentry_patched_asgi_app.<locals>.<lambda>  s    WT4A44rL      )mechanism_typer<   span_originrB   asgi_version)
rk   r}   r~   r2   r   r\   r<   r]   rB   r
   )rH   r   rt   rz   r   
middlewarer   s   `     rI   _sentry_patched_asgi_app0patch_asgi_app.<locals>._sentry_patched_asgi_app  s      ++-==>RS ut<<<)4/::);;,33  334

  555 = 6s"   9B'B#A B'B%B'%B'N)r$   r   )r   r   s    @rI   rR   rR   ~  s    
   G6* 2IrL   c                 8   [        U [        R                  5      (       a-  U R                  n [        U [        R                  5      (       a  M-  [        R
                  " U 5      =(       d2    [        U 5      =(       a     [        R
                  " U R                  5      $ r   )rC   	functoolspartialfuncasyncioiscoroutinefunctioncallabler   )objs    rI   r   r     sh    
S)++
,
,hh S)++
,
, &&s+ C'55cllCrL   c                  p   ^ [         R                  R                  mU4S jn U [         R                  l        g )Nc                    >^ U m[        T5      nU(       a	  U4S jnUn O![        R                  " T5      U4S j5       nUn T" U 5      $ )Nc                    >^#    [         R                  " 5       R                  [        5      nUc  T" U 0 UD6I S h  vN $ U S   n[	        [         R
                  " 5       UR                  U5        [         R                  " 5       n[        U5      nUR                  5       I S h  vN mU4S jn[        R                  Ul        UR                  U" X25      5        T" U 0 UD6I S h  vN $  N NH N7f)Nr   c                    > U4S jnU$ )Nc                    > U R                  S0 5      nT(       a  ST;   a  TS   US'   ST;   a  TS   US'   [        U5      U S'   U $ )Nrequestcookiesdatagetr   )r   r   request_infoinfos      rI   event_processorڔpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_func.<locals>._make_request_event_processor.<locals>.event_processor  sW     (-yyB'?(D0:>y/Y 7%~7;F|V 4+3L+Ai($rL   r`   )reqr   r   r   s      rI   _make_request_event_processor{patch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_func.<locals>._make_request_event_processor  s    % +*rL   )rk   r}   r~   r2    _set_transaction_name_and_sourcer   r<   r   StarletteRequestExtractorextract_request_infor\   _nameadd_event_processor)	rp   rq   r   r   r   	extractorr   r   old_funcs	          @rI   _sentry_async_funcTpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_func  s     (335EE( &!)4!:6!:::q'000211  *==?5g>	&;;==+$ &:%D%D"001'G &t6v666K ; >2 7s5   7C/C)A&C/"C+#AC/$C-%C/+C/-C/c                  <  >^ [         R                  " 5       R                  [        5      nUc  T	" U 0 UD6$ [         R                  " 5       nUR
                  b  UR
                  R                  5         [         R                  " 5       nUR                  b  UR                  R                  5         U S   n[        XBR                  U5        [        U5      nUR                  5       mU4S jn[        R                  Ul        UR!                  U" XR5      5        T	" U 0 UD6$ )Nr   c                    > U4S jnU$ )Nc                 `   > U R                  S0 5      nT(       a  TUS'   [        U5      U S'   U $ )Nr   r   r   )r   r   r   r   s      rI   r   ړpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func.<locals>._make_request_event_processor.<locals>.event_processor  s6     (-yyB'?"6=L3+3L+Ai($rL   r`   )r   r   r   r   s      rI   r   zpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func.<locals>._make_request_event_processor  s    
% +*rL   )rk   r}   r~   r2   r   transactionupdate_active_threadr   profileupdate_active_thread_idr   r<   r   extract_cookies_from_requestr\   r   r   )
rp   rq   r   current_scoper   r   r   r   r   r   s
           @rI   _sentry_sync_funcSpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func  s    )335EE( &#T4V44 * < < > ,,8!--BBD)==?''3 ((@@Bq'0 "?"? 6g>	#@@B+  &:%D%D"001'G  000rL   )r   r   wraps)r   is_coroutiner  r  r   old_request_responses       @rI   _sentry_request_response8patch_request_response.<locals>._sentry_request_response  sR    )(3+7Z &D __X&.1 '.1` %D#D))rL   )r4   routingrequest_response)r  r  s    @rI   rS   rS     s-    $,,==k*Z *BI&rL   c                     ^^  SSK Jm  SSKJn   U R
                  mS[        T5      ;  nU(       a  UU4S jnX l        g g ! [         a     g f = f)Nr   )Markup)Jinja2Templates_sentry_jinja2templates_initc                    > U4S jnUR                  S/ 5        X2S   ;  a  US   R                  U5        T" U /UQ70 UD6$ )Nc                 ^   > T" [         R                  " 5       R                  5       5      nSU0$ )Nsentry_trace_meta)rk   r   trace_propagation_meta)r   
trace_metar  s     rI   add_sentry_trace_metaTpatch_templates.<locals>._sentry_jinja2templates_init.<locals>.add_sentry_trace_meta4  s3    #002IIK
 ( rL   context_processors)r   append)rH   rp   rq   r   r  old_jinja2templates_inits       rI   r  5patch_templates.<locals>._sentry_jinja2templates_init2  sQ     2B7$3G,HH+,334IJ+DB4B6BBrL   )
markupsafer  ImportErrorstarlette.templatingr  rJ   r@   )r  r   r  r  r$  s      @@rI   rT   rT     s]    % 5.774C = O 	C$ $@ )   s   A   
AAc                   L    \ 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)r   iG  zu
Extracts useful information from the Starlette request
(like form data or cookies) and adds it to the Sentry event.
Nc                     Xl         g r   r   )rH   r   s     rI   rJ   "StarletteRequestExtractor.__init__O  s    rL   c                 H    S n[        5       (       a  U R                  5       nU$ r   )r   r   )rH   r   s     rI   r  6StarletteRequestExtractor.extract_cookies_from_requestS  s     "$$llnGrL   c                   #    [         R                  " 5       n0 n[        5          [        5       (       a  U R	                  5       US'   U R                  5       I S h  vN nU(       d  UsS S S 5        $ U(       a3  [        X5      (       d#  [        R                  " 5       US'   UsS S S 5        $ U R                  5       I S h  vN nU(       a  XBS'   UsS S S 5        $ U R                  5       I S h  vN nU(       aZ  0 nUR                  5        H5  u  px[        U[        5      n	U	(       d  UO[        R                  " 5       Xg'   M7     XbS'   UsS S S 5        $ [        R                  " 5       US'   UsS S S 5        $  GN N N! , (       d  f       g = f7f)Nr   r   )rk   r}   r   r   r   content_lengthr   r   removed_because_over_size_limitjsonformitemsrC   r%   removed_because_raw_data)
rH   clientr   r0  r2  r3  	form_datar   valis_files
             rI   r   .StarletteRequestExtractor.extract_request_info[  sU    &&((*&((*.,,.Y' $(#6#6#88N!# +* &@' ' (6'U'U'WV$# +*$ $D'+V$#+ +*0 $D	 $

HC(j9G  ' +DDF N !- (1V$#I +*N $2#J#J#LL Q +* 9 % %1 +*s   "F6E<E5E<'
F10E<!
F+E<>E8?E<
FE<,E:-AE<
FE<+
F5E<8E<:E<<
F
Fc                    #    SU R                   R                  ;   a"  [        U R                   R                  S   5      $ g 7f)Nzcontent-length)r   headersr   rH   s    rI   r0  (StarletteRequestExtractor.content_length  s5     t||333t||++,<=>>s   >A c                 .    U R                   R                  $ r   )r   r   r=  s    rI   r   !StarletteRequestExtractor.cookies  s    ||###rL   c                    #    [         c  g U R                  R                  5       I S h  vN   U R                  R                  5       I S h  vN $  N& N7fr   )	multipartr   bodyr3  r=  s    rI   r3  StarletteRequestExtractor.form  sD      ll!!!\\&&((( 	"(s!   &AA!A
AAAc                 ^    [        U R                  R                  R                  S5      5      $ )Nzcontent-type)r   r   r<  r   r=  s    rI   is_json!StarletteRequestExtractor.is_json  s"    $T\\%9%9%=%=n%MNNrL   c                    #    U R                  5       (       d  g  U R                  R                  5       I S h  vN $  N! [         a     g f = f7fr   )rF  r   r2  r   r=  s    rI   r2  StarletteRequestExtractor.json  sB     ||~~	**,,,, 		s1   A> <> A> 
AA
AAr+  )rX   rY   rZ   r[   __doc__r   rJ   r  r   r0  r   r3  rF  r2  r_   r`   rL   rI   r   r   G  s8    
 G. `$)OrL   r   c                    U R                  S5      nU(       d  g UR                   H:  nUR                  U 5      nUS   [        R                  :X  d  M-   UR
                  s  $    g ! [         a    U R                  S5      s s  $ f = f)Nrouterr   path)r   routesmatchesr)   FULLrM  AttributeError)r   rL  routematchs       rI   _transaction_name_from_routerrT    sv    YYx Fe$8uzz!)zz!	  	 " )yy(()s   A%%BBc                    S n[         U   nUS:X  a7  UR                  R                  S5      nU(       a  [        U5      =(       d    S nOUS:X  a  [	        UR                  5      nUc  [
        n[        R                  nU R                  X4S9  g )Nr/   r0   rc   )	r   r   r   r   rT  _DEFAULT_TRANSACTION_NAMEr   ROUTEr   )r   r<   r   rg   rd   r/   s         rI   r   r     s}    D/0FJ&==$$Z0,X6>$D	e	#,W]];|("((	t3rL   c                     S nS nUR                   S:X  a(  [        U R                  5      n[        R                  nX44$ UR                   S:X  a  [        U5      n[        R                  nX44$ )Nr/   r0   )r<   r   r   r   	COMPONENTrT  rW  )r   
asgi_scoper   rg   rd   s        rI   r   r     sj    DF$$
2(7",,
 <	 
	&	&%	/,Z8"((<rL   )F)\r   r   rE   collections.abcr   r   r   r2  r   rk   sentry_sdk.constsr   sentry_sdk.integrationsr   r   r	   $sentry_sdk.integrations._wsgi_commonr
   r   r   r   sentry_sdk.integrations.asgir   sentry_sdk.scoper   sentry_sdk.tracingr   r   sentry_sdk.utilsr   r   r   r   r   r   typingr   r   r   r   r   r   r   r   r    sentry_sdk._typesr!   r"   r4   r#   rO   starlette.applicationsr$   starlette.datastructuresr%   starlette.middlewarer&   #starlette.middleware.authenticationr'   starlette.requestsr(   starlette.routingr)   starlette.typesr*   r+   r,   StarletteScoper-   r'  starlette.middleware.exceptionsr.   starlette.exceptionspython_multipartrB  rV  r:   r2   r   r   r   r   r   rQ   rR   r   rS   rT   r   rT  r   r   r`   rL   rI   <module>rp     s             
  > 4  !XXX<5:03/ +'OO9C
	, 8 . 9; 9xDN 01/ 2/JEZ 01" 2">J&6:2BqBh'@Tg gT$4(A  5
3
445  989    IsH   :D- D? E -D<?EE
EE! EE! !E,+E,