U 췀g@s|ddlZddlZddlZddlZddlZddlZddlZddlZddl m Z m Z ddl m Z e rddl mZddl mZddl mZddl mZddl mZdd lmZmZmZdd lmZed Zd Zd ZGdddZzxddlmZddl m!Z!m"Z"m#Z#ddl$m%Z%dZ&dZ'dZ(dZ)dZ*e+dde e,e*-e*.DZ/GdddeZ0Wne1k rndZ%YnXddZ2dS)N)chainproduct) TYPE_CHECKING)Any)Callable)Dict)Optional)Self)logger env_to_boolcapture_internal_exceptions)Envelope spotlightzhttp://localhost:8969/streamz(sentry_sdk.spotlight.SpotlightMiddlewarec@seZdZddZddZdS)SpotlightClientcCs||_t|_d|_dS)Nr)urlurllib3 PoolManagerhttptries)selfrrB/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/spotlight.py__init__%s zSpotlightClient.__init__c Csrt}||z*|jj|j|dddid}|Wn0tk rl}zt t |W5d}~XYnXdS)NPOST Content-Typezapplication/x-sentry-envelope)rbodymethodheaders) ioBytesIOZserialize_intorrequestrgetvalueclose Exception sentry_loggerwarningstr)renveloperreqerrrcapture_envelope+s  z SpotlightClient.capture_envelopeN)__name__ __module__ __qualname__rr*rrrrr$sr)MiddlewareMixin)HttpResponseServerError HttpResponse HttpRequest)settingsz/assets/main.jsz4z zcharset=rccs|]}dd|VqdS)zN)formatjoin).0charsrrr Msr8cs<eZdZdZfddZeddZddZdd ZZ S) SpotlightMiddlewareNcsTt|ddl}|j|_|jj}|dkr>tddSt j |j d|_ dS)NrzPCannot find Spotlight client from SpotlightMiddleware, disabling the middleware.z../)superrZsentry_sdk.apiapi sentry_sdkZ get_clientrr$r%urllibparseurljoinr_spotlight_url)rZ get_responser<Zspotlight_client __class__rrrUs  zSpotlightMiddleware.__init__c Cs|jdkr~zr?r@SPOTLIGHT_JS_ENTRY_PATHr RequesturlopenSPOTLIGHT_JS_SNIPPET_PATTERNr4errorURLErrorr$debug)rZspotlight_js_urlr(errrrrspotlight_scriptfs*   z$SpotlightMiddleware.spotlight_scriptcstddjdddD}|d}t|dkr^|dtr^|dttdnd|jdk rj s|d krtj }|j }t d dfd dt DD|}j d||j |d_ d r|t|jd <S) Ncss|]}|VqdSN)strip)r6prrrr8sz7SpotlightMiddleware.process_response..rr3;rutf-8z text/htmlcss|]}|dkr|VqdS)Nr)r6idxrrrr8sc3s |]}j|VqdSrO)contentrfindencode)r6Z body_variantencodingresponserrr8szContent-Length)tuplergetlowersplitlen startswithCHARSET_PREFIXrNZ streamingrWrYnextBODY_CLOSE_TAG_POSSIBILITIES has_header)r_requestr\Zcontent_type_header content_typecontent_lengthZ injectionZinjection_siterrZrprocess_responsesD      z$SpotlightMiddleware.process_responsecCsntjs dSztj|jd}Wntjj k r@YdSX|j |}t | dtj|j|dSdS)NrTz)Z spotlight_urlevent_id)r2DEBUGr=r rHr@readdecoderJrKr<Zcapture_exceptionr/replaceSPOTLIGHT_ERROR_PAGE_SNIPPETr4)rrg exceptionrrkrrrprocess_exceptions" z%SpotlightMiddleware.process_exception) r+r,r-rErpropertyrNrjrr __classcell__rrrArr9Rs   -r9c Csttj}|tdt|ttj | d}|dkrHt }t |t sVdStdk rtjrttj ddrttj ddrt4tj}t|krt|t|tft_tdW5QRXt|}td||S) Nz' [spotlight] %(levelname)s: %(message)srTZSENTRY_SPOTLIGHT_ON_ERROR1ZSENTRY_SPOTLIGHT_MIDDLEWAREz(Enabled Spotlight integration for Djangoz%Enabled Spotlight using sidecar at %s)logging StreamHandlersysstderr setFormatter Formatterr addHandlersetLevelINFOr^DEFAULT_SPOTLIGHT_URL isinstancer&r2rlr osenvironr Z MIDDLEWARE DJANGO_SPOTLIGHT_MIDDLEWARE_PATHtyperinfor)optionsZ_handlerrZ middlewareclientrrrsetup_spotlights6       r)3rrvr urllib.parser=urllib.request urllib.errorrrx itertoolsrrtypingrrrrrr Zsentry_sdk.utilsr r$r r Zsentry_sdk.enveloper getLoggerrrrZdjango.utils.deprecationr.Z django.httpr/r0r1Z django.confr2rFrIrprcZ BODY_TAG_NAMEr]zipupperr_rer9 ImportErrorrrrrrsN          p