Добавлена проверка origin виджета по сайтам
Этот коммит содержится в:
@@ -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_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_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_operators_telegram_user_id ON operators(telegram_user_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_sites_domain_active ON sites(domain, is_active);
|
||||||
`);
|
`);
|
||||||
|
|
||||||
ensureDefaultSite();
|
ensureDefaultSite();
|
||||||
@@ -112,6 +113,37 @@ export function ensureDefaultSite() {
|
|||||||
return 'site_default';
|
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) {
|
function boolToSetting(value) {
|
||||||
return value ? 'true' : 'false';
|
return value ? 'true' : 'false';
|
||||||
}
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user