
Motor Rails montable que proporciona más de 24 escenarios de sala de escape de ciberseguridad con contraseñas aleatorias, diálogo de NPC compilado JIT y API RESTful para la gestión del estado del juego. Diseñado para la formación práctica en seguridad.
Juego de sala de escape de entrenamiento en ciberseguridad como un motor de Rails montable.
En tu Gemfile:
gem 'break_escape', path: 'path/to/break_escape'
Luego:
bundle install
rails break_escape:install:migrations
rails db:migrate
rails db:seed # Opcional: crea misiones a partir de los escenarios
En tu config/routes.rb:
mount BreakEscape::Engine => "/break_escape"
export BREAK_ESCAPE_STANDALONE=true
rails server
# Visita http://localhost:3000/break_escape/
Monta en Hacktivity u otra aplicación Rails. El motor usará current_user de la aplicación anfitriona a través de Devise.
# config/initializers/break_escape.rb
BreakEscape.configure do |config|
config.standalone_mode = false # true para desarrollo
config.demo_user_handle = 'demo_player'
end
break_escape_missions - Metadatos del escenario (name, display_name, published, difficulty)break_escape_games - Estado del jugador + instantánea del escenario (JSONB)break_escape_demo_users - Solo modo independiente (opcional)GET /games/:id/scenario - JSON del escenario (generado por ERB)GET /games/:id/ink?npc=X - Script de NPC (compilado JIT desde .ink)GET /games/:id/bootstrap - Datos iniciales del juegoPUT /games/:id/sync_state - Sincronizar estado del jugadorPOST /games/:id/unlock - Validar intento de desbloqueoPOST /games/:id/inventory - Actualizar inventarioLos escenarios se almacenan como plantillas .json.erb y se renderizan bajo demanda con valores aleatorios:
<%= random_password %> - Genera una contraseña única por juego<%= random_pin %> - Genera un PIN único de 4 dígitos<%= random_code %> - Genera un código hexadecimal únicoLos scripts de diálogo de NPC se compilan en la primera solicitud (~300ms):
.json y es más reciente que .inkinklecate para compilarEl estado del jugador se almacena en una columna JSONB:
Las pruebas se ejecutan automáticamente en GitHub Actions. El archivo Gemfile.lock comprometido fija las versiones exactas de las gemas utilizadas.
bundle install
bundle exec rails db:create db:migrate RAILS_ENV=test
bundle exec rails test
El motor incluye un script bin/setup que arranca el bundle desde un checkout hermano de Hacktivity (que ya tiene todas las gemas requeridas empaquetadas):
# Desde la raíz de BreakEscape — Hacktivity debe estar en ../Hacktivity
bin/setup
bundle exec rails test
# Si Hacktivity está en otro lugar, establece HACKTIVITY_DIR:
HACKTIVITY_DIR=/ruta/a/Hacktivity bin/setup
bin/setup copia los archivos .gem resueltos a vendor/cache/ y ejecuta bundle install --local. Los directorios vendor/cache/ y vendor/bundle/ están en gitignore; solo se compromete Gemfile.lock.
Consulta HACKTIVITY_INTEGRATION.md para la guía de integración.
Muchas gracias a todos los que han contribuido al proyecto. Consulta el historial de GitHub.