# Quick Login — прогресс Задача владельца: на `test.admin.food-market.kz` не набирать логин/пароль руками. Выбрать аккаунт из списка, пароль у всех один — `123456`. На `admin.food-market.kz` этого нет никогда (несколько независимых предохранителей). Координатор отдельно проверил: на стейдже нет реальных секретов (МойСклад токенов нет, ОФД-ключей нет, Telegram не привязан, SMTP пустой) — потому открытый мастер-пароль на стенде безопасен. ## Чек-лист - [x] 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 жёлтая полоса сверху + `` в 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`.