Files
bugsink/bsmain/__init__.py
2025-07-25 16:52:09 +02:00

79 lines
2.4 KiB
Python

import os
import urllib.parse
from django.core.checks import Warning, register
from django.conf import settings
from bugsink.app_settings import get_settings
from events.storage_registry import get_write_storage
@register("bsmain")
def check_no_nested_settings_in_unnested_form(app_configs, **kwargs):
errors = []
for key in get_settings().keys():
if hasattr(settings, key):
errors.append(Warning(
f"The setting {key} is defined at the top level of your configuration. It must be nested under the "
f"'BUGSINK' setting.",
id="bsmain.W001",
))
return errors
@register("bsmain")
def check_event_storage_properly_configured(app_configs, **kwargs):
errors = []
try:
# rather than doing an explicit check, we just run the `get_write_storage` code and see if it throws an error
# get_write_storage() touches the whole storage system, so if it fails, we know something is wrong
get_write_storage()
except ValueError as e:
errors.append(Warning(
str(e),
id="bsmain.W002",
))
return errors
@register("bsmain")
def check_base_url_is_url(app_configs, **kwargs):
try:
parts = urllib.parse.urlsplit(str(get_settings().BASE_URL))
except ValueError as e:
return [Warning(
str(e),
id="bsmain.W003",
)]
if parts.scheme not in ["http", "https"]:
return [Warning(
"The BASE_URL setting must be a valid URL (starting with http or https).",
id="bsmain.W003",
)]
if not parts.hostname:
return [Warning(
"The BASE_URL setting must be a valid URL. The hostname must be set.",
id="bsmain.W003",
)]
return []
@register("bsmain")
def check_proxy_env_vars_consistency(app_configs, **kwargs):
# in this check we straight-up check the os.environ: we can't rely on settings.BEHIND_HTTPS_PROXY to have been set
# since it's Docker-only.
if (
os.getenv("BEHIND_HTTPS_PROXY", "False").lower() in ("true", "1", "yes") and
os.getenv("BEHIND_PLAIN_HTTP_PROXY", "False").lower() in ("true", "1", "yes")
):
return [Warning(
"BEHIND_HTTPS_PROXY and BEHIND_PLAIN_HTTP_PROXY are mutually exclusive.",
id="bsmain.W004",
)]
return []