privaterelay/debug.py (25 lines of code) (raw):
import re
from django.http.request import HttpRequest
from django.views.debug import SafeExceptionReporterFilter
class RelaySaferExceptionReporterFilter(SafeExceptionReporterFilter):
"""
Hide all settings EXCEPT ones explicitly allowed by SAFE_PREFIXES or SAFE_NAMES.
"""
# By default, Django disables the filter if DEBUG=True.
# Django correctly assumes "If DEBUG is True then your site is not safe anyway."
# (https://github.com/django/django/blob/1520d18/django/views/debug.py#L175)
# But, we sometimes temporarily set DEBUG=True in our dev environment to help debug.
# And even in that case, we want as much additional safety as we can get.
def is_active(self, request: HttpRequest | None) -> bool:
return True
# Allow variable values that start with these prefixes
SAFE_PREFIXES: list = []
# Allow variable values named in this list
SAFE_NAMES = [
"BUNDLE_PLAN_ID_US",
"BUNDLE_PROD_ID",
"RELAY_CHANNEL",
"RELAY_CHANNEL_NAME",
"RELAY_FROM_ADDRESS",
"SUBPLAT3_BUNDLE_PRODUCT_KEY",
"SUBPLAT3_PHONES_PRODUCT_KEY",
"SUBPLAT3_PREMIUM_PRODUCT_KEY",
]
# Match everything EXCEPT safe names and safe prefixes
hidden_settings = re.compile(
r"^(?!("
+ "|".join(f"{re.escape(name)}" for name in SAFE_NAMES)
+ "|"
+ "|".join(f"{re.escape(prefix)}.*" for prefix in SAFE_PREFIXES)
+ r")$).+",
re.IGNORECASE,
)