Документация Discours.io API
🚀 Быстрый старт
Запуск локально
# Стандартный запуск
python main.py
# С HTTPS (требует mkcert)
python dev.py
📚 Документация
Авторизация и безопасность
- Система авторизации - Токены, сессии, OAuth
- Архитектура - Диаграммы и схемы
- Миграция - Переход на новую версию
- Безопасность - Пароли, email, RBAC
- Система RBAC - Роли, разрешения, топики
- OAuth - Google, GitHub, Facebook, X, Telegram, VK, Yandex
- OAuth настройка - Инструкции по настройке OAuth провайдеров
Функциональность
Администрирование
- Админ-панель: Управление пользователями, ролями, переменными среды
- Управление публикациями: Просмотр, поиск, фильтрация по статусу (опубликованные/черновики/удаленные)
- Управление топиками: Упрощенное редактирование топиков с иерархическим отображением
- Клик по строке: Модалка редактирования открывается при клике на строку таблицы
- Ненавязчивый крестик: Серая кнопка "×" для удаления, краснеет при hover
- Простой HTML редактор: Обычный contenteditable div с моноширинным шрифтом
- Редактируемые поля: ID (просмотр), название, slug, описание, сообщество, родители
- Дерево топиков: Визуализация родительско-дочерних связей с отступами и символами
└─
- Безопасное удаление: Предупреждения о каскадном удалении дочерних топиков
- Автообновление: Рефреш списка после операций с корректной инвалидацией кешей
- Просмотр данных: Body, media, авторы, темы с удобной навигацией
- DRY принцип: Переиспользование существующих резолверов из reader.py и editor.py
API и инфраструктура
⚡ Ключевые возможности
Авторизация
- Модульная архитектура: SessionTokenManager, VerificationTokenManager, OAuthTokenManager
- OAuth провайдеры: 7 поддерживаемых провайдеров с PKCE
- RBAC: Система ролей reader/author/artist/expert/editor/admin с наследованием
- Права на топики: Специальные разрешения для создания, редактирования и слияния топиков
- Производительность: 50% ускорение Redis, 30% меньше памяти
Nginx (упрощенная конфигурация)
- KISS принцип: ~60 строк вместо сложной конфигурации
- Dokku дефолты: Максимальное использование встроенных настроек
- SSL/TLS: TLS 1.2/1.3, HSTS, OCSP stapling
- Статические файлы: Кэширование на 1 год, gzip сжатие
- Безопасность: X-Frame-Options, X-Content-Type-Options
Реакции и комментарии
- Иерархические комментарии с эффективной пагинацией
- Физическое/логическое удаление (рейтинги/комментарии)
- Автоматический featured статус на основе лайков
- Distinct() оптимизация для JOIN запросов
Производительность
- Redis pipeline операции для пакетных запросов
- Автоматическая очистка истекших токенов
- Connection pooling и keepalive
- Type-safe codebase (mypy clean)
- Оптимизированная сортировка авторов с кешированием по параметрам
🔧 Конфигурация
# JWT
JWT_SECRET_KEY = "your-secret-key"
JWT_EXPIRATION_HOURS = 720 # 30 дней
# Redis
REDIS_URL = "redis://localhost:6379/0"
# OAuth (необходимые провайдеры)
OAUTH_CLIENTS_GOOGLE_ID = "..."
OAUTH_CLIENTS_GITHUB_ID = "..."
# ... другие провайдеры
🛠 Использование API
# Сессии
from auth.tokens.sessions import SessionTokenManager
sessions = SessionTokenManager()
token = await sessions.create_session(user_id, username=username)
# Мониторинг
from auth.tokens.monitoring import TokenMonitoring
monitoring = TokenMonitoring()
stats = await monitoring.get_token_statistics()