Accounts and sign-in
Named accounts, roles, the site directory over LDAPS, the lockout and the audit log.
Named accounts
Every user has a named account with one role: viewer, technician, expert or administrator (see Roles). Accounts live in /config/users.json (BOOLE_USERS_FILE) with scrypt password hashes only. Passwords have at least 12 characters.
docker compose -f deploy/compose.yaml run --rm assistant python -m edge.users add NAME ROLE [--password-file FILE] [--language pl] docker compose -f deploy/compose.yaml run --rm assistant python -m edge.users list
Without --password-file the command prompts for the password. --language sets the answer language (Languages and themes). Administrators can also add accounts through POST /api/admin/users.
Site directory (LDAPS)
Users can sign in with their network account. Configure the directory in config/directory.json:
{"url": "ldaps://dc1.site.local",
"user_dn": "uid={user},ou=people,dc=site,dc=local",
"roles": {"jsmith": "expert"},
"default_role": "technician"}Only ldaps:// is accepted, so passwords never cross the network in the clear. Users bind as themselves: no service account is needed. A local account of the same name is tried first. Put the directory's CA in the edge PC's system trust store.
Sign-in controls
- Lockout. 5 failed sign-ins for one account within 5 minutes lock it for 15 minutes, local and directory accounts alike. A successful sign-in does not clear an active lock.
- One message for an unknown user and a wrong password, and the same work either way, so accounts cannot be guessed.
- Sessions are kept in memory and sent as an HttpOnly, SameSite=Strict cookie over HTTPS. Restarting the assistant signs everyone out.
- Roles are checked on every API request, not only in the Web UI.
Audit log
Every sign-in, failed sign-in, lockout, question and answer (with the sources cited), profile and configuration change, import and erasure is written to the audit log in the platform store. The log is append-only: the database roles cannot change or delete its rows, and a restore re-inserts it.
Removing a user
Remove the account from users.json, or erase it with its personal data: see Personal data.