# Недоделки — начать отсюда ## Последнее изменение (28.02.2026) **Создан полный UI для авторизации:** - Модальные окна login/register - Страницы /login, /register, /forgot-password, /reset-password - UserMenu в сайдбаре - AuthContext для управления состоянием ## Сделано (полностью) ### 1. Auth UI (NEW) **Новые файлы:** **API клиент:** - `backend/webui/src/lib/auth.ts` — функции для работы с auth API, хранение токенов **Контекст:** - `backend/webui/src/lib/contexts/AuthContext.tsx` — React контекст для auth состояния **Компоненты:** - `backend/webui/src/components/auth/AuthModal.tsx` — модальное окно - `backend/webui/src/components/auth/LoginForm.tsx` — форма входа - `backend/webui/src/components/auth/RegisterForm.tsx` — форма регистрации - `backend/webui/src/components/auth/ForgotPasswordForm.tsx` — сброс пароля - `backend/webui/src/components/auth/UserMenu.tsx` — меню пользователя - `backend/webui/src/components/auth/index.ts` — экспорты **Страницы:** - `backend/webui/src/app/(auth)/login/page.tsx` - `backend/webui/src/app/(auth)/register/page.tsx` - `backend/webui/src/app/(auth)/forgot-password/page.tsx` - `backend/webui/src/app/(auth)/reset-password/page.tsx` - `backend/webui/src/app/(auth)/layout.tsx` **Интеграция:** - `providers.tsx` — добавлен AuthProvider и AuthModal - `Sidebar.tsx` — кнопки входа/регистрации для гостей, профиль для авторизованных **Функционал:** - Модальные окна для быстрого входа без перехода на страницу - Отдельные страницы для полноценного входа - Валидация паролей в реальном времени - Показ/скрытие пароля - Запоминание пользователя - Сброс пароля по email - Автоматический refresh токенов - Отображение tier (Free/Pro/Business) ### 2. Auth Service (Backend) **Файлы:** - `backend/internal/auth/types.go` - `backend/internal/auth/repository.go` - `backend/cmd/auth-svc/main.go` **Эндпоинты:** | Method | Path | Описание | |--------|------|----------| | POST | `/api/v1/auth/register` | Регистрация | | POST | `/api/v1/auth/login` | Вход | | POST | `/api/v1/auth/refresh` | Обновление токена | | POST | `/api/v1/auth/logout` | Выход | | POST | `/api/v1/auth/logout-all` | Выход со всех устройств | | GET | `/api/v1/auth/validate` | Валидация токена | | GET | `/api/v1/auth/me` | Профиль | | PUT | `/api/v1/auth/me` | Обновить профиль | | POST | `/api/v1/auth/change-password` | Смена пароля | | POST | `/api/v1/auth/forgot-password` | Запрос сброса | | POST | `/api/v1/auth/reset-password` | Сброс пароля | ### 3. Ранее — Аудит безопасности - Репозитории с фильтрацией по user_id - JWT middleware во всех сервисах - Tiered rate limiting (free/pro/business) - Usage tracking - LLM limits ## Осталось сделать ### Высокий приоритет: 1. **Проверить компиляцию** — `cd backend && go build ./...` 2. **Протестировать auth flow** — регистрация → логин → refresh → logout 3. **Добавить billing-svc** — интеграция с ЮKassa ### Средний приоритет: 4. **OAuth провайдеры** — Google, GitHub, Yandex 5. **Email уведомления** — подтверждение email, сброс пароля 6. **Страница настроек профиля** — редактирование name, avatar 7. **Страница подписки** — /settings/billing с выбором тарифа ### Низкий приоритет: 8. **2FA** — TOTP аутентификация 9. **Session management** — список активных сессий 10. **Account deletion** — удаление аккаунта ## Контекст ### Новые файлы UI: ``` backend/webui/src/ ├── lib/ │ ├── auth.ts (NEW) │ └── contexts/ │ └── AuthContext.tsx (NEW) ├── components/ │ └── auth/ │ ├── AuthModal.tsx (NEW) │ ├── LoginForm.tsx (NEW) │ ├── RegisterForm.tsx (NEW) │ ├── ForgotPasswordForm.tsx (NEW) │ ├── UserMenu.tsx (NEW) │ └── index.ts (NEW) └── app/ └── (auth)/ ├── layout.tsx (NEW) ├── login/page.tsx (NEW) ├── register/page.tsx (NEW) ├── forgot-password/page.tsx (NEW) └── reset-password/page.tsx (NEW) ``` ### Обновлённые файлы: ``` backend/webui/src/app/providers.tsx — AuthProvider + AuthModal backend/webui/src/components/Sidebar.tsx — кнопки auth + профиль ``` ### Хранение токенов: ``` localStorage: - token: JWT access token - refreshToken: refresh token - user: JSON с данными пользователя ``` ### Auth flow: 1. Гость видит кнопки "Войти" / "Регистрация" в сайдбаре 2. Клик открывает модальное окно (или переход на страницу) 3. После успешного входа — сохранение токенов, обновление UI 4. При истечении access token — автоматический refresh 5. При logout — очистка localStorage