docs(wiki): ingest sched-ozon-creds-stub-contract (anti-leak stubs, incident 2026-08-23)
This commit is contained in:
68
.wiki/concepts/sched-ozon-creds-stub-contract.md
Normal file
68
.wiki/concepts/sched-ozon-creds-stub-contract.md
Normal file
@@ -0,0 +1,68 @@
|
||||
---
|
||||
title: sched-ozon-creds-stub-contract
|
||||
type: concept
|
||||
status: live
|
||||
tags: [books, sched, ozon, creds, tenant-split, anti-leak]
|
||||
related: [[books-vds]], [[portainer-stack-management-books-vds]]
|
||||
---
|
||||
# Sched Ozon creds stub contract (slovo/bookva)
|
||||
|
||||
Контракт кредов Ozon между двумя тенантами books на books VDS. **Каждый стек ходит
|
||||
в Ozon только своими кредами**: Slovo — client_id 94191, Bookva — client_id 50542.
|
||||
Мисматч-пары (client_id ↔ чужой ключ) в обеих БД — **намеренные заглушки**, НЕ баги
|
||||
и НЕ артефакты копирования. Зафиксировано владельцем 2026-08-23 после того, как
|
||||
.admin «починил» заглушку и вызвал инцидент.
|
||||
|
||||
## Почему заглушки
|
||||
|
||||
Tenant-split (volume-copy) оставил ОБОИХ sellers в обеих БД. Если бы в каждой БД
|
||||
лежали рабочие ключи обоих кабинетов — любой стек мог бы ходить в Ozon под чужим
|
||||
кабинетом (утечка/перекос данных). Заглушка делает чужой кабинет **недостижимым**:
|
||||
Ozon отвечает `Invalid Api-Key (code 5)` на мисматч-пару.
|
||||
|
||||
## Матрица (актуально 2026-08-23)
|
||||
|
||||
| БД | id_seller | client_id | api_key | статус |
|
||||
|---|---|---|---|---|
|
||||
| slovo (books-db) | 1 | 50542 | `968302d1-…` (slovo-ключ) | **заглушка** (мисматч) |
|
||||
| slovo (books-db) | 2 | 94191 | `968302d1-…` (slovo-ключ) | рабочий |
|
||||
| bookva (bookva-db) | 1 | 50542 | `ddc24146-…` (bookva-ключ) | рабочий |
|
||||
| bookva (bookva-db) | 2 | 94191 | `ddc24146-…` (bookva-ключ) | **заглушка** (мисматч) |
|
||||
|
||||
Хэши SHA2 (проверка целостности): slovo-ключ = `d6227b…`, bookva-ключ = `f700f3…`.
|
||||
Оба ключа — штатные креды, живут в git (`.slovo.cmd`/`.bookva.cmd` обёртки
|
||||
`packages/tools`), не выдуманы.
|
||||
|
||||
Проверка Ozon API (2026-08-23): 94191 + slovo-ключ → 200 OK; 50542 + slovo-ключ →
|
||||
Invalid; 50542 + bookva-ключ → 200 OK.
|
||||
|
||||
## Как это безопасно
|
||||
|
||||
- Код-фикс `2a38fb5` (break в outer catch `ozonFbsPostingsSyncronization.js`) —
|
||||
задеплоен на оба task-runner 2026-08-23. all-sellers диспатч (data:null),
|
||||
упёршийся в заглушку → `Invalid Api-Key` → **break → фейл-фаст, БЕЗ спина**
|
||||
(до фикса — бесконечный while(true) ~75 req/сек, инцидент 2026-08-23).
|
||||
- Расписания с корректным `data.idSeller` (slovo=2, bookva=1) заглушек вообще не
|
||||
касаются — ходят только своим продавцом.
|
||||
|
||||
## Verify (если кто-то засомневается)
|
||||
|
||||
```sql
|
||||
-- slovo: seller 1 должен быть 50542 + 968302d1 (заглушка)
|
||||
SELECT id_seller, client_id, LEFT(api_key,8) FROM sellers ORDER BY id_seller;
|
||||
-- bookva: seller 2 должен быть 94191 + ddc24146 (заглушка)
|
||||
```
|
||||
|
||||
## НЕ делать (guards)
|
||||
|
||||
- **НЕ «чинить» мисматч-пары** — это контракт. «Починил» → slovo-стек начинает
|
||||
ходить в Ozon как Bookva → утечка.
|
||||
- Не трогать bookva-БД seller 1 (рабочий) и slovo-БД seller 2 (рабочий).
|
||||
- Изменение ключей — только через владельца кабинета (Ozon) + письмо books.
|
||||
|
||||
## Инцидент-ссылка
|
||||
|
||||
2026-08-23: спин `ozonFbsPostingsSyncronization` (невалидный ключ + no-break код) →
|
||||
полный разбор в переписке `books/.agents/inbox/` (отчёты .admin 10:22→12:50Z) и
|
||||
тасках books #974/#975/#977/#990/#991. Фоллоу-ап: документация runtime-контракта
|
||||
sched-тасок (file-managed перевод slovo сделан 12:50Z, коммит 887bbae).
|
||||
@@ -21,6 +21,7 @@ Catalog of all wiki pages. One line per page, organized by type. Updated on ever
|
||||
- [windows-recovery-host](entities/windows-recovery-host.md) — Windows Recovery Host (рабочий PC пользователя)
|
||||
|
||||
## Concepts
|
||||
- [sched-ozon-creds-stub-contract](concepts/sched-ozon-creds-stub-contract.md) — контракт кредов Ozon slovo/bookva: мисматч-пары (client_id ↔ чужой ключ) — НАМЕРЕННЫЕ заглушки (анти-утечка после tenant-split), матрица 4 sellers, безопасность через break-on-error (2a38fb5), verify по SHA2, НЕ «чинить»
|
||||
- [omniroute-combo-deepseek-web-tuning](concepts/omniroute-combo-deepseek-web-tuning.md) — настройка web-комбо под агента: system_message убивает скилы pi, tool_filter_regex режет тулы, search-режим ломает tool-calling, 503 chat_admission_busy, эмуляция `<tool>` работает, план кастомного провайдера, qwen-web baxia-WAF стена
|
||||
- [forgetmeai-free-web-chat-proxies](concepts/forgetmeai-free-web-chat-proxies.md) — семейство бесплатных web-chat прокси ForgetMeAI (DeepSeek/Qwen/GLM/Kimi): паттерн «обход капчи через реальную браузерную сессию», PoW-солвер DeepSeek, браузерный путь через baxia-WAF (fetch в page.evaluate), CloakBrowser, классификаторы капчи; карта «что берём в lwp»
|
||||
- [sched-admin-client-openapi](concepts/sched-admin-client-openapi.md) — F&F раунды 2026-08-18: Python-клиент одной командой из спеки (openapi-generator 7.24.0); r1 0.1.2 — 24/24+smoke 19/19, находки F-1..F-5 (8 операций на raw-обходе); r2 0.2.0/0.3.5 — все 5 закрыты, raw_ops удалён, 11/11 typed-only, вердикт «claim подтверждён полностью»
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
## [2026-08-12] implement | NEW concepts/keenetic-rci-api.md — разобрана автоматизация KeeneticOS 5.1.3 (RCI: GET /rci/show/*, POST /rci/ массив parse-команд). Через API добавлены DNS-записи git.kreknin.site/kreknin.site → 192.168.1.43 (решение сломанного hairpin). Проверено с LAN: всё 200. Правила порт-форвардинга в 5.x лежат в ip.static (to-host=MAC).
|
||||
## [2026-08-12] implement | UPDATE entities/kreknin-synology.md — Gitea 1.27.1 + postgres 16 на kreknin (для Алексея), traefik починен (restart policy), LE-серт git.kreknin.site, проброс 80/443→8000/4443 на Keenetic. KeeneticOS Viva API закрыт — правила в GUI. NAT loopback сломан → нужен DNS-override git.kreknin.site→192.168.1.43. Пароли: pass kreknin/keenetic + pass kreknin/gitea.
|
||||
# Wiki op-log
|
||||
## [2026-08-23] ingest | NEW concepts/sched-ozon-creds-stub-contract.md — контракт кредов Ozon slovo/bookva: мисматч-пары в обеих БД — намеренные заглушки (анти-утечка после tenant-split). Урок: .admin «починил» заглушку (slovo seller 1 ← bookva-ключ) → откат 12:07Z по подтверждению владельца; зеркальная заглушка bookva seller 2 (12:15Z). Безопасность: break-on-error 2a38fb5 задеплоен (фейл-фаст без спина). verify по SHA2 (d6227b = slovo-ключ, f700f3 = bookva-ключ). НЕ чинить. Связано: инцидент 2026-08-23, перевод slovo → file-managed (887bbae).
|
||||
## [2026-08-14] ingest | NEW concepts/snolla-smtp-mail-delivery-2026-08.md — postmortem SMTP-инцидента 12–14.08: 525 SMTP disabled (Яндекс 360, доменка) → переезд на e-16513832@yandex.ru (app-password); 554 SPAM на 2+ получателях от холодного ящика → @snolla/mailer@0.9.0 per-recipient (forms-api 0.2.0, web 0.44.0); 550 from not owned → mailSettings.from во всех production.json + шаблон pilorama98checkoutconfirm. Монитор SMTP на VDS (cron 08:00, ntfy) + parity-чек Portainer env. Рецепт деплоя тиража (порядок, гочи: ad-hoc контейнер vs Portainer, regex-парсинг image, yarn up -R data).
|
||||
|
||||
Append-only log of wiki operations (ingests, promotions, lints, migrations).
|
||||
|
||||
Reference in New Issue
Block a user