Authentication & 2FA¶
Web Authentication¶
All routes except /login, /health, and /mcp require an authenticated session.
- Session-based authentication using Phoenix sessions
- Password stored as
ADMIN_PASSWORDenvironment variable (seeded to DB on first boot) - Sessions expire based on configurable timeout
Login Rate Limiting¶
ETS-based rate limiting protects against brute-force attacks:
- Tracks failed attempts per IP address
- After 5 failures (configurable): blocks the IP for 15 minutes (configurable)
- A GenServer runs periodic purge cycles to clean expired entries
- All limits adjustable at runtime via Admin > Config
Two-Factor Authentication (2FA)¶
TOTP-based 2FA using authenticator apps (Google Authenticator, Authy, etc.).
Setup¶
- Send
/setup 2fato your Telegram/Discord bot - Scan the QR code with your authenticator app
- Confirm with
/confirm 2fa <code>
Protected Operations¶
When 2FA is enabled, these operations require TOTP verification:
| Operation | Where |
|---|---|
| Skill load/unload/reload | Admin UI |
| Shell command execution | Telegram/Discord |
| Workflows marked "Requires 2FA" | Telegram/Discord |
Cross-Channel Verification¶
Admin UI actions that require 2FA are verified via Telegram or Discord — the TOTP challenge is sent to the messaging gateway, not displayed in the browser. This prevents session hijacking from granting full access.