CRM на shotam.tvorymo.com: env CRM_ORIGINS, frame-ancestors и стили CRM от корня (/css/...)
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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`.
|
||||
|
||||
@@ -15,11 +15,11 @@ builder.Services.Configure<FormOptions>(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://<crm>/#/module/<id>?path={path}&ws={ws}.
|
||||
// Без шаблона (или без {path}) кнопки «Відкрити в CRM» нет. Авторедирект — только CRM_AUTO_REDIRECT=true.
|
||||
var crmLinkTemplate = (cfg["CRM_LINK_TEMPLATE"] ?? cfg["Crm:LinkTemplate"])?.Trim();
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<!-- Стили CRM ссылками: сначала дизайн-система, затем crm.css (порядок важен). -->
|
||||
<link rel="stylesheet" href="https://test.units.tvorymo.com/tvorymo-crm/css/tvorymo-ui.css">
|
||||
<link rel="stylesheet" href="https://test.units.tvorymo.com/tvorymo-crm/css/crm.css">
|
||||
<link rel="stylesheet" href="https://shotam.tvorymo.com/css/tvorymo-ui.css">
|
||||
<link rel="stylesheet" href="https://shotam.tvorymo.com/css/crm.css">
|
||||
</head>
|
||||
<body class="side-off">
|
||||
<div id="root"></div>
|
||||
|
||||
Reference in New Issue
Block a user