Skip to content

feat: Add 'Rebels in the sky' as a proxied game#345

Merged
mpiorowski merged 19 commits into
mpiorowski:mainfrom
ricott1:rebels-in-the-sky
Jun 16, 2026
Merged

feat: Add 'Rebels in the sky' as a proxied game#345
mpiorowski merged 19 commits into
mpiorowski:mainfrom
ricott1:rebels-in-the-sky

Conversation

@ricott1

@ricott1 ricott1 commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds Rebels in the Sky as a late.sh door game. late.sh opens an outbound SSH
connection to the standalone rebels server (frittura.org:3788, configurable), runs the remote terminal stream through an embedded vt100 emulator, and renders it as a ratatui widget in its own page (tab 7).

We preserve the top bar so it looks like we're still in late.sh, because of this we need the vt100 emulator rather than just copy/pasting raw bytes into the buffer.

How it works

  • Outbound proxy (app/door/rebels/proxy.rs): a per-session russh client connects to the rebels server, requests a PTY + shell, and bridges bytes both ways.
  • Identity (identity.rs): a stable per-account (username, Ed25519 key) is derived from the late.sh user_id with blake3 and used for publickey auth, so the same account always maps to the same rebels save.
  • Embedded rendering (render.rs): remote output feeds a vt100::Parser, blitted into the widget each frame; the proxy reader wakes the session's RenderSignal on new output for prompt repaints.
  • Input: while the game is running, all keys and mouse events forward raw to rebels. Exit by quitting rebels (Esc then confirm, or Ctrl-C); any disconnect returns to the Launcher.

Configuration

LATE_REBELS_ENABLED (default on), LATE_REBELS_HOST (frittura.org),
LATE_REBELS_PORT (3788), LATE_REBELS_SECRET (seeds the derived identity).
When disabled, the page shows "Currently unavailable", another option would be to not display the page at all but I thought that it would get messy if we add more pages later.

Dependencies & testing

  • New deps: vt100 and blake3.
  • Unit tests: identity derivation, vt100-to-Buffer blitter, mouse-offset clipping. Integration (tests/rebels_proxy.rs): stub russh server covering connect -> PTY -> shell -> output round-trip and disconnect-to-Launcher.

@ricott1 ricott1 requested a review from mpiorowski as a code owner June 14, 2026 20:48
Resolve conflicts from upstream's DoorGames -> Lateania rename and its
lazy-load refactor, while preserving the Rebels door game:

- primitives.rs: keep both Lateania (upstream) and Rebels Screen variants
  plus their tab labels; next/prev auto-merged correctly.
- render.rs: Lateania => page 4 (upstream), Rebels => 0 (no sidebar slot);
  keep Rebels page title.
- state.rs: adopt upstream's lazy Lateania entry (drop eager enter_lateania
  in set_screen), keep enter_rebels on reselect/switch and leave_rebels.
- input.rs: keep the Rebels launcher block, take upstream's Lateania input
  handling and door_games_allows_global_help; drop now-unused
  door_games_allows_global_navigation.
- ssh.rs: keep both the RenderSignal and arcade-preload imports.
@gitguardian

gitguardian Bot commented Jun 15, 2026

Copy link
Copy Markdown

⚠️ GitGuardian has uncovered 1 secret following the scan of your pull request.

Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.

Since your pull request originates from a forked repository, GitGuardian is not able to associate the secrets uncovered with secret incidents on your GitGuardian dashboard.
Skipping this check run and merging your pull request will create secret incidents on your GitGuardian dashboard.

🔎 Detected hardcoded secret in your pull request
GitGuardian id GitGuardian status Secret Commit Filename
15149220 Triggered Generic Password 090ced9 late-core/src/test_utils.rs View secret
🛠 Guidelines to remediate hardcoded secrets
  1. Understand the implications of revoking this secret by investigating where it is used in your code.
  2. Replace and store your secret safely. Learn here the best practices.
  3. Revoke and rotate this secret.
  4. If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.

To avoid such incidents in the future consider


🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

@mpiorowski mpiorowski merged commit a36698e into mpiorowski:main Jun 16, 2026
1 check failed
@mpiorowski

Copy link
Copy Markdown
Owner

GOAT

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants