mirror of
https://gitverse.ru/kpa39l/telepost.git
synced 2026-09-29 09:55:09 +00:00
Initial commit
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
# План реализации первого этапа 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
|
||||
Reference in New Issue
Block a user