core/docs/README.md
Untone aeb53a7354
Some checks failed
Deploy on push / type-check (push) Failing after 7s
Deploy on push / deploy (push) Has been skipped
nginx-simpler
2025-06-03 00:50:39 +03:00

3.7 KiB
Raw Blame History

Документация Discours.io API

🚀 Быстрый старт

Запуск локально

# Стандартный запуск
python main.py

# С HTTPS (требует mkcert)
python run.py --https --workers 4

📚 Документация

Авторизация и безопасность

Функциональность

API и инфраструктура

Ключевые возможности (v0.5.4)

Авторизация

  • Модульная архитектура: SessionTokenManager, VerificationTokenManager, OAuthTokenManager
  • OAuth провайдеры: 7 поддерживаемых провайдеров с PKCE
  • RBAC: user/moderator/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 (необходимые провайдеры)
GOOGLE_CLIENT_ID = "..."
GITHUB_CLIENT_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()