From 9553d1e9be1f58c4bbc967245f61ff5ad7de1561 Mon Sep 17 00:00:00 2001 From: dmitriylaukhin Date: Mon, 5 Oct 2026 11:05:06 +0500 Subject: [PATCH] =?UTF-8?q?ROADMAP:=20=D0=B1=D1=8D=D0=BA=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=20=E2=80=94=20=D0=B4=D0=B5=D1=84=D0=B5=D0=BA=D1=82=D1=8B=20?= =?UTF-8?q?=D1=81=D0=B1=D1=80=D0=BE=D1=81=D0=B0=20=D0=B8=20=D1=81=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BF=D0=B0=D1=80=D0=BE=D0=BB=D1=8F=20(?= =?UTF-8?q?=D1=84=D0=BB=D0=B0=D0=B3,=20/change-password,=20Math.random)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 (1M context) --- ROADMAP.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ROADMAP.md b/ROADMAP.md index 5dac579..bbc2856 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -275,6 +275,13 @@ ## Бэклог (после MVP) +- **⚠️ Смена и сброс пароля — три дефекта** (найдено 20261005, когда владелец менял пароль админа): + 1. `resetUserPassword` (`src/app/admin/users/[userId]/actions.ts`, ~стр. 82–99) заменяет пароль временным, но **не ставит `mustChangePassword: true`** — пользователя с временным паролем никто не заставляет его сменить. + 2. Ученическая зона при `mustChangePassword` делает `redirect("/change-password")` (`src/app/(student)/layout.tsx`, ~стр. 23), а **страницы `/change-password` в `src/app` нет** — ученик с флагом попадёт на 404. Нужна страница (форма уже есть: `src/app/(student)/profile/change-password-form.tsx` + `changePasswordAction`, она же снимает флаг). + 3. Временный пароль генерируется через `Math.random()` — не криптостойко; заменить на `crypto.randomInt` (node:crypto). + - Заодно: у админа/куратора нет смены пароля в админке — сейчас только через ученический `/profile` (работает, проверено 20261005). Добавить ссылку или форму в админ-профиль; рассмотреть принудительную смену и для админки. + - Приёмка: сброс → вход временным паролем → принудительная форма смены (и у ученика, и у админа) → флаг снят; тест на генерацию пароля. + - **Миграция email-шаблонов на React Email 6 + Resend CLI 2.0** (Resend Launch Week 6, 24.04.2026): - React Email 6: новые шаблоны для auth и ecommerce flows (welcome, password reset, purchase confirmation, course progress) — можно взять за основу вместо своих - Resend CLI 2.0: локальный preview и тестирование шаблонов (`resend send --local ...`), 50+ команд