🚑 fix(platform): не редиректить ask-эндпоинт Caddy на https

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 <noreply@anthropic.com>
This commit is contained in:
AndreyandClaude Opus 5 committed 2026-08-01 20:02:29 +03:00
1 parent c090f5904b
commit 9cc92be044
2 files changed
+19

No files matched your search

@@ -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"
+13
View File
@@ -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
)
)