-
-
Notifications
You must be signed in to change notification settings - Fork 0
Admin Area
There's no promote-a-user button — admin status is granted exactly once, at account creation:
- Set
ADMIN_EMAILin.envto the email address that should be an admin, before that account is created (signup, or restoring from a backup). Whichever account is created with that email getsisAdmin: trueat creation time; changingADMIN_EMAILafterward doesn't retroactively grant it to an account that already exists. - To grant it to an existing account instead, update the user document directly in MongoDB
(
db.users.updateOne({ email: "..." }, { $set: { isAdmin: true } })), then log out and back in — login re-readsisAdminfrom the database into the session. This only ever flips a boolean; it never touches vault key material, so it can't be used to read anyone's encrypted data.
Admins get an Admin link in the nav bar, and access to everything below at /admin — anyone else
hitting /admin gets a 403.
Shared taxonomy used to organize waypoints across every account on the deployment (not per-user).
- Categories — a name plus a color swatch.
- Tags — name only.
Any authenticated user can create a new category or tag (used by a "create if missing" flow in the vault UI, so people aren't blocked waiting on an admin for a new label) — but renaming or deleting either is admin-only, since both are shared and a rename/delete affects every account using them.
Configure outbound email (invite / access-request / access-granted notifications) directly from the
UI, without editing .env or redeploying:
-
Host / Port / Implicit TLS / Username / Password / From address — the same fields
.env'sSMTP_*variables cover. Saving here takes priority over.envand applies immediately. -
Save stores the settings in MongoDB — the password is AES-256-GCM encrypted at rest (keyed off
sessionSecret) and is never sent back to the browser; leave the password field blank on a later save to keep the one already stored. - Test connection verifies the (unsaved or saved) settings by actually logging in to the SMTP server, without sending anything.
-
Reset to .env clears the database override and falls back to whatever's in
.env(or "not configured" if that's blank too).
A status badge shows which source is currently active — Configured (database), Configured (.env),
or Not configured. The public status page (/status) also checks this and links straight back here
if email is down or unconfigured.
/admin/audit-log — the most recent 200 events (time, action, actor, target, IP). Append-only; never
contains vault contents or key material, only what happened and who did it. Tracked actions: account
login/lockout/password changes, recovery kit generation and use, account restores, waypoint
create/update/delete, upload add/delete, trusted-contact invites/acceptance/confirmation, emergency
access requests/denials/grants/revocations, and SMTP settings changes.
The scheduled job that auto-grants access requests past their waiting period runs automatically
every ~15 minutes (services/jobs/scheduler.js, started from server.js). To trigger it immediately
instead of waiting real days:
npm run promote-grants
# or, in Docker:
docker compose exec app node scripts/runPromoteGrants.js