mirror of
https://github.com/bugsink/bugsink.git
synced 2026-01-03 20:00:07 -06:00
79 lines
2.4 KiB
Python
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 []
|