21a9d1c9b780cf5f7c43f7949a6541008d4f6239
The integrity attribute in base.html did not match the actual file served by jsdelivr, causing browsers to block the Bootstrap stylesheet. This broke the login page layout (labels and inputs shifted, controls not full width).
InviteMe
Production-система регистрации гостей, рассылки приглашений, выпуска QR-билетов и контроля входа на мероприятия.
Возможности
- Мероприятия и ролевая модель: администратор, организатор и сотрудник на входе.
- Импорт гостей из
.xlsx, закрытое хранение фотографий и генерация QR-кодов. - Фоновая рассылка через SMTP, EWS или локальный Outlook с индивидуальными статусами доставки.
- Персональная страница приглашения: RSVP, комментарий, особенности питания, билет и календарь
.ics. - Сканирование на входе, отчёты о посещаемости и журнал аудита.
- PostgreSQL, общие лимиты запросов через Redis, автоматический HTTPS и миграции базы.
Запуск в production
Нужны Linux-сервер с Docker Compose, домен, направленный на сервер, и открытые входящие порты 80/443.
git clone https://git.mycloud24.ru/insight/InviteMe.git
cd InviteMe
cp .env.example .env
# Заполните DOMAIN и сгенерируйте три секрета в .env.
docker compose up -d --build
docker compose exec inviteme flask --app run.py create-admin
Caddy автоматически получает и продлевает TLS-сертификат. Контейнер приложения напрямую наружу не публикуется.
Полная инструкция по установке, резервному копированию и обновлению: docs/PRODUCTION.md.
Локальная разработка
python -m venv venv
venv/bin/pip install -r requirements-dev.txt
venv/bin/python run.py
На Windows замените venv/bin/ на venv\Scripts\. Локальный режим использует SQLite и разрешает создание первого администратора через веб-страницу.
Безопасность
- Production не запускается без уникальных секретов и обязательных безопасных настроек.
- Фотографии, QR-коды, билеты и отчёты находятся вне
staticи выдаются только после проверки доступа. - Организатор видит только собственные мероприятия, а сотрудник на входе — только назначенные ему.
- Двойная отметка входа блокируется базой, ошибочный вход отменяется с обязательной записью в аудит.
- Изображения ограничиваются по размеру, декодируются, проверяются и сохраняются заново. SVG и анимация запрещены.
- Почтовые пароли шифруются перед записью в базу.
- Включены CSRF, защищённые cookies, HTTPS, security headers и лимиты запросов через Redis.
- Контейнер работает без root, с файловой системой только для чтения и без Linux capabilities.
Проверка
python -m pytest -q
pip-audit -r requirements.txt
Структура
app/ Flask-приложение
instance/uploads/ закрытые файлы в локальном режиме
migrations/ миграции Alembic
tests/ регрессионные тесты безопасности
docs/PRODUCTION.md инструкция по эксплуатации
Лицензия
Открытая лицензия не предоставляется. Исходный код предназначен только для разрешённого правообладателем использования.
Description
Languages
Python
64.3%
HTML
29.6%
JavaScript
5.6%
Dockerfile
0.3%
Mako
0.2%