Major changes:
- Add auth-svc: JWT auth, register/login/refresh, password reset
- Add auth UI: modals, pages (/login, /register, /forgot-password)
- Add usage tracking (usage_metrics table, daily limits)
- Add tiered rate limiting (free/pro/business)
- Add LLM usage limits per tier
Security fixes:
- All repos now require userID for Update/Delete operations
- JWT middleware in chat-svc, llm-svc, agent-svc, discover-svc
- ErrNotFound/ErrForbidden errors for proper access control
Cleanup:
- Remove legacy TypeScript services/ directory
- Remove computer-svc (to be reimplemented)
- Remove old deploy/docker configs
New files:
- backend/cmd/auth-svc/main.go
- backend/internal/auth/{types,repository}.go
- backend/internal/usage/{types,repository}.go
- backend/pkg/middleware/{llm_limits,ratelimit_tiered}.go
- backend/webui/src/components/auth/*
- backend/webui/src/app/(auth)/*
Made-with: Cursor
145 lines
5.9 KiB
Markdown
145 lines
5.9 KiB
Markdown
# Недоделки — начать отсюда
|
||
|
||
## Последнее изменение (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
|