feat(tradein/scrapers): хранилище авторизованной сессии Яндекс.Недвижимости #3195

Merged
bot-backend merged 3 commits from feat/3192-yandex-session-store into main 2026-08-28 19:02:06 +00:00
Showing only changes of commit 4c3a767f45 - Show all commits

View file

@ -1,9 +1,16 @@
-- 274_yandex_session_cookies.sql -- 274_yandex_session_cookies.sql
-- Purpose: Encrypted storage for Yandex.Nedvizhimost browser session cookies. -- Purpose: Encrypted storage for Yandex.Nedvizhimost browser session cookies.
-- Замер на проде (сайдкар, две карточки, вперемежку с/без кук, 2026-08-28): -- Замер на проде (сайдкар, две карточки, вперемежку с/без кук, 2026-08-28):
-- авторизованная сессия отдаёт mainPhone=1 и на 11 больше уникальных -- author.phoneNumbers присутствует ТОЛЬКО в авторизованном режиме
-- телефонов продавца (90→101 / 89→100) по сравнению с анонимным запросом — -- (0 без кук → 2 с куками, одинаково на обеих карточках), плюс три
-- то есть контакты продавца физически недоступны без валидной сессии. -- номера в author.phones сверху. Это контакт продавца с тегом канала
-- и redirectId.
-- NB: mainPhone НЕ собирать — он лежит в паспортном блоке рядом с
-- login/passportHost/passportPhones, то есть это номер НАШЕЙ учётки,
-- а не продавца. Первая версия этого замера приняла его за данные
-- объявления; счётчики по конкретным полям это опровергли.
-- encryptedPhones одинаков в обоих режимах (54) — зашифрованные токены
-- отдаются всегда, различие не в них.
-- Uses pgcrypto pgp_sym_encrypt for AES encryption at rest (зеркалит -- Uses pgcrypto pgp_sym_encrypt for AES encryption at rest (зеркалит
-- 027_cian_session_cookies.sql / 174_domclick_session_cookies.sql). -- 027_cian_session_cookies.sql / 174_domclick_session_cookies.sql).
-- Dependencies: -- Dependencies:
@ -20,10 +27,16 @@
-- числового id аккаунта, доступного из cookie-дампа; используем произвольную -- числового id аккаунта, доступного из cookie-дампа; используем произвольную
-- текстовую метку аккаунта, которую задаёт оператор при заливке дампа. -- текстовую метку аккаунта, которую задаёт оператор при заливке дампа.
-- --
-- Sources: issue #3192 (Yandex session cookies — mainPhone/contact reveal) -- Sources: issue #3192 (Yandex session cookies — author.phoneNumbers reveal)
BEGIN; BEGIN;
-- #2752: без lock_timeout CREATE INDEX встанет в очередь за чужой долгой
-- сессией и уведёт за собой запросы приложения — таблица новая и пустая, но
-- очередь блокировок этого не знает. Гейт check-migration-lock-timeout.py
-- держит правило на каждом PR.
SET LOCAL lock_timeout = '5s';
CREATE EXTENSION IF NOT EXISTS pgcrypto; CREATE EXTENSION IF NOT EXISTS pgcrypto;
CREATE TABLE IF NOT EXISTS yandex_session_cookies ( CREATE TABLE IF NOT EXISTS yandex_session_cookies (