From f9b4d3bd68647b612f3cfb597c8c32901fb1a8b7 Mon Sep 17 00:00:00 2001 From: nns Date: Thu, 8 Oct 2026 18:08:48 +0500 Subject: [PATCH] =?UTF-8?q?rebrand:=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B5?= =?UTF-8?q?=D1=81=D1=81-=D0=B4=D0=BE=D0=BA=20=E2=80=94=20=D0=B1=D0=B5?= =?UTF-8?q?=D0=B7=D0=BE=D0=BF=D0=B0=D1=81=D0=BD=D0=BE=D1=81=D1=82=D1=8C,?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=D1=82=D0=B0,=20=D0=B3=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=86=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Отчёт по ревью безопасности (сидер/префилл/ротация пароля стенда), результат проверки отката в worktree, уточнённые границы (артефакты кассы, маркетинг-скриншоты). Co-Authored-By: Claude Opus 5.5 --- docs/rebrand-all-market-progress.md | 55 ++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/docs/rebrand-all-market-progress.md b/docs/rebrand-all-market-progress.md index bda7b47..c5a00b5 100644 --- a/docs/rebrand-all-market-progress.md +++ b/docs/rebrand-all-market-progress.md @@ -12,26 +12,57 @@ «Food Market» / «food-market» / «FOOD MARKET» → **ALL MARKET** (в тексте — ALL MARKET; лого — файлом). ## План / статус -0. [ ] Подготовка к откату: тег `pre-rebrand-all-market`, docs/rebrand-rollback.md, - deploy/rebrand-rollback.sh (dry-run по умолчанию), проверка отката в worktree. -1. [ ] Ассеты бренда в репозитории (web/public/pos): логотипы, иконки, favicon. -2. [ ] Веб-админка: Logo, вход/регистрация/восстановление, favicon/apple-touch/manifest/PWA-иконки, - , offline, онбординг, SuperAdmin, футеры, пустые состояния, «О программе». -3. [ ] Письма (api/Resources/EmailTemplates) + имя отправителя + видимые строки API. -4. [ ] Публичный сайт (Astro): лого, favicon, OG 1200×630, title/meta, тексты, Footer/FAQ. -5. [ ] Касса (Avalonia): лого в шапке (color/white), заголовок окна, вход, «О программе», +0. [x] Подготовка к откату: тег `pre-rebrand-all-market` (c8c0be5), docs/rebrand-rollback.md, + deploy/rebrand-rollback.sh (dry-run по умолчанию), проверка отката в worktree (ниже). +1. [x] Ассеты бренда в репозитории (web/public/pos): логотипы, иконки, favicon. +2. [x] Веб-админка: Logo, вход/восстановление, favicon/apple-touch/manifest/PWA-иконки, + <title>, offline, онбординг, SuperAdmin, отправитель писем. +3. [x] Письма (api/Resources/EmailTemplates): шапка-вордмарк + подпись; имя отправителя и строки API. +4. [x] Публичный сайт (Astro): лого, favicon, OG 1200×630 (реальный логотип), title/meta, тексты, Footer/FAQ. +5. [x] Касса (Avalonia): лого в шапке (color/white) + разделитель, заголовок окна, вход, иконка приложения (.ico), подвал чека «ALL MARKET — система учёта торговли», pos-mockup. -6. [ ] Документация docs/*.md (бренд в тексте). -7. [ ] Проверка: grep (остаточные вхождения с обоснованием), скриншоты Было/Стало, - full-chain C + menu-walk, POS --uitest/smoke, deploy-stage, проверка отката в worktree. +6. [x] Документация docs/*.md пользовательская (imports, simple-mode). +7. [x] Проверка: grep (остатки обоснованы ниже), скриншоты Было/Стало (docs/rebrand-screenshots/), + POS --uitest/smoke OK (82 unit), deploy-stage, проверка отката в worktree (ниже). + full-chain C + menu-walk — против стенда после финального деплоя. + +## Безопасность (ревью Mac-Claude) — закрыто +- **Пароль dev-админа утекал в UI.** `LoginPage` префилил e-mail/пароль SuperAdmin и + показывал подсказку «Dev admin: admin@food-market.local / Admin12345!» безусловно. + → показывается только в `import.meta.env.DEV` на localhost; на стенде/проде поля пустые. +- **Сидер создавал SuperAdmin с известным паролем во ВСЕХ средах.** `DevDataSeeder` + (hosted service, без env-гейта) создавал `admin@food-market.local` с хардкодом + `Admin12345!` — т.е. и на Production. → пароль берётся ТОЛЬКО из секрета + (`Seed:SuperAdminPassword` / env `SEED_SUPERADMIN_PASSWORD`); дефолт — лишь в Development; + на прод/стенде без секрета аккаунт НЕ создаётся (warning). Проброшено в stage-compose. +- **Существующий пароль на стенде** (`Admin12345!`, давал /connect/token→200) сменён + вручную на сложный: POST /api/me/change-password. Новый пароль — в + `~/.fm-watchdog/stage-superadmin-password` (chmod 600). Проверено: старый→400, + новый→200, sentinel/master quick-login→200 (стендовый быстрый вход цел). +- **Другие хардкод-пароли:** `docs/DEVELOPER-GUIDE.md` и `docs/quick-login.md` — + внутренние dev/тест-доки (не пользовательские), оставлены; на прод quick-login выключен. +- **Зелёный UI не менялся:** `--color-brand #00B207` идентичен дорибрендинговому (git-diff пуст). +- **Тост 404 на входе:** StageBanner/QuickLoginBlock пробовали `/api/dev/quick-login/accounts` + через axios → глобальный тост «Не найдено» на проде. → raw fetch, тостов на входе нет. + +## Проверка отката (worktree, стенд не трогали) +`git worktree` + `git revert pre-rebrand-all-market..HEAD` → применился чисто; собрались +API и web (0 ошибок); лого вернулось на Food Market (dist/logo.svg aria-label="Food Market", +<title>FOOD MARKET, касса «FOOD MARKET · Касса»). Worktree удалён. Скрин — +`docs/rebrand-screenshots/rollback-logo-foodmarket.png`. ## Что НЕ трогаем (обоснование остаточных «food-market») - Домены `*.food-market.kz`, nginx, сертификаты — allmarket.kz ещё не куплен (отдельная задача). - C#-namespaces `foodmarket.*`, имена csproj/проектов/репо/docker-образов/БД/контейнеров. - `client_id=food-market-web`, ключи localStorage/cookie — иначе разлогинит всех. - Бонус-приложение магазина (food-market-app/-ios, back.food-market.kz) — бренд магазина, не продукта. -- Данные организаций («Демо-магазин» и т.п.). +- Данные организаций («Демо-магазин» и т.п.), в т.ч. демо-орг «FOOD MARKET» в маркетинг-скриншотах. - Цвета UI, шрифт интерфейса (Inter). +- Имена артефактов кассы (`food-market-pos-*.zip/.AppImage`, exe `foodmarket.Pos`) — завязаны на + AssemblyName (инфраструктура); у кассы ребрендировано видимое: заголовок окна, Name в .desktop, иконка. +- Встроенные продуктовые скриншоты маркетинг-сайта (`public/screenshots/*.png`) — генерируются + `scripts/screenshots.mjs` против ЖИВОЙ админки (сейчас прод); обновятся при выкатке ребрендинга + на прод (прод в этой задаче не трогаем). На стенде ребренд виден вживую. ## Диапазон коммитов для отката (заполняется в конце — первый..последний `rebrand:` коммит)