Shared installs & user profiles

SRTC installs single-user by default — no sign-in, one workspace. On a machine several people share, switch on accounts: everyone signs in at the same URL and each gets a private profile. This page is for whoever administers that machine.

Two modes, one install

 Single-user (default)Multi-user
Sign-innonerequired
Home directoryone shared workspace/work/users/<uuid> per account
DatabasenonePostgreSQL (ships in the bundle)
Suitsone person, a laptop, evaluationa shared Linux box, a group

Both come out of the same download. Multi-user adds a database container that is already inside the bundle, so turning it on needs no network access either.

Install with accounts

tar xzf srtc-<version>-amd64.tar.gz
cd srtc-<version>-amd64

./install.sh --multi-user
./install.sh --add-user alice@lab.gov     # prompts twice, not echoed
./install.sh --add-user bob@lab.gov
./install.sh --list-users

Then point people at http://<this-host>:8080. The mode is remembered, so later --start, --stop and --status keep addressing the same stack. Passwords must be at least 12 characters; they are hashed with Argon2id and read from stdin, so they never reach shell history, ps, or the container logs.

There is no self-service signup. Accounts exist only because an administrator created them.

What a profile is

Every request resolves to a signed-in account, and every path the server touches is resolved under that account's home directory. That single rule is the whole isolation model — no subsystem has its own idea of who owns what.

Private to each accountShared, read-only
Run history — decks, logs, results, particle tracks Physics cross-section libraries
Dose-depth curves they generate The material compendium
Uploaded and converted CAD (STEP) Shipped reference dose-depth curves
Uploaded heavy-ion environments Shipped heavy-ion environments
Custom materials, exports, computed NIEL curves  
Saved projects and mission profiles  

A user's own file shadows a shipped one of the same name; writes always land in their own home, never over the shared copy. Nobody can read, list, or overwrite another account's files, and every job id is checked against its owner — otherwise guessing a run id would hand over someone else's results.

Before you expose it

Converting an install that is already in use

Switching an existing single-user install to --multi-user keeps the physics data and the containers, but everything already in the workspace belongs to no account, so nobody sees it after signing in. Adopt it:

./install.sh --multi-user
./install.sh --add-user you@example.com

docker compose -f docker-compose.yml -f docker-compose.multiuser.yml \
  exec backend srtc-viewer admin adopt-work --email you@example.com --dry-run
# review, then run it again without --dry-run

Both paths are inside the same volume, so each move is an instant rename however large the run folder.

Administrator commands

From the unpacked bundle directory:

alias srtcdc='docker compose -f docker-compose.yml -f docker-compose.multiuser.yml'

srtcdc exec backend srtc-viewer admin list-users
srtcdc exec backend srtc-viewer admin add-user       --email x@y.com --password-stdin
srtcdc exec backend srtc-viewer admin disable-user   --email x@y.com
srtcdc exec backend srtc-viewer admin reset-password --email x@y.com --password-stdin

Disabling an account takes effect on its next request rather than whenever a token would have expired.

Physics data

The cross-section libraries carry a version stamp, and the server refuses transport runs against libraries built by cross-section code it does not recognise — a wrong dose is worse than no dose. The bundle ships matching libraries, so this only arises if you point an install at a data volume from a different release. The viewer says which half is out of date and what to do about it.