feat: аккаунты по почте с подтверждением, сбросом пароля и синхронизацией прогресса
API аккаунтов на чистой стандартной библиотеке Python (server/splitapi): - регистрация по почте: пароль задаётся по ссылке из письма, аккаунт создаётся только после подтверждения - вход, выход, сброс пароля по почте (токены одноразовые, в базе только SHA-256), удаление аккаунта - пароли scrypt, лимиты попыток по паре «адрес + IP», IP и аккаунту, защита от CSRF - хранение прогресса пользователя с оптимистичной блокировкой версии - SMTP через переменные окружения; без SMTP на публичном адресе API не стартует Клиент: public/auth.js (вход, регистрация, сброс, синхронизация), public/sync.js (чистое слияние прогресса). Без API сайт работает как раньше. Развёртывание: Dockerfile.api, сервис splitapi в docker-compose, проксирование /api/ в nginx с ограничением частоты, deploy/install-api-debian.sh (systemd), .env.example. Тесты: 216 для бэкенда (unittest, покрытие около 97%), 16 для клиентского слияния. Документация: раздел «Аккаунты и почта» в docs/DEPLOY.md, раздел 9 в docs/ИНСТРУКЦИЯ.md.
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
# Образец настроек. Скопируйте в файл .env рядом с docker-compose.yml и измените под себя:
|
||||
# cp .env.example .env
|
||||
# Файл .env содержит пароль почтового сервиса: не добавляйте его в git (он уже в .gitignore).
|
||||
|
||||
# --- Сайт ---
|
||||
# Порт и адрес, на котором сайт слушает на сервере (по умолчанию только localhost: за обратным прокси)
|
||||
#BIND=127.0.0.1
|
||||
#PORT=8080
|
||||
|
||||
# Внешний адрес сайта, как его видят пользователи (из него строятся ссылки в письмах и проверяется Origin).
|
||||
# Если сайт открывается по подпути, укажите его: https://example.com/trainer
|
||||
PUBLIC_URL=http://127.0.0.1:8080
|
||||
|
||||
# --- Аккаунты ---
|
||||
# false закроет регистрацию новых пользователей (уже зарегистрированные продолжат входить)
|
||||
#ALLOW_REGISTRATION=true
|
||||
# Сколько дней действует вход на устройстве
|
||||
#SESSION_DAYS=30
|
||||
|
||||
# --- Почта (подтверждение регистрации и сброс пароля) ---
|
||||
# Пока SMTP_HOST не задан, письма не отправляются, а печатаются в лог контейнера splitapi.
|
||||
# Это только для проверки: на боевом сервере настройте SMTP.
|
||||
#SMTP_HOST=smtp.example.com
|
||||
#SMTP_PORT=587
|
||||
# starttls (порт 587), ssl (порт 465) или none (только для локального релея)
|
||||
#SMTP_SECURITY=starttls
|
||||
#SMTP_USER=noreply@example.com
|
||||
#SMTP_PASSWORD=
|
||||
# От чьего имени уходят письма (по умолчанию: noreply@домен-сайта)
|
||||
#MAIL_FROM=Сплит-тренер <noreply@example.com>
|
||||
Reference in New Issue
Block a user