Files
gooseek/CONTINUE.md
home a0e3748dde feat: auth service + security audit fixes + cleanup legacy services
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
2026-02-28 01:33:49 +03:00

145 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Недоделки — начать отсюда
## Последнее изменение (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