Skip to content

This document was written by AI and has been manually reviewed.

Admin Guide

The admin panel is available at /admin and is visible only to users with role = admin. The first admin is created during first-run setup. Additional admins are promoted via Admin → Users → Edit User → Role → Admin.

Dashboard

Shows four summary stats:

StatDescription
Total usersAll registered accounts
OAuth appsAll registered applications
Verified domainsDomains that passed DNS verification
Active tokensNon-expired OAuth access tokens

Settings

Settings are grouped into tabs. All changes take effect immediately — no redeployment needed.

General

  • Site name — shown in the browser tab and email templates
  • Site description — shown on the login page
  • Site icon URL — link to a PNG/SVG logo
  • Registration modeopen (anyone can register), invite-only (requires an invite token), or closed (no new registrations)
  • Require email verification — users must click the verification link before logging in

Appearance

  • Accent color — hex color that drives the entire FluentUI theme. Changes are reflected immediately after saving.
  • Custom CSS — injected as a <style> block on every page. Useful for branding tweaks without forking the UI.

Security / Sessions

  • Session TTL (days) — how long a login session lasts
  • Access token TTL (minutes) — OAuth access token lifetime
  • Refresh token TTL (days) — OAuth refresh token lifetime

Bot Protection

Choose one captcha provider:

ProviderNotes
NoneNo bot protection
Cloudflare TurnstileRequires a Turnstile site key + secret. Free tier available.
hCaptchaRequires an hCaptcha site key + secret.
reCAPTCHA v3Requires a Google reCAPTCHA v3 site key + secret. Invisible.
Proof-of-WorkNo third-party service. Difficulty 20 = ~0.1–2 s on modern hardware.

Email

The email settings are split into two sub-tabs: Send and Receive.

Send

  • Email providernone, resend, mailchannels, or smtp
  • API key — for Resend or Mailchannels
  • SMTP settings — host, port, encryption, username, password (when provider is smtp)
  • From address — the sender address for verification and notification emails
  • Send test email — sends a test email to the admin's address to verify outgoing email is working

Receive

  • Email verification methods — controls how users can verify their email:
    • link — system sends a verification link to the user's email
    • send — user sends an email to verify their address (see receive provider below)
    • both — user can choose either method
  • Receive provider — how Prism receives inbound verification emails:
    • Cloudflare Email Workers — event-driven, emails trigger the worker's email() handler. Requires Cloudflare Email Routing. Users send an email to verify-<code>@<host>.
    • IMAP — Prism polls an IMAP mailbox on the cron schedule (every 6 hours by default). Works with any email provider. Users send an email with their verification code as the subject to the configured IMAP mailbox address (e.g. receive@prism.example.com).
    • None — disable inbound email (only link-based verification will work)
  • Receive host — domain for inbound verify-<code>@<host> emails (Cloudflare Email Workers only). Leave blank to default to the APP_URL hostname.
  • IMAP settings — host, port, encryption, username, password (when receive provider is imap). The IMAP username (email address) is shown to users as the destination for verification emails.
  • Test email receiving — generates a test code and address to verify inbound email is working

Domain re-verification

  • Domain reverify interval (days) — how often Prism re-checks DNS TXT records for verified domains. Default is 30 days.

OAuth Sources

Admin → OAuth Sources is where all social login providers are configured. Unlike a simple per-provider on/off toggle, each source is an independently named OAuth connection with its own slug, credentials, and display name. This allows multiple sources of the same provider type (e.g. two GitHub apps, or a Keycloak instance alongside Google).

Source fields

FieldDescription
SlugUnique URL key — appears in the callback URL as /api/connections/<slug>/callback
ProviderBase OAuth type (GitHub, Google, Microsoft, Discord, Generic OIDC, Generic OAuth 2)
Display nameLabel shown on login/register buttons
Client IDOAuth application client ID
Client SecretOAuth application client secret
EnabledToggle to show/hide the source on login without deleting it

Generic OIDC sources

When provider is Generic OpenID Connect, three additional endpoint URL fields appear:

  • Issuer URL — the provider's base issuer (e.g. https://accounts.example.com). Click Discover to auto-fetch the three endpoints from {issuer}/.well-known/openid-configuration.
  • Auth URL — OAuth 2.0 authorization endpoint
  • Token URL — token exchange endpoint
  • Userinfo URL — endpoint to fetch the user profile

An optional Scopes field allows customizing the requested scopes (default: openid email profile).

Generic OAuth 2 sources

When provider is Generic OAuth 2, the same Auth URL / Token URL / Userinfo URL fields appear but there is no OIDC discovery. All three must be filled in manually.

Callback URL

Each source's callback URL is:

https://<your-prism-domain>/api/connections/<slug>/callback

Register this URL in the provider's developer console when creating the OAuth app.

For detailed per-provider setup instructions see Social Login Setup.

Invites

When registration mode is invite-only, the Invites tab lets you create and revoke invite tokens.

  • Email (optional) — restrict the invite to a specific email address
  • Max uses — leave empty for unlimited
  • Expires after (days) — optional expiry

Invite links are copyable and can be shared directly. Email delivery requires a configured email provider.

Users

The user table is searchable and sortable. Click a user row to open the detail view.

Actions on a user

ActionEffect
Change roleToggle between user and admin
DeactivatePrevents login; existing tokens remain valid until expiry
Mark email verifiedManually verify without sending an email
DeletePermanently deletes the user and all their data (cascades to sessions, apps, connections, etc.)

Deleting a user is irreversible. Their OAuth apps are also deleted, which will break any third-party integrations that used those apps.

Applications

The app table lists all OAuth apps across all users, including:

  • Owner username
  • Verification status
  • Active/inactive status

App moderation

ActionEffect
VerifyMarks the app with a verified badge visible on the consent screen
DeactivatePrevents the app from completing new authorization flows. Existing tokens continue to work.

Verified apps are shown with a checkmark on the consent screen, indicating they have been reviewed by an admin.

Audit Log

The audit log is a paginated, append-only list of significant events:

EventTriggered by
user.registerSuccessful registration
user.loginSuccessful login
user.login.failedFailed login attempt
user.logoutLogout
user.deleteAccount deletion
totp.enabledTOTP setup completed
totp.disabledTOTP disabled
passkey.registeredNew passkey added
passkey.deletedPasskey removed
oauth.authorizeUser approved an OAuth app
oauth.tokenToken issued
admin.config.updateSite config changed
admin.user.updateAdmin changed a user
admin.user.deleteAdmin deleted a user

Each entry records the acting user_id, the action, optional resource_type / resource_id, a metadata JSON object, and the ip_address.

OAuth Scope Reference

All scopes that Prism-registered OAuth apps and personal access tokens can request:

Standard scopes

ScopeDescription
openidOIDC identity — enables id_token and the sub claim
profileRead display name, username, avatar
profile:writeUpdate display name and avatar
emailRead email address and verification status
offline_accessIssue a refresh token

Apps

ScopeDescription
apps:readList the token owner's OAuth apps
apps:writeCreate, update, and delete the token owner's OAuth apps

Teams

ScopeDescription
teams:readList team memberships and roles
teams:createCreate a new team
teams:writeUpdate team settings; add and remove members
teams:deleteDelete a team (owner only)

Domains

ScopeDescription
domains:readList verified domains
domains:writeAdd domains, trigger DNS verification, remove domains

GPG keys

ScopeDescription
gpg:readList the token owner's registered GPG public keys
gpg:writeAdd and remove the token owner's GPG public keys

Social connections

ScopeDescription
social:readList the token owner's linked social provider accounts
social:writeDisconnect social provider accounts from the token owner

Admin scopes (require role = admin on the token owner)

ScopeDescription
admin:users:readList and view all user accounts
admin:users:writeUpdate user role, status, display name, and avatar
admin:users:deletePermanently delete a user account
admin:config:readRead site-wide configuration (credentials are redacted)
admin:config:writeUpdate site settings (registration policy, appearance, etc.)
admin:invites:readList all site invite links
admin:invites:createGenerate new site invite links
admin:invites:deleteRevoke site invite links
admin:webhooks:readList webhooks and view delivery history
admin:webhooks:writeCreate, update, and send test pings to webhooks
admin:webhooks:deletePermanently delete webhooks

Released under the GPL-3.0 License.