Версия согласия ПДн отстала от новой редакции политики — деплой МЕРЫ стоял, прод обновился наполовину #3437
2 changed files with 49 additions and 8 deletions
|
|
@ -51,6 +51,30 @@ check() {
|
|||
fi
|
||||
}
|
||||
|
||||
# check_any: PASS, если код ответа — ЛЮБОЙ из перечисленных.
|
||||
#
|
||||
# Нужен там, где проверяемое свойство — «этого адреса наружу нет», а каким
|
||||
# именно отказом это выражено, зависит от того, какой рубеж ответил первым.
|
||||
# На gendsgn.ru таких рубежа два: пилотный basic_auth (401) стоит выше
|
||||
# allowlist'а site-блока (404), и какой сработает — вопрос порядка директив, а
|
||||
# не безопасности. Фиксировать один конкретный код значило бы ронять смоук при
|
||||
# снятии пилотного гейта, то есть при изменении, которое к предмету проверки
|
||||
# отношения не имеет.
|
||||
check_any() {
|
||||
local desc="$1" url="$2"
|
||||
shift 2
|
||||
local code expected="$*"
|
||||
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 "$url" 2>/dev/null)
|
||||
for want in "$@"; do
|
||||
if [ "$code" = "$want" ]; then
|
||||
echo "PASS: $desc ($url -> $code)"
|
||||
return
|
||||
fi
|
||||
done
|
||||
echo "FAIL: $desc ($url -> got '${code:-<no response>}', expected one of: $expected)"
|
||||
fail=1
|
||||
}
|
||||
|
||||
check_post() {
|
||||
local desc="$1" url="$2" body="$3" expected="$4" reject="${5:-}"
|
||||
local out code head_and_body
|
||||
|
|
@ -278,11 +302,21 @@ check "trade-in /api/v1/admin/users — 404 anonymous (несуществующ
|
|||
# закрытый B2B-контур gendsgn.ru — корень gendsgn.ru принадлежит Site
|
||||
# Finder, у него нет своего route на /sitemap.xml под МЕРУ, allowlist-by-
|
||||
# default этого site-блока (как и у meraocenka.ru) отдаёт 404 на всё
|
||||
# незаявленное. NB: не проверено вживую на проде (нет approval на prod-
|
||||
# доступ в рамках этой сессии) — если у Site Finder когда-нибудь появится
|
||||
# СВОЙ /sitemap.xml, ожидание 404 придётся пересмотреть на 200-с-другим-
|
||||
# содержимым.
|
||||
check "gendsgn.ru/sitemap.xml — must NOT serve MERA sitemap (закрытый контур)" "$BASE_MAIN/sitemap.xml" 404
|
||||
# незаявленное.
|
||||
#
|
||||
# ДВА ДОПУСТИМЫХ КОДА, А НЕ ОДИН. Первая редакция этой проверки ждала 404 и
|
||||
# упала на первом же прогоне против прода: корень gendsgn.ru закрыт
|
||||
# пилотным basic_auth, и гейт отвечает 401 РАНЬШЕ, чем запрос доходит до
|
||||
# allowlist'а. Оба ответа означают ровно проверяемое — карты сайта МЕРЫ на
|
||||
# B2B-домене нет; какой именно рубеж сработал первым, к предмету проверки
|
||||
# отношения не имеет, а вот снятие пилотного гейта (оно запланировано)
|
||||
# переключит 401 на 404 и уронило бы жёсткое ожидание на пустом месте.
|
||||
# Красная строка здесь — только 200: он означал бы, что sitemap реально
|
||||
# отдаётся из закрытого контура.
|
||||
#
|
||||
# Если у Site Finder когда-нибудь появится СВОЙ /sitemap.xml, ожидание
|
||||
# придётся пересмотреть на «200 с другим содержимым».
|
||||
check_any "gendsgn.ru/sitemap.xml — must NOT serve MERA sitemap (закрытый контур)" "$BASE_MAIN/sitemap.xml" 401 404
|
||||
|
||||
# 4. gendsgn.ru/api/v1/admin/* отдаёт 401 анониму (auth gate стоит ДО роутинга
|
||||
# в FastAPI — конкретный путь неважен, любой /api/v1/admin/* перехватывается
|
||||
|
|
|
|||
|
|
@ -53,12 +53,19 @@ _PHONE_MAX_DIGITS = 15
|
|||
# только в audit-лог (#2497 TODO, теперь закрыт).
|
||||
#
|
||||
# Значение = дата утверждения политики (PRIVACY_APPROVAL в frontend/src/app/
|
||||
# mera-public/content.ts: «приказом директора № 1 от 13 августа 2026 г.» →
|
||||
# "2026-08-13"), а не дата этого коммита — версия обязана указывать на редакцию
|
||||
# mera-public/content.ts: «приказом директора № 2 от 10 сентября 2026 г.» →
|
||||
# "2026-09-10"), а не дата этого коммита — версия обязана указывать на редакцию
|
||||
# ДОКУМЕНТА, на который согласие фактически ссылается (чекбокс теперь линкует
|
||||
# именно на /mera-public/privacy). test_consent_text_frontend_sync.py проверяет
|
||||
# это соответствие автоматически, так что рассинхронизация здесь падает в CI.
|
||||
_CONSENT_POLICY_VERSION = "2026-08-13"
|
||||
#
|
||||
# Редакция № 2 от 10.09.2026: в политику добавлен раздел 9 «Файлы cookie и
|
||||
# веб-аналитика» (на публичный сайт поставлены Яндекс.Метрика и GA4), прежний
|
||||
# раздел «Контакты» стал десятым. Согласия, собранные до этой даты, ссылаются
|
||||
# на редакцию № 1 и остаются с версией "2026-08-13" — в этом и смысл хранить
|
||||
# версию per-row: снимок согласия должен указывать на тот документ, который
|
||||
# человек видел, а не на текущий.
|
||||
_CONSENT_POLICY_VERSION = "2026-09-10"
|
||||
|
||||
# Снимок точного текста согласия, который видит пользователь при отправке лида
|
||||
# (ПЛОСКИЙ текст — без разметки ссылки на политику, которая в LeadForm.tsx рядом
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue