feat(mera/b2c): публичный периметр на отдельном домене meraocenka.ru — этап 1 из 8 #2545

Merged
lekss361 merged 4 commits from feat/mera-b2c-perimeter into main 2026-08-02 12:51:47 +00:00

4 commits

Author SHA1 Message Date
bot-backend
c8ff201345 fix(mera/b2c): ужесточить периметр по итогам ревью — _next/static вместо _next, скраб X-Authenticated-User
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 7s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
1. Матчер статики сужен с /trade-in/_next/* до /trade-in/_next/static/* — тот
же, что у @uipreview (Caddyfile:78), проверенный в проде. Широкий вариант
открывал анонимам /_next/image (оптимизатор картинок, CPU по запросу), который
лэндингу не нужен: next/image, <img> и url() в mera-public не встречаются
вообще, картинок нет, шрифты — next/font/google self-hosted в _next/static/media.

2. Во все три reverse_proxy блока добавлен header_up -X-Authenticated-User —
единообразие с остальным периметром (:87, :129, :169). Блок не под basic_auth,
т.е. анонимный клиент тем более может прислать свой заголовок. Сейчас инертно
(лэндинг статичен), но станет дырой на этапе 5, когда откроется публичный
/estimate.

3. Регресс-тест на сужение: /trade-in/_next/image должен отдавать 404.
2026-08-02 15:22:11 +03:00
bot-backend
537b0ac06e Merge branch 'main' into feat/mera-b2c-perimeter
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 8s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
Конфликты (add/add + content) разрешены в пользу main: лэндинг #2615 и рефакторинг RouteGuard (вынос GuardedRoute в отдельный чанк, хелпер isPublicPath) уже содержат всё, что добавляла заглушка этой ветки.

Плюс закрыт разрыв на стыке #2615 и этого PR: футер лэндинга ссылается на политику ПДн через next/link, Next с basePath эмитит её как /trade-in/mera-public/privacy — такого handle в блоке периметра не было, ссылка уходила в catch-all 404. Добавлен узкий handle ровно на поддерево лэндинга (НЕ /trade-in/*) + два регресс-теста в смоук на то, что matcher не шире задуманного.
2026-08-02 15:12:06 +03:00
bot-backend
536640a252 Merge remote-tracking branch 'refs/remotes/forgejo/main' into feat/mera-b2c-perimeter
All checks were successful
CI Trade-In / changes (pull_request) Successful in 10s
CI / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m16s
# Conflicts:
#	tradein-mvp/frontend/src/components/auth/RouteGuard.tsx
2026-07-31 23:57:10 +03:00
bot-backend
2b86e94c5b feat(mera): открыть публичный B2C-периметр МЕРА (ЭТАП 1, без функционала)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 11s
CI / changes (pull_request) Successful in 12s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m17s
Отдельный поддомен mera.gendsgn.ru вместо дырки в auth-gate gendsgn.ru — на
новом site-блоке B2B-маршруты (v2, admin, scrapers, /trade-in/api/*) физически
не объявлены, basic_auth не импортируется вообще. Allowlist-by-default: только
корень "/" (rewrite на /trade-in/mera-public) + статика Next _next/*, всё
остальное — 404.

Публичная страница-заглушка (tradein-mvp/frontend/src/app/mera-public/) не
тянет RouteGuard/SupportChatProvider функционально — RouteGuard получил
безусловный bypass для этого пути (аналог существующего /ui-preview,
но always-on, не за dev-флагом); сама страница — server component без
useMe/useQuota/useHistory. robots: noindex на этом этапе.

CI-регресс на периметр: scripts/smoke-mera-perimeter.sh (4 проверки: публичный
поддомен 200, B2B-путь на нём 404, gendsgn.ru/trade-in/v2 и /api/v1/admin/*
по-прежнему 401 анониму) + .forgejo/workflows/perimeter-smoke.yml
(workflow_dispatch + daily cron — не pre-merge гейт, требует реального DNS).

Требуется DNS: A-record mera.gendsgn.ru → IP VPS. До появления записи ACME
для нового хоста будет ретраить с backoff, остальные site-блоки не страдают
(автоматический HTTPS в Caddy изолирован per-hostname).
2026-07-28 15:01:14 +03:00