diff --git a/apps/backend/hub_backend/settings_platform.py b/apps/backend/hub_backend/settings_platform.py index 4d2087d..bb5f3bb 100644 --- a/apps/backend/hub_backend/settings_platform.py +++ b/apps/backend/hub_backend/settings_platform.py @@ -24,6 +24,12 @@ if "backend-platform" not in ALLOWED_HOSTS: CSRF_TRUSTED_ORIGINS = env_list("CUSTOCRM_PLATFORM_CSRF_TRUSTED_ORIGINS", []) CORS_ALLOWED_ORIGINS = [] +# Caddy спрашивает разрешение на on-demand сертификат Help Center по plain HTTP +# из внутренней сети: заголовок X-Forwarded-Proto он не шлёт и по редиректам не +# ходит. Без исключения SECURE_SSL_REDIRECT отвечает 301, Caddy считает домен +# неавторизованным и сертификат портала не выпускается. +SECURE_REDIRECT_EXEMPT = [r"^api/v1/gateway/"] + SESSION_COOKIE_NAME = os.environ.get( "CUSTOCRM_PLATFORM_SESSION_COOKIE_NAME", "__Host-custocrm-platform-session" diff --git a/apps/backend/hub_backend/test_surfaces.py b/apps/backend/hub_backend/test_surfaces.py index 45d68de..ce49394 100644 --- a/apps/backend/hub_backend/test_surfaces.py +++ b/apps/backend/hub_backend/test_surfaces.py @@ -1,3 +1,4 @@ +import re from importlib import import_module from django.test import SimpleTestCase, override_settings @@ -41,3 +42,15 @@ class RuntimeSurfaceSettingsTests(SimpleTestCase): admin_settings = import_module("hub_backend.settings_admin") self.assertEqual(admin_settings.ALLOWED_HOSTS, ["127.0.0.1", "localhost"]) + + def test_gateway_ask_endpoint_is_exempt_from_ssl_redirect(self) -> None: + # Caddy ходит на этот путь по plain HTTP и редирект считает отказом: + # 301 здесь означает, что Help Center остаётся без сертификата. + platform_settings = import_module("hub_backend.settings_platform") + + self.assertTrue( + any( + re.search(pattern, "api/v1/gateway/help-domain/") + for pattern in platform_settings.SECURE_REDIRECT_EXEMPT + ) + )