From 8a19df7d2325a639063679ca182115b8e11b02bb Mon Sep 17 00:00:00 2001 From: EugeneTes Date: Fri, 16 Oct 2026 07:41:22 +0000 Subject: [PATCH] =?UTF-8?q?CRM=20=D0=BD=D0=B0=20shotam.tvorymo.com:=20env?= =?UTF-8?q?=20CRM=5FORIGINS,=20frame-ancestors=20=D0=B8=20=D1=81=D1=82?= =?UTF-8?q?=D0=B8=D0=BB=D0=B8=20CRM=20=D0=BE=D1=82=20=D0=BA=D0=BE=D1=80?= =?UTF-8?q?=D0=BD=D1=8F=20(/css/...)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CLAUDE.md | 2 +- README.md | 4 ++-- backend/Wiki.Api/Program.cs | 4 ++-- backend/Wiki.Api/appsettings.json | 4 ++-- docker-compose.yml | 6 +++--- frontend/index.html | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 403b7f6..f072c50 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,7 +12,7 @@ - **Постоянный том обязателен:** файл SQLite и картинки должны лежать на named volume в Coolify, иначе пропадут при пересборке. - .NET SDK есть локально (`dotnet --list-sdks`: 8, 9, 10). Сборка для продакшена выполняется в Dockerfile. - Домен: `https://wiki-crm.tes.gd` (HTTPS, домены *.tes.gd на этом Coolify работают). -- CRM: `https://test.units.tvorymo.com`. Supabase: `https://yjxbkcqsquwbsyoonfkn.supabase.co`. +- CRM: `https://shotam.tvorymo.com` (с 2026-10-16; стили от корня: `/css/crm.css`, `/css/tvorymo-ui.css`, `/js/pagebridge.js`; `test.units.tvorymo.com` отдаёт 403). Supabase: `https://yjxbkcqsquwbsyoonfkn.supabase.co`. ## Деплой (сделан 2026-10-13) diff --git a/README.md b/README.md index 6ca5ba4..7a75534 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ curl -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \ ## Заголовки -`Content-Security-Policy: frame-ancestors https://test.units.tvorymo.com https://units.tvorymo.com; …` (без `X-Frame-Options`). Список origin CRM задаётся `Crm__Origins` (через пробел или запятую): из них принимается `crm:auth` (плюс `ev.source === window.parent`) и они же попадают в `frame-ancestors`. Origin родителя фронтенд определяет по `location.ancestorOrigins` или `document.referrer` и шлёт `crm:ready` только ему; если родитель не определён — каждому origin из списка (браузер доставит лишь совпавшему). Домен стилей CRM — `Crm__AssetsOrigin`. +`Content-Security-Policy: frame-ancestors https://shotam.tvorymo.com https://units.tvorymo.com; …` (без `X-Frame-Options`). Список origin CRM задаётся env `CRM_ORIGINS` или `Crm__Origins` (через пробел или запятую): из них принимается `crm:auth` (плюс `ev.source === window.parent`) и они же попадают в `frame-ancestors`. Origin родителя фронтенд определяет по `location.ancestorOrigins` или `document.referrer` и шлёт `crm:ready` только ему; если родитель не определён — каждому origin из списка (браузер доставит лишь совпавшему). Домен стилей CRM — `Crm__AssetsOrigin`. На экране ожидания есть диагностика: origin родителя, куда ушёл `crm:ready`, какие сообщения пришли (без токенов); через 10 секунд без `crm:auth` — подсказка. Интерфейс на украинском. @@ -93,4 +93,4 @@ cd frontend && npm i && npm run dev # Vite, /api проксируетс dotnet test backend/Wiki.Api.Tests # тесты проверки доступа к workspace ``` -Настройки (env): `Storage__DataDir`, `Crm__Origins`, `Crm__AssetsOrigin`, `Supabase__Url`, `Supabase__PublishableKey`. +Настройки (env): `Storage__DataDir`, `CRM_ORIGINS` (`Crm__Origins`), `Crm__AssetsOrigin`, `Supabase__Url`, `Supabase__PublishableKey`. diff --git a/backend/Wiki.Api/Program.cs b/backend/Wiki.Api/Program.cs index 48045cd..96e4f4a 100644 --- a/backend/Wiki.Api/Program.cs +++ b/backend/Wiki.Api/Program.cs @@ -15,11 +15,11 @@ builder.Services.Configure(o => o.MultipartBodyLengthLimit = Images var app = builder.Build(); var cfg = app.Configuration; // Origin CRM, из которых принимаем crm:auth и в которые разрешено встраивание (через пробел или запятую). -var crmOrigins = (cfg["Crm:Origins"] ?? cfg["Crm:Origin"] ?? "https://test.units.tvorymo.com https://units.tvorymo.com") +var crmOrigins = (cfg["CRM_ORIGINS"] ?? cfg["Crm:Origins"] ?? cfg["Crm:Origin"] ?? "https://shotam.tvorymo.com https://units.tvorymo.com") .Split([' ', ',', ';'], StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) .Select(o => o.TrimEnd('/')).Distinct(StringComparer.OrdinalIgnoreCase).ToArray(); // Откуда грузятся стили CRM (ссылки в index.html). -var crmAssets = (cfg["Crm:AssetsOrigin"] ?? "https://test.units.tvorymo.com").TrimEnd('/'); +var crmAssets = (cfg["Crm:AssetsOrigin"] ?? "https://shotam.tvorymo.com").TrimEnd('/'); // Ссылка на страницу в CRM для вики, открытой вне iframe: https:///#/module/?path={path}&ws={ws}. // Без шаблона (или без {path}) кнопки «Відкрити в CRM» нет. Авторедирект — только CRM_AUTO_REDIRECT=true. var crmLinkTemplate = (cfg["CRM_LINK_TEMPLATE"] ?? cfg["Crm:LinkTemplate"])?.Trim(); diff --git a/backend/Wiki.Api/appsettings.json b/backend/Wiki.Api/appsettings.json index bdaed8b..29cb8e7 100644 --- a/backend/Wiki.Api/appsettings.json +++ b/backend/Wiki.Api/appsettings.json @@ -11,8 +11,8 @@ "DataDir": "data" }, "Crm": { - "Origins": "https://test.units.tvorymo.com https://units.tvorymo.com", - "AssetsOrigin": "https://test.units.tvorymo.com" + "Origins": "https://shotam.tvorymo.com https://units.tvorymo.com", + "AssetsOrigin": "https://shotam.tvorymo.com" }, "Supabase": { "Url": "https://yjxbkcqsquwbsyoonfkn.supabase.co", diff --git a/docker-compose.yml b/docker-compose.yml index 743c2b4..f96c597 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,9 +10,9 @@ services: ASPNETCORE_ENVIRONMENT: Production ASPNETCORE_URLS: "http://+:8080" Storage__DataDir: /data - # origin CRM через пробел: из них принимается crm:auth, они же в frame-ancestors - Crm__Origins: "https://test.units.tvorymo.com https://units.tvorymo.com" - Crm__AssetsOrigin: "https://test.units.tvorymo.com" + # origin CRM через запятую или пробел: из них принимается crm:auth, они же в frame-ancestors + CRM_ORIGINS: ${CRM_ORIGINS:-https://shotam.tvorymo.com,https://units.tvorymo.com} + Crm__AssetsOrigin: "https://shotam.tvorymo.com" Supabase__Url: "https://yjxbkcqsquwbsyoonfkn.supabase.co" # publishable-ключ публичный по дизайну Supabase__PublishableKey: "sb_publishable_TQaZAtnBpImL49A-o87bKg_q5sYvhPR" diff --git a/frontend/index.html b/frontend/index.html index 3aca4fa..5182e4d 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -7,8 +7,8 @@ - - + +