bgm%ddlZddlmZmZddlmZddlmZddlm Z m Z ddl m Z ddl mZddlmZmZdd lmZmZmZdd lmZmZdd lmZdd lmZerkdd lmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%ddlm&Z&ddlm'Z'e$dZ(e$dZ)e$dZ*Gdde%Z+edZ,erd,dZ-nd,d Z-d-d"Z.Gd#d$e/Z0 d.d%Z1d&Z2d'Z3d(Z4Gd)d*e/Z5d+Z6dS)/N)PY2reraise)partial) TYPE_CHECKING)get_host _get_headers)continue_trace)OP)Hub_should_send_default_pii) ContextVarcapture_internal_exceptionsevent_from_exception) TransactionTRANSACTION_SOURCE_ROUTE)auto_session_tracking)_filter_headers)Callable)Dict)Iterator)Any)Tuple)Optional)TypeVar)Protocol)ExcInfo)EventProcessorWsgiResponseIterWsgiResponseHeaders WsgiExcInfoceZdZddZdS) StartResponseNcdSN)selfstatusresponse_headersexc_infos S/opt/cloudlinux/venv/lib64/python3.11/site-packages/sentry_sdk/integrations/wsgi.py__call__zStartResponse.__call__%s Dr$)__name__ __module__ __qualname__r+r%r,r*r"r"$s(      r,r"sentry_wsgi_middleware_appliedutf-8replacec.|||Sr$)decodescharseterrorss r*wsgi_decoding_dancer9/sxx(((r,cT|d||S)Nlatin1)encoder4r5s r*r9r95s$xx!!((&999r,Fc |ddt||dt|dpddS)zPReturn the absolute URL without query string for the given WSGI environment.zwsgi.url_schemez:/// PATH_INFO)getrr9lstrip)environuse_x_forwarded_fors r*get_request_urlrE:se  %&&&&-....GKK 44:;;BB3GGG r,c eZdZdZddZdZdS)SentryWsgiMiddlewareapprDFc"||_||_dSr$rH)r&rIrDs r*__init__zSentryWsgiMiddleware.__init__Hs#6   r,c Xtdr|||Std t tj}t |d5|5t5|5}| d|_ | t||j dddn #1swxYwYdddn #1swxYwYt|tjdt"}||d|i 5 ||t't(||}n&#t*$rt-t/|YnwxYwdddn #1swxYwYdddn #1swxYwYdddn #1swxYwYtdn#tdwxYwt1||S) NFTrequest) session_modewsgizgeneric WSGI request)opnamesource wsgi_environ)custom_sampling_context)_wsgi_middleware_appliedrArIsetr currentrrconfigure_scopeclear_breadcrumbs_nameadd_event_processor_make_wsgi_event_processorrDr r HTTP_SERVERrstart_transactionr_sentry_start_response BaseExceptionr_capture_exception_ScopedResponse)r&rCstart_responsehubscope transactionrvs r*r+zSentryWsgiMiddleware.__call__Mso # ' ' . . 588G^44 4 $$T***" 0ck""C&sCCC > >>>466 0022e!33555*0EK!55 :$+T-E!"!"#1>37 ###K..#ng=V/ > >>!% ' '$:NK!"!"""BB ->>>#%7%<%<====> > > > > > > > > > > > > > > >%>>>>>>>>>>>>>>> > > > > > > > > > > > > > > >@ % ( ( / / / / $ ( ( / / / /sB'''s *G=6G9GDAC- ! D-C1 1D4C1 5D8 GD G D >G F) *E76F)7 F F)F F) G)F- -G0F- 1G4 GG GG G G=GG=GG==HNF)r-r.r/ __slots__rKr+r%r,r*rGrGEs<.I7777 *(*(*(*(*(r,rGct5t|ddd}||dddn #1swxYwY| |||S||||S)N r)rintsplitset_http_status)old_start_responserfr'r(r) status_ints r*r_r_zs % & &00c1--a011 ##J///000000000000000"!&*:;;;!!&*:HEEEs?AA!Ac#dKddg}tr|dgz }|D]}||vr |||fVdS)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_ADDRN)r )rCkeyskeys r* _get_environrxsf = )D!!  $$ '>>ws|# # # #$$r,c |dddS#ttf$rYnwxYw |dS#t$rYnwxYw|dS)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,rHTTP_X_REAL_IPru)rnstripKeyError IndexErrorrA)rCs r* get_client_iprs -.44S99!<BBDDD j !      '((       ;;} % %%s!25A A  A A"!A"ctj}|ja|d}t|to|jdv}|s9t ||jjddd\}}||||S)Nrl)rNrOF)typehandled)client_options mechanism)hint) sysr)client isinstance SystemExitcoderoptions capture_event)rdr)eshould_skip_captureeventrs r*raras|~~H z QK)J77OAFi.event_processors ( * * . . ++Ir::L')) B!,,VR88 B((yAAA"-L +7L (%+L ""%L &-L # . . . . . . . . . . . . . . . sA,BB B )rrErAdictrxrr) rCrDrrrrrrrs @@@@@@r*r\r\sg&&I!'+>??K;;~..L [[) * *F |G$$ % %Cd<#8#899::G& r,)r1r2rhr$)7rsentry_sdk._compatrrsentry_sdk._functoolsrsentry_sdk._typesrsentry_sdk._werkzeugrrsentry_sdk.apir sentry_sdk.constsr sentry_sdk.hubr r sentry_sdk.utilsr rrsentry_sdk.tracingrrsentry_sdk.sessionsr$sentry_sdk.integrations._wsgi_commonrtypingrrrrrrrrrrrrr r"rUr9rEobjectrGr_rxrrarbr\r%r,r*rs= ++++++++))))))++++++77777777)))))) 88888888 EDDDDDDD555555@@@@@@((((((000000w122!'"788'-((K &:&FGG :))))) :::: 2(2(2(2(2(62(2(2(t FFFF*$$$"&&&(*88888f888D(((((r,