
Монтируемый движок на Rails, предоставляющий 24+ сценариев кибербезопасных квест-комнат со случайными паролями, JIT-скомпилированными диалогами NPC и RESTful API для управления состоянием игры. Разработан для практического обучения безопасности.
Обучающая кибербезопасности игра в жанре escape room в виде подключаемого Rails Engine.
В вашем Gemfile:
gem 'break_escape', path: 'path/to/break_escape'
Затем:
bundle install
rails break_escape:install:migrations
rails db:migrate
rails db:seed # Опционально: создаёт миссии из сценариев
В вашем config/routes.rb:
mount BreakEscape::Engine => "/break_escape"
export BREAK_ESCAPE_STANDALONE=true
rails server
# Перейдите на http://localhost:3000/break_escape/
Монтируется в Hacktivity или другое Rails-приложение. Движок будет использовать current_user хост-приложения через Devise.
# config/initializers/break_escape.rb
BreakEscape.configure do |config|
config.standalone_mode = false # true для разработки
config.demo_user_handle = 'demo_player'
end
break_escape_missions — метаданные сценария (name, display_name, published, difficulty)break_escape_games — состояние игрока + снимок сценария (JSONB)break_escape_demo_users — только для автономного режима (опционально)GET /games/:id/scenario — JSON сценария (сгенерирован ERB)GET /games/:id/ink?npc=X — скрипт NPC (JIT-компилирован из .ink)GET /games/:id/bootstrap — начальные данные игрыPUT /games/:id/sync_state — синхронизация состояния игрокаPOST /games/:id/unlock — проверка попытки разблокировкиPOST /games/:id/inventory — обновление инвентаряСценарии хранятся как шаблоны .json.erb и рендерятся по запросу со случайными значениями:
<%= random_password %> — генерирует уникальный пароль для каждой игры<%= random_pin %> — генерирует уникальный 4-значный PIN<%= random_code %> — генерирует уникальный шестнадцатеричный кодСкрипты диалогов NPC компилируются при первом запросе (~300мс):
.json и новее ли он, чем .inkinklecate для компиляцииСостояние игрока хранится в колонке JSONB:
Тесты запускаются автоматически на GitHub Actions. Зафиксированный Gemfile.lock фиксирует точные версии используемых гемов.
bundle install
bundle exec rails db:create db:migrate RAILS_ENV=test
bundle exec rails test
Движок поставляется со скриптом bin/setup, который настраивает bundle из соседнего репозитория Hacktivity (который уже содержит все необходимые гемы в vendor):
# Из корня BreakEscape — Hacktivity должен находиться в ../Hacktivity
bin/setup
bundle exec rails test
# Если Hacktivity в другом месте, установите HACKTIVITY_DIR:
HACKTIVITY_DIR=/path/to/Hacktivity bin/setup
bin/setup копирует разрешенные .gem файлы в vendor/cache/ и запускает bundle install --local. Директории vendor/cache/ и vendor/bundle/ игнорируются git; фиксируется только Gemfile.lock.
Смотрите HACKTIVITY_INTEGRATION.md для руководства по интеграции.
Большое спасибо всем, кто внес вклад в проект. Обратитесь к истории GitHub.