food-market/docs/quick-login-progress.md
nns 5728b729a8 feat(s30): плашка ТЕСТОВЫЙ СТЕНД + robots noindex (шаг 6/9)
StageBanner — жёлтая полоса сверху всех страниц, когда /api/dev/
quick-login/accounts отвечает 200 (стенд). В проде эндпоинт 404 →
компонент возвращает null, никакая полоса не рисуется.

Решение «stage vs prod» кэшируется в sessionStorage, чтобы не стрелять
запрос на каждой навигации в SPA (один запрос за открытие вкладки).

На стенде динамически добавляется <meta name=robots content=noindex,
nofollow> — не хотим чтобы Google индексировал test.admin.food-market.kz.
Один web-билд ходит в оба окружения; никаких отдельных index.html.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-10-04 15:42:49 +05:00

4.9 KiB
Raw Blame History

Quick Login — прогресс

Задача владельца: на test.admin.food-market.kz не набирать логин/пароль руками. Выбрать аккаунт из списка, пароль у всех один — 123456. На admin.food-market.kz этого нет никогда (несколько независимых предохранителей).

Координатор отдельно проверил: на стейдже нет реальных секретов (МойСклад токенов нет, ОФД-ключей нет, Telegram не привязан, SMTP пустой) — потому открытый мастер-пароль на стенде безопасен.

Чек-лист

  • 1. Флаг конфигурации — QuickLogin:Enabled (default false) + QuickLogin:MasterPassword (default 123456). Включается только через env-переменные QuickLogin__Enabled=true в stage-compose. Жёсткий предохранитель: если OpenIddict:Issuer указывает на admin.food-market.kz — быстрый вход принудительно выключен и в лог Warning.
  • 2. Мастер-пароль — password-grant: QuickLogin:MasterPassword работает как второй вход рядом со своим паролем. Неактивные/без-org пользователи — отшиваются как раньше. Rate-limit не ослаблять.
  • 3. API списка аккаунтов — GET /api/dev/quick-login/accounts (анонимный, 404 если выключен). Порядок: SuperAdmin → демо-* → остальные «человеческие». Autotest-патéрны (cat31-, visual-, factory-smoke-, mt6, quality-, i18n-, auth2-, doc4-, rep5-, rt8-, twofa-, wiz9-, a11y-, mob1*-, isoB-, axdet-, smoke-, ratetest-, perf-, probe-, load-, s19-test- и всё с суффиксом из ≥10 цифр) — скрыты. Лимит 50 + ?q=.
  • 4. Демо-аккаунты — идемпотентный сид «Демо-магазин» (через существующий DemoTenantSeeder) + сотрудники с ролями Admin / Cashier / Storekeeper (demo-admin@food-market.local, demo-cashier@..., demo-keeper@...). Запускается только при Enabled=true.
  • 5. Страница входа (web) — если GET .../accounts вернул 200 — над обычной формой блок «Быстрый вход (тестовый стенд)» с карточками + поиск. Клик — моментальный логин через мастер-пароль. На проде блока нет.
  • 6. Плашка «ТЕСТОВЫЙ СТЕНД» — при Enabled=true жёлтая полоса сверху + <meta robots="noindex,nofollow"> в index.html стенда.
  • 7. Чистка автотестового мусора — SQL-скрипт для стейджа + расширение HousekeepingJobs.PruneQualityTestOrgsAsync на новые autotest-патéрны, чтобы cron 02:30 UTC гасил новые юзеры сам. Не трогать: SuperAdmin, admin@demo-market.local, market@email.com, demo-* аккаунты.
  • 8. Тесты — integration (3): Enabled=false → эндпоинт 404 + мастер- пароль отвергается; Issuer=admin.food-market.kz → выключен даже с Enabled=true; Enabled=true → мастер-пароль пускает активного и не пускает неактивного. E2E stage: клик по демо-кассиру → меню кассира. Прод: curl https://admin.food-market.kz/api/dev/quick-login/accounts → 404.
  • 9. Деплой + документация — поднять env в stage-compose (локальный репо + prod-vm ~/food-market-stage/deploy/docker-compose.yml), ~/deploy-stage.sh, ретест, docs/quick-login.md.

Правила (сам себе)

  • Мастер-пароль и список аккаунтов — никогда не на проде. По умолчанию выключено, Issuer=admin.* — выключено независимо от флага.
  • После каждого пункта: build + соответствующие тесты + коммит порцией + [x] в этом файле.
  • Не трогать: прод admin.food-market.kz (кроме read-only проверки 404), global.json, POS WPF, gateway nginx.

Условие остановки

9 пунктов [x], тесты зелёные, стейдж задеплоен, прод-эндпоинт 404 → итог в этом файле + touch ~/.fm-watchdog/DONE.