Skip to content

grayhex/canno

Repository files navigation

🎯 Canno Quest

Веб-приложение для офлайн/ивент-квестов: участники проходят этапы по паролям и таймерам, а администратор и редактор управляют контентом через веб-панель.


✨ Текущие возможности

  • 🎨 Обновлённый компактный UI: фиксированная мини-навигация, glass-карточки, адаптивные формы и таблицы.

  • 🔐 Раздельные роли admin/editor с единым входом через /admin/login, сессия сохраняется в cookie до 8 часов (пока не выполнен logout).

  • 🧩 Единый экран /admin/quest/edit: список квестов (поиск/фильтр/сортировка), быстрые действия и редактор этапов.

  • 🚀 Запуск квеста по токену/ID (/play/<token>), отслеживание прогресса участника.

  • 🕒 Таймер этапа с предупреждением о малом времени.

  • 🛡️ Ограничение попыток входа и ввода паролей (rate-limit).

  • 📦 Импорт квестов из JSON, экспорт квестов в JSON и участников/аудита в CSV.

  • 🧾 Журнал аудита действий в админке.

  • 🏠 Техническая админка для главной: заголовок/описание, путь к логотипу и компактный переключатель показа логотипа.

  • 🌐 Опциональная поддержка английского контента (через app settings).

  • 🐳 Запуск в Docker Compose.


🏗️ Основные модули

  • app.py — запуск HTTP-сервера и инициализация приложения.
  • canno/http/handlers.py — роутинг, HTML-ответы, обработка форм, авторизация.
  • canno/services/quest_service.py — бизнес-логика и валидация данных.
  • canno/services/stores.py — сессии и хранилище попыток для rate-limit.
  • canno/repositories/db.py — репозиторий и миграции БД (SQLite/PostgreSQL).
  • canno/templates/html.py и static/ — UI-шаблон, стили и графические ассеты.

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

export CANNO_ADMIN_USER=admin
export CANNO_ADMIN_PASSWORD='change-me-please'
export CANNO_EDITOR_USER=editor
export CANNO_EDITOR_PASSWORD='change-me-editor'
python3 app.py

Для доступа с телефона в той же локальной сети открывайте http://<IP_КОМПЬЮТЕРА>:8000 (например http://192.168.1.15:8000).

Опционально можно задать хост/порт:

export CANNO_HTTP_HOST=0.0.0.0
export CANNO_HTTP_PORT=8000

🧪 Тесты

PYTHONPATH=. pytest -q

Дополнительные сценарии: docs/TESTING.md.

🌍 Деплой

Подробная инструкция по production-развёртыванию: docs/DEPLOY.md.

🧱 Архитектура проекта

Проект построен по слоям:

  • HTTP-слой (canno/http/handlers.py) — маршруты, формы, HTML/API-ответы, авторизация.
  • Сервисный слой (canno/services/quest_service.py) — бизнес-правила квеста, валидация, таймеры и переходы этапов.
  • Слой данных (canno/repositories/db.py, canno/repositories/sqlite_repo.py) — подключения, SQL-операции, миграции.
  • UI-слой (canno/templates/html.py, static/style.css) — разметка и стили интерфейса.
  • Точка входа (app.py) — инициализация конфигурации, репозитория, сервисов и запуск сервера.

About

Легкое веб-приложение для офлайн/ивент-квестов: участники получают уникальные ссылки, проходят этапы по паролям и таймерам, а админ управляет процессом из веб-панели.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages