mirror of
https://gitverse.ru/kpa39l/telepost.git
synced 2026-09-29 18:05:08 +00:00
5.6 KiB
5.6 KiB
План реализации первого этапа MVP TelePost Clone
Цель первого этапа
Реализовать базовую аутентификацию и структуру приложения, включая:
- Аутентификацию через Telegram Login Widget
- Создание основной структуры проекта
- Реализацию модели пользователя
- Маршрут для входа через Telegram
- Проверку аутентичности данных от Telegram
- Генерацию 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.pybackend/app/database/config.py
3. Модели
backend/app/models/user.pybackend/app/models/base.py
4. Схемы (Pydantic)
backend/app/schemas/user.pybackend/app/schemas/token.py
5. Аутентификация
backend/app/auth/telegram_auth.py- реализация аутентификации через Telegrambackend/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.jsonfrontend/src/routes/login/+page.svelte- страница входа с Telegram widgetfrontend/src/lib/stores/auth.js- store для аутентификации
Реализация аутентификации через Telegram
Шаги аутентификации:
- Пользователь нажимает кнопку "Войти через Telegram"
- Используется Telegram Login Widget для получения данных пользователя
- Данные отправляются на сервер для проверки аутентичности
- Сервер проверяет подлинность данных с помощью хэша
- При успешной проверке создается/обновляется пользователь в базе
- Генерируется JWT-токен
- Токен возвращается клиенту
Проверка аутентичности данных от Telegram:
- Telegram передает параметры: id, first_name, last_name, username, photo_url, auth_date, hash
- Необходимо проверить hash, чтобы убедиться, что данные действительно от Telegram
- Для этого:
- Собрать все параметры кроме hash в алфавитном порядке
- Объединить их в строку в формате "key=value" с новыми строками между парами
- Вычислить SHA256 хэш от токена бота
- Использовать этот хэш как ключ для HMAC-SHA256 подписи строки параметров
- Преобразовать результат в шестнадцатеричную строку
- Сравнить полученный хэш с тем, что прислал Telegram
Требуемые зависимости
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