
Motor Rails montável que fornece mais de 24 cenários de escape room em cibersegurança com senhas aleatórias, diálogo de NPC compilado em JIT e API RESTful para gerenciamento de estado do jogo. Projetado para treinamento prático de segurança.
Jogo de sala de fuga de treinamento em cibersegurança como um Rails Engine montável.
No seu Gemfile:
gem 'break_escape', path: 'path/to/break_escape'
Então:
bundle install
rails break_escape:install:migrations
rails db:migrate
rails db:seed # Opcional: cria missões a partir de cenários
No seu config/routes.rb:
mount BreakEscape::Engine => "/break_escape"
export BREAK_ESCAPE_STANDALONE=true
rails server
# Visite http://localhost:3000/break_escape/
Monte no Hacktivity ou em outro aplicativo Rails. O motor usará o current_user do aplicativo hospedeiro via Devise.
# config/initializers/break_escape.rb
BreakEscape.configure do |config|
config.standalone_mode = false # true para desenvolvimento
config.demo_user_handle = 'demo_player'
end
break_escape_missions - Metadados do cenário (name, display_name, published, difficulty)break_escape_games - Estado do jogador + snapshot do cenário (JSONB)break_escape_demo_users - Apenas modo autônomo (opcional)GET /games/:id/scenario - JSON do cenário (gerado por ERB)GET /games/:id/ink?npc=X - Script do NPC (compilado JIT a partir de .ink)GET /games/:id/bootstrap - Dados iniciais do jogoPUT /games/:id/sync_state - Sincronizar estado do jogadorPOST /games/:id/unlock - Validar tentativa de desbloqueioPOST /games/:id/inventory - Atualizar inventárioOs cenários são armazenados como templates .json.erb e renderizados sob demanda com valores aleatórios:
<%= random_password %> - Gera senha única por jogo<%= random_pin %> - Gera PIN único de 4 dígitos<%= random_code %> - Gera código hex únicoScripts de diálogo de NPCs compilam na primeira requisição (~300ms):
.json existe e é mais novo que .inkinklecate para compilarEstado do jogador armazenado na coluna JSONB:
Os testes são executados automaticamente no GitHub Actions. O Gemfile.lock commitado fixa as versões exatas das gems utilizadas.
bundle install
bundle exec rails db:create db:migrate RAILS_ENV=test
bundle exec rails test
O motor vem com um script bin/setup que inicializa o bundle a partir de um checkout irmão do Hacktivity (que já possui todas as gems necessárias empacotadas):
# Da raiz do BreakEscape — Hacktivity deve estar em ../Hacktivity
bin/setup
bundle exec rails test
# Se Hacktivity estiver em outro local, defina HACKTIVITY_DIR:
HACKTIVITY_DIR=/path/to/Hacktivity bin/setup
bin/setup copia os arquivos .gem resolvidos para vendor/cache/ e executa bundle install --local. Os diretórios vendor/cache/ e vendor/bundle/ estão no .gitignore; apenas Gemfile.lock é commitado.
Consulte HACKTIVITY_INTEGRATION.md para o guia de integração.
Muitos agradecimentos a todos que contribuíram para o projeto. Consulte o histórico no GitHub.