Skip to content

Split Apptainer/Podman into distinct Fileglancer apps; standard security vs. E2E HTTPS - #25

Merged
mkitti merged 3 commits into
mainfrom
refactor-fileglancer-security-tiers
Sep 10, 2026
Merged

mkitti merged 3 commits into
mainfrom
refactor-fileglancer-security-tiers

Conversation

@mkitti

@mkitti mkitti commented Sep 10, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Four distinct Fileglancer apps, not two: Apptainer and Podman are now separate app manifests for both Marimo and the Web Terminal, the same way the web terminal was already split out from Marimo. Podman is the default backend (keeps the existing top-level manifest paths, runnables.yaml / terminal/runnables.yaml); Apptainer moves to new sibling manifests (marimo-apptainer/runnables.yaml, terminal-apptainer/runnables.yaml).

    App Manifest Backend
    Marimo AI Sandbox (Podman) runnables.yaml Podman (default)
    Marimo AI Sandbox (Apptainer) marimo-apptainer/runnables.yaml Apptainer
    Web Terminal AI Sandbox (Podman) terminal/runnables.yaml Podman (default)
    Web Terminal AI Sandbox (Apptainer) terminal-apptainer/runnables.yaml Apptainer
  • Each app's manifest-level requirements: now matches its own backend ([pixi] for Podman apps, [apptainer, pixi] for Apptainer apps) instead of unconditionally requiring apptainer; the Podman-only --keep-id parameter only appears on Podman apps.

  • Lists the plain-per-job-token runnable first in every app (renamed away from "HTTP, testing" to just Fileglancer's standard security).

  • Renames the E2E runnables' name: field from "... HTTPS" to "... E2E HTTPS", and reframes their description: around end-to-end encryption to the compute node, recommending personal-certificate-authority for a trusted cert.

  • Adds service_proxy: false to all E2E runnables per fileglancer#445, so Fileglancer's own HTTPS-rewriting proxy doesn't silently undermine the end-to-end claim by terminating TLS at its own nginx instead of this job's Caddy.

  • Adds a standard-security tier to the Web Terminal apps (previously HTTPS-only): container/terminal-wrap.sh gains --no-tls, keeping Caddy in front of ttyd for the Basic Auth check but dropping the tls directive from its Caddyfile.

  • Shortens all app-level and per-runnable description: fields.

  • Updates README.md throughout (layout table, a new "Four Fileglancer apps" overview section, renamed HTTPS section, Web Terminal section -- including fixing a stale claim there that predated Stop exposing service tokens via process command-line arguments #23 about ttyd's own Basic Auth).

Builds on #22/#23/#24, already merged to main.

Test plan

  • bash -n on all modified shell scripts
  • All four runnables.yaml manifests validated against fileglancer's actual AppManifest/AppEntryPoint pydantic rules (requirements against SUPPORTED_TOOLS, service_proxy/auto_url/service_url_suffix constraints) -- confirmed by reading fileglancer/model.py directly, not just guessing the schema
  • pixi.toml parses as valid TOML
  • Stubbed the caddy binary and confirmed caddy_start/caddy_start --http produce the expected Caddyfile (TLS directive present/absent, basic_auth/reverse_proxy blocks identical otherwise)
  • End-to-end on a real Fileglancer job (Apptainer/Podman + Caddy) -- not feasible from this environment (wrong platform, no containers here)

🤖 Generated with Claude Code

mkitti and others added 2 commits September 10, 2026 17:37
…rypted

Lists the plain-per-job-token runnables first as the normal, standard-
security tier (renamed away from "HTTP, testing"), and reframes the TLS
runnables around end-to-end encryption to the compute node, recommending
personal-certificate-authority and opting out of Fileglancer's own
HTTPS-rewriting proxy (service_proxy: false, JaneliaSciComp/fileglancer#445)
so it doesn't undermine that claim.

Adds a standard-security tier to the Web Terminal app too (previously
HTTPS-only): container/terminal-wrap.sh gains --no-tls, which keeps Caddy
in front of ttyd for the Basic Auth check (per #23) but drops the TLS
directive from its Caddyfile.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…o E2E HTTPS

Marimo AI Sandbox and Web Terminal AI Sandbox each become two apps -- one
per backend -- instead of bundling both backends' runnables into a single
manifest, the same way the web terminal was already split out from Marimo.
Podman is the default backend, so it keeps the existing top-level manifest
path (runnables.yaml, terminal/runnables.yaml); Apptainer moves to a new
sibling manifest (marimo-apptainer/runnables.yaml,
terminal-apptainer/runnables.yaml). Each app's manifest-level `requirements:`
now matches its backend instead of unconditionally requiring apptainer.

Also renames the E2E runnables' `name:` field from "... HTTPS" to
"... E2E HTTPS" for clarity against the standard-security tier.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@mkitti mkitti changed the title Reframe Fileglancer runnables: standard security vs. end-to-end encryption Split Apptainer/Podman into distinct Fileglancer apps; standard security vs. E2E HTTPS Sep 10, 2026
fileglancer#448 (not yet merged) is what lets Fileglancer's optional
service proxy (apps.service_proxy_domain) propagate HTTP Basic Auth
userinfo through to the browser-facing URL. Until it merges, the proxy
rejects (403) any published service_url carrying userinfo at all, so the
standard-security "terminal" runnable (--no-tls, service_proxy left at its
default true) can't safely embed its Basic Auth credential in the URL the
way "terminal-https" does -- that one sets service_proxy: false, so it's
never proxied in the first place.

container/terminal-wrap.sh now publishes a bare URL (no credential) for the
--no-tls path, and prints the username/password on both stdout and stderr
for the user to enter manually.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@mkitti
mkitti merged commit 63d22ed into main Sep 10, 2026
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.

1 participant