Demo Multi-Account Launcher¶
The Firefox launcher opens several permanent tutorial accounts in separate Firefox containers. It is restricted to managed demo installations and does not transmit or store permanent passwords.
Operator Workflow¶
Create a ticket from the trusted workstation:
./.venv/bin/python -m ops.demo.manager \
--host ADMIN@DEMO_HOST \
ticket create demo_NAME \
--accounts viewer,editor_1,reviewer,approver \
--label "Parcel review exercise"
The raw XXXX-XXXX ticket is printed at creation and saved in the trusted
workstation's owner-private state directory. Store or send it only for the
intended workshop. Remote ticket list and ticket show expose safe metadata
but cannot recover the code from the demo server.
./.venv/bin/python -m ops.demo.manager ticket saved demo_NAME
./.venv/bin/python -m ops.demo.manager ticket saved demo_NAME --show
./.venv/bin/python -m ops.demo.manager --host ADMIN@DEMO_HOST ticket list demo_NAME
./.venv/bin/python -m ops.demo.manager --host ADMIN@DEMO_HOST ticket show demo_NAME TICKET_ID
./.venv/bin/python -m ops.demo.manager --host ADMIN@DEMO_HOST ticket revoke demo_NAME TICKET_ID
./.venv/bin/python -m ops.demo.manager --host ADMIN@DEMO_HOST ticket revoke-all demo_NAME
The first local command reports the protected file and ticket count without
printing codes. The --show form prints saved codes only to an interactive
terminal and cannot be combined with JSON output. Revocation removes the
matching local code. Revoke-all, successful reset, and successful deletion
remove all locally saved codes for that demo.
Reset and delete revoke launcher credentials before replacing or removing the managed demo. A failed revocation stops destructive lifecycle work.
Learner Workflow¶
- Install the signed Firefox extension.
- Select its toolbar icon.
- Enter the HTTPS demo address and ticket.
- Approve access to that exact demo origin.
- Use the role tabs opened in separate LMSTool containers.
The extension may remember the last successful origin. It does not retain the ticket. Login tokens expire after three minutes and can be consumed once.
Shared Account Limitation¶
Containers isolate browser cookies, not application identities. Learners using the same permanent tutorial account share audit attribution, drafts, preferences, filters, notifications, assignments, and owned records. This is accepted for disposable workshops and must be explained before exercises begin.
Deployment Controls¶
The launcher requires both LMSTOOL_DEMO=true and
DEMO_MULTI_ACCOUNT_LAUNCHER_ENABLED=true. The managed lifecycle mounts
DEMO_LAUNCHER_HMAC_KEY_FILE from private demo secret storage and disables the
demo application's Dokku nginx access log so token-bearing login paths are not
recorded. Django logging applies an additional token-path redaction filter.
Do not enable the launcher on ordinary or production installations.
Extension Release¶
Development checks run from tools/firefox-demo-launcher/:
npm test
npm run lint
npm run build
The package under web-ext-artifacts/ is unsigned and ignored. Mozilla signing
and hosted unlisted distribution are required before learner release. Recheck
the supported desktop Firefox ESR and npm audit at each release. As of the
initial implementation, web-ext 10.5.0 reports unresolved high-severity
findings in development-only transitive dependencies; do not use
npm audit fix --force, which proposes an invalid downgrade.