Roles and proxy lists of the panel accounts

Accounts

Each panel account has a role. An editor or a viewer can also have a proxy list. The admin panel, the admin API and the Admin Session authentication of the proxies use the same accounts.

Roles

ActionAdminEditorEditor with a proxy listViewer
Read the proxiesevery proxyevery proxythe proxies of its listevery proxy, or the proxies of its list
Add a proxyyesyesyes, and its list gets the new proxyno
Change or delete a proxy, purge its cacheyesyesthe proxies of its listno
Read the ports, the certificates, the ACME entries and the access listsyesyesyesyes
Change the ports, the certificates, the ACME entries and the access lists, download a certificate, refresh the CDN IP rangesyesyesnono
Read or change the settings and the accounts, read the audit logyesnonono
Read the apps, the targets, the deployments and the container logs of the deployment platformyesyesnoyes, without a proxy list
Add, change or delete an app, read or change its environment variables, set or delete its Git token, create or delete its webhook secret, deploy an app, roll back a deploymentyesyesnono
Add an agent target, create its enrollment token, delete ityesnonono
Read the Git provider connections, list the repositories and the branches of a connection, install the webhook of an app againyesyesnono
Add, change, connect or delete a Git provider connection, create or install a GitHub Appyesnonono

Rules

User accounts, their password hashes, passkeys, and API tokens are securely stored in the unified SQLite database (r3v3rs3.db). Any existing accounts.toml file is automatically imported into SQLite on startup and migrated.

Create an Account

The "Accounts" page of the WebUI lists, adds, changes and deletes the accounts. Only an admin opens the page. When you add an account with TOTP, the page shows the TOTP secret once. Add it to your authenticator app at that time.

On the command line, add-user adds an account. Without --role, the account is an admin:

$ r3v3rs3 add-user alice --role editor
$ r3v3rs3 add-user bob --role viewer --totp

--role accepts admin, editor or viewer. The command asks for the password when --password is not set. An account from the command line has no proxy list. Set a proxy list on the "Accounts" page or through the admin API.

Admin API

Only an admin account can call these endpoints.

EndpointAction
GET /api/accountsLists the accounts with the role, the proxy list and whether TOTP is on.
POST /api/accountsAdds an account. The response holds totp_secret when TOTP is on.
PUT /api/accounts/{username}Changes the role, the proxy list and, optionally, the password.
DELETE /api/accounts/{username}Deletes the account.
$ curl -b cookies.txt -H 'Content-Type: application/json' \
    -d '{"username":"alice","password":"correct horse","role":"editor","proxies":["a1b2c3d"],"totp":false}' \
    http://localhost:46492/api/accounts
$ curl -b cookies.txt -X PUT -H 'Content-Type: application/json' \
    -d '{"role":"viewer"}' \
    http://localhost:46492/api/accounts/alice

An update without proxies removes the proxy list, and an update without password keeps the password.

ResponseCause
400 password_too_shortThe password has fewer than 8 characters.
400 invalid_usernameThe username breaks the username rules.
400 invalid_account_scopeAn admin account has a proxy list.
409 account_existsAn account with the username exists.
404 account_not_foundNo account has the username.

GET /api/session returns the username, the role and the proxy list of the signed-in account.

WebAuthn and Passkeys

r3v3rs3 supports hardware security keys, Touch ID, Face ID, and biometric device passkeys (FIDO2 / WebAuthn, ES256 P-256) for admin authentication alongside passwords and TOTP.

Adding a Passkey

  1. Log in to the WebUI and navigate to the Accounts page.
  2. Edit your account or click Add Passkey on the passkey management section.
  3. Enter a descriptive label (e.g., "MacBook Touch ID" or "YubiKey 5C") and confirm the browser's biometric/security key prompt.
  4. r3v3rs3 registers the public key and assigns a monotonic counter for replay protection.

[!NOTE] WebAuthn requires a secure origin (HTTPS) or http://localhost. When accessing the panel through a reverse proxy domain or loopback port, the Relying Party ID (rp.id) is automatically matched to the browser's current domain name or localhost. Web browsers do not permit passkeys on raw IP addresses (such as 127.0.0.1).

Signing in with a Passkey

On the login screen, click Sign in with Passkey. Supported browsers will prompt for resident key authentication without needing to type the username or password. You can also sign in directly by specifying your username and confirming your passkey.

API Endpoints

EndpointMethodAction
/api/auth/passkey/challengeGETObtains a single-use random challenge for WebAuthn authentication or registration.
/api/auth/passkey/registerPOSTRegisters a newly created passkey credential for the signed-in caller.
/api/auth/passkey/{id}DELETEDeletes a registered passkey by its credential ID.
/api/auth/loginPOSTAuthenticates using LoginMethod::Passkey with signed WebAuthn assertion and client data.

API Tokens

r3v3rs3 provides persistent personal API tokens for automated scripts, CI/CD pipelines, and Prometheus scrapers so they do not need to authenticate using interactive sessions or session cookies.

Scopes and Permissions

Token Security

Usage Example

Pass the token in the standard HTTP Authorization header:

$ curl -H "Authorization: Bearer r3v_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \
    http://localhost:46492/api/proxies
$ curl -H "Authorization: Bearer r3v_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6" \
    http://localhost:46492/api/metrics

API Endpoints

EndpointMethodAction
/api/auth/tokensGETLists active API tokens for the signed-in caller's account.
/api/auth/tokensPOSTCreates a new API token (name, scope). Returns the raw secret once.
/api/auth/tokens/{id}DELETERevokes and deletes an API token by ID.

The audit log records each change of an account and each sign-in.