From 9cc92be044095b9613577a3850c4e0cd4f6c8676 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sat, 1 Aug 2026 20:02:12 +0300 Subject: [PATCH] =?UTF-8?q?:ambulance:=20fix(platform):=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B8=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20ask-=D1=8D=D0=BD=D0=B4=D0=BF=D0=BE=D0=B8=D0=BD=D1=82?= =?UTF-8?q?=20Caddy=20=D0=BD=D0=B0=20https?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Caddy спрашивает разрешение на on-demand сертификат Help Center по plain HTTP из внутренней сети, X-Forwarded-Proto не шлёт и по редиректам не ходит. SECURE_SSL_REDIRECT отвечал 301, Caddy считал домен неавторизованным и сертификат портала не выпускался: браузер получал ERR_SSL_PROTOCOL_ERROR на foxray.help.custocrm.ru. Исключаем /api/v1/gateway/ из SSL-редиректа на platform-сёрфейсе. Проверено на стенде: ask отдаёт 204 для опубликованного портала и 404 для постороннего домена, сертификат выпущен. Co-Authored-By: Claude Opus 5 --- apps/backend/hub_backend/settings_platform.py | 6 ++++++ apps/backend/hub_backend/test_surfaces.py | 13 +++++++++++++ 2 files changed, 19 insertions(+) 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 + ) + )