
Mountable Rails-Engine, die 24+ Cybersicherheits-Escape-Room-Szenarien mit randomisierten Passwörtern, JIT-kompilierten NPC-Dialogen und einer RESTful-API zur Spielzustandsverwaltung bereitstellt. Entwickelt für praxisorientierte Sicherheitsschulungen.
Cybersecurity-Schulungs-Escape-Room-Spiel als einbindbare Rails Engine.
In Ihrer Gemfile:
gem 'break_escape', path: 'path/to/break_escape'
Dann:
bundle install
rails break_escape:install:migrations
rails db:migrate
rails db:seed # Optional: erstellt Missionen aus Szenarien
In Ihrer config/routes.rb:
mount BreakEscape::Engine => "/break_escape"
export BREAK_ESCAPE_STANDALONE=true
rails server
# Visit http://localhost:3000/break_escape/
Einbinden in Hacktivity oder eine andere Rails-App. Die Engine verwendet den current_user der Host-App via Devise.
# config/initializers/break_escape.rb
BreakEscape.configure do |config|
config.standalone_mode = false # true for development
config.demo_user_handle = 'demo_player'
end
break_escape_missions - Szenario-Metadaten (name, display_name, published, difficulty)break_escape_games - Spielerzustand + Szenario-Snapshot (JSONB)break_escape_demo_users - Nur Standalone-Modus (optional)GET /games/:id/scenario - Szenario-JSON (ERB-generiert)GET /games/:id/ink?npc=X - NPC-Skript (JIT-kompiliert aus .ink)GET /games/:id/bootstrap - Anfängliche SpieldatenPUT /games/:id/sync_state - Spielerzustand synchronisierenPOST /games/:id/unlock - Entsperrversuch validierenPOST /games/:id/inventory - Inventar aktualisierenSzenarien werden als .json.erb-Vorlagen gespeichert und bei Bedarf mit zufälligen Werten gerendert:
<%= random_password %> - Generiert eindeutiges Passwort pro Spiel<%= random_pin %> - Generiert eindeutige 4-stellige PIN<%= random_code %> - Generiert eindeutigen Hex-CodeNPC-Dialogskripte werden bei der ersten Anfrage kompiliert (~300ms):
.json existiert und neuer als .ink istinklecate ausführen, um zu kompilierenSpielerzustand in JSONB-Spalte gespeichert:
Tests werden automatisch auf GitHub Actions ausgeführt. Die bereitgestellte Gemfile.lock legt die genauen verwendeten Gem-Versionen fest.
bundle install
bundle exec rails db:create db:migrate RAILS_ENV=test
bundle exec rails test
Die Engine wird mit einem bin/setup-Skript ausgeliefert, das das Bundle aus einem benachbarten Hacktivity-Checkout (das bereits alle erforderlichen Gems gebündelt hat) einrichtet:
# From the BreakEscape root — Hacktivity must be at ../Hacktivity
bin/setup
bundle exec rails test
# If Hacktivity is elsewhere, set HACKTIVITY_DIR:
HACKTIVITY_DIR=/path/to/Hacktivity bin/setup
bin/setup kopiert die aufgelösten .gem-Dateien in vendor/cache/ und führt bundle install --local aus. Die Verzeichnisse vendor/cache/ und vendor/bundle/ sind in .gitignore; nur Gemfile.lock wird committet.
Siehe HACKTIVITY_INTEGRATION.md für die Integrationsanleitung.
Vielen Dank an alle, die zum Projekt beigetragen haben. Bitte beachten Sie die GitHub-Historie.