Files
telepost/plans/phase1_plan.md
2026-01-18 21:01:43 +03:00

117 lines
5.6 KiB
Markdown
Raw Permalink 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.
# План реализации первого этапа MVP TelePost Clone
## Цель первого этапа
Реализовать базовую аутентификацию и структуру приложения, включая:
1. Аутентификацию через Telegram Login Widget
2. Создание основной структуры проекта
3. Реализацию модели пользователя
4. Маршрут для входа через Telegram
5. Проверку аутентичности данных от Telegram
6. Генерацию JWT-токена
## Структура проекта
```
telepost-clone/
├── backend/ # FastAPI приложение
│ ├── app/
│ │ ├── api/ # API маршруты
│ │ ├── models/ # ORM модели
│ │ ├── schemas/ # Pydantic схемы
│ │ ├── services/ # Бизнес-логика
│ │ ├── database/ # Настройки базы данных
│ │ ├── auth/ # Аутентификация
│ │ ├── integrations/ # Интеграции с внешними сервисами
│ │ └── utils/ # Утилиты
│ ├── migrations/ # Миграции базы данных
│ ├── tests/ # Тесты
│ └── requirements.txt # Зависимости
├── frontend/ # SvelteKit приложение
│ ├── src/
│ │ ├── routes/ # Страницы
│ │ ├── components/ # Компоненты
│ │ ├── lib/ # Библиотеки
│ │ ├── stores/ # Svelte stores
│ │ └── app.html # Базовый шаблон
│ ├── static/ # Статические файлы
│ └── package.json # Зависимости
├── docs/ # Документация
└── docker-compose.yml # Оркестрация
```
## Необходимые файлы для реализации первого этапа
### Backend
#### 1. Зависимости
- `backend/requirements.txt`
#### 2. Конфигурация базы данных
- `backend/app/database/database.py`
- `backend/app/database/config.py`
#### 3. Модели
- `backend/app/models/user.py`
- `backend/app/models/base.py`
#### 4. Схемы (Pydantic)
- `backend/app/schemas/user.py`
- `backend/app/schemas/token.py`
#### 5. Аутентификация
- `backend/app/auth/telegram_auth.py` - реализация аутентификации через Telegram
- `backend/app/auth/jwt.py` - работа с JWT токенами
- `backend/app/auth/utils.py` - вспомогательные функции аутентификации
#### 6. API маршруты
- `backend/app/api/v1/endpoints/auth.py` - маршруты аутентификации
- `backend/app/api/v1/routers.py` - регистрация роутеров
#### 7. Утилиты
- `backend/app/utils/security.py` - функции безопасности
- `backend/app/utils/telegram.py` - вспомогательные функции для работы с Telegram API
#### 8. Основной файл приложения
- `backend/main.py`
### Frontend
Для первого этапа фронтенд будет минимальным:
- `frontend/package.json`
- `frontend/src/routes/login/+page.svelte` - страница входа с Telegram widget
- `frontend/src/lib/stores/auth.js` - store для аутентификации
## Реализация аутентификации через Telegram
### Шаги аутентификации:
1. Пользователь нажимает кнопку "Войти через Telegram"
2. Используется Telegram Login Widget для получения данных пользователя
3. Данные отправляются на сервер для проверки аутентичности
4. Сервер проверяет подлинность данных с помощью хэша
5. При успешной проверке создается/обновляется пользователь в базе
6. Генерируется JWT-токен
7. Токен возвращается клиенту
### Проверка аутентичности данных от Telegram:
1. Telegram передает параметры: id, first_name, last_name, username, photo_url, auth_date, hash
2. Необходимо проверить hash, чтобы убедиться, что данные действительно от Telegram
3. Для этого:
- Собрать все параметры кроме hash в алфавитном порядке
- Объединить их в строку в формате "key=value" с новыми строками между парами
- Вычислить SHA256 хэш от токена бота
- Использовать этот хэш как ключ для HMAC-SHA256 подписи строки параметров
- Преобразовать результат в шестнадцатеричную строку
- Сравнить полученный хэш с тем, что прислал Telegram
## Требуемые зависимости
```txt
fastapi==0.104.1
uvicorn==0.24.0
sqlalchemy==2.0.23
alembic==1.13.1
psycopg2-binary==2.9.9
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
python-multipart==0.0.6
requests==2.31.0
pydantic==2.5.0
pydantic-settings==2.1.0
redis==5.0.1
cachetools==5.3.2