Добавлена проверка origin виджета по сайтам

Этот коммит содержится в:
Виктор
2026-05-08 20:47:50 +09:00
родитель a7035208cc
Коммит 8c6ae80823
+32
Просмотреть файл
@@ -94,6 +94,7 @@ export function migrate() {
CREATE INDEX IF NOT EXISTS idx_messages_conversation_created ON messages(conversation_id, created_at);
CREATE INDEX IF NOT EXISTS idx_messages_site_created ON messages(site_id, created_at);
CREATE INDEX IF NOT EXISTS idx_operators_telegram_user_id ON operators(telegram_user_id);
CREATE INDEX IF NOT EXISTS idx_sites_domain_active ON sites(domain, is_active);
`);
ensureDefaultSite();
@@ -112,6 +113,37 @@ export function ensureDefaultSite() {
return 'site_default';
}
function normalizeHost(value) {
return String(value || '')
.trim()
.toLowerCase()
.replace(/^https?:\/\//, '')
.replace(/^www\./, '')
.split('/')[0]
.split(':')[0];
}
export function isAllowedWidgetOrigin(origin) {
if (!origin) return true;
let originHost = '';
try {
originHost = normalizeHost(new URL(origin).hostname);
} catch {
originHost = normalizeHost(origin);
}
if (!originHost) return false;
const rows = db.prepare(`
SELECT domain
FROM sites
WHERE is_active = 1
`).all();
return rows.some((row) => normalizeHost(row.domain) === originHost);
}
function boolToSetting(value) {
return value ? 'true' : 'false';
}