
마운트 가능한 Rails 엔진으로, 24개 이상의 사이버보안 이스케이프 룸 시나리오를 제공하며, 무작위화된 비밀번호, JIT 컴파일된 NPC 대화, 게임 상태 관리를 위한 RESTful API를 포함합니다. 실습형 보안 교육을 위해 설계되었습니다.
사이버보안 훈련용 탈출 게임으로, 마운트 가능한 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 앱에 마운트하세요. 엔진은 Devise를 통해 호스트 앱의 current_user를 사용합니다.
# 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 - Standalone 모드 전용 (선택 사항)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 %> - 게임당 고유 16진수 코드 생성NPC 대화 스크립트는 첫 요청 시 컴파일됩니다 (~300ms):
.json 파일이 존재하고 .ink보다 최신인지 확인inklecate를 실행하여 컴파일플레이어 상태는 JSONB 컬럼에 저장:
테스트는 GitHub Actions에서 자동으로 실행됩니다. 커밋된 Gemfile.lock은 정확한 gem 버전을 고정합니다.
bundle install
bundle exec rails db:create db:migrate RAILS_ENV=test
bundle exec rails test
엔진에는 bin/setup 스크립트가 포함되어 있으며, 형제 디렉토리인 Hacktivity 체크아웃(필요한 모든 gem이 이미 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/ 디렉토리는 gitignore에 포함되며, Gemfile.lock만 커밋됩니다.
통합 가이드는 HACKTIVITY_INTEGRATION.md를 참조하세요.
프로젝트에 기여해 주신 모든 분들께 감사드립니다. GitHub history를 참조하세요.