
Moteur Rails montable proposant plus de 24 scénarios d'escape room de cybersécurité avec mots de passe randomisés, dialogues NPC compilés JIT et une API RESTful pour la gestion de l'état du jeu. Conçu pour une formation pratique en sécurité.
Jeu d'évasion d'entraînement en cybersécurité sous forme de moteur Rails montable.
Dans votre Gemfile :
gem 'break_escape', path: 'path/to/break_escape'
Ensuite :
bundle install
rails break_escape:install:migrations
rails db:migrate
rails db:seed # Optional: creates missions from scenarios
Dans votre config/routes.rb :
mount BreakEscape::Engine => "/break_escape"
export BREAK_ESCAPE_STANDALONE=true
rails server
# Visit http://localhost:3000/break_escape/
Montez dans Hacktivity ou une autre application Rails. Le moteur utilisera l'current_user de l'application hôte 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 - Métadonnées du scénario (nom, display_name, publié, difficulté)break_escape_games - État du joueur + instantané du scénario (JSONB)break_escape_demo_users - Mode autonome uniquement (optionnel)GET /games/:id/scenario - JSON du scénario (généré par ERB)GET /games/:id/ink?npc=X - Script PNJ (compilé JIT à partir de .ink)GET /games/:id/bootstrap - Données initiales du jeuPUT /games/:id/sync_state - Synchroniser l'état du joueurPOST /games/:id/unlock - Valider la tentative de déverrouillagePOST /games/:id/inventory - Mettre à jour l'inventaireLes scénarios sont stockés sous forme de modèles .json.erb et rendus à la demande avec des valeurs aléatoires :
<%= random_password %> - Génère un mot de passe unique par partie<%= random_pin %> - Génère un code PIN unique à 4 chiffres<%= random_code %> - Génère un code hexadécimal uniqueLes scripts de dialogue PNJ se compilent lors de la première requête (~300 ms) :
.json existe et est plus récent que .inkinklecate pour compilerÉtat du joueur stocké dans une colonne JSONB :
Les tests s'exécutent automatiquement sur GitHub Actions. Le Gemfile.lock commit fixe les versions exactes des gems utilisées.
bundle install
bundle exec rails db:create db:migrate RAILS_ENV=test
bundle exec rails test
Le moteur est livré avec un script bin/setup qui amorce le bundle à partir d'un checkout frère de Hacktivity (qui contient déjà toutes les gems requises) :
# 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 copie les fichiers .gem résolus dans vendor/cache/ et exécute bundle install --local. Les répertoires vendor/cache/ et vendor/bundle/ sont gitignorés ; seul Gemfile.lock est commit.
Voir HACKTIVITY_INTEGRATION.md pour le guide d'intégration.
Un grand merci à tous ceux qui ont contribué au projet. Veuillez vous référer à l'historique GitHub.