Please refer to the Quickstart (Docs) for detailed instructions on installation and configuration.
Full Changelog: v0.1.10...v0.1.12
⚠️
- This release re-encrypts stored SSH credentials at startup (legacy AES-CBC → versioned AES-GCM). Read the upgrade notes before applying to auto-updating or unattended instances.
- Do not roll back the image afterwards — builds prior to v0.1.11 cannot read the new credential format and may crash.
Security
- End-to-end credential encryption — versioned AES-GCM envelopes bound to record context, with automatic migration of legacy CBC ciphertexts.
- Hardened master key handling — fail-closed (no silent regeneration when credentials exist), enforced file permissions/ownership, symlinks rejected.
- SSH host key pinning — new/edited servers record and enforce host keys; existing servers keep connecting (trust_legacy_host_key) and can be pinned by confirming on edit.
- Stronger auth & sessions — team sessions revoked on member removal; revoked team access is rejected instead of silently downgrading to viewer; admin self-deletion / self-demotion / last-admin removal rejected with re-authentication required.
- OIDC support with discovery, plus validation of OAuth identity subjects (rejects empty/0/whitespace subjects).
- Resource bounds everywhere — per-IP / per-team / global SSE limits for public preview streams; request/response size limits; upload limits; HTTP timeouts on the active-agent server.
- Scoped data access — server categories, alert upserts, and notification delivery are now scoped to the owning team; category deletion is atomic.
- Secret redaction — smtp_password and captcha_secret are redacted in admin settings responses.
New
- Readiness / liveness health endpoints — /health/ready probes Postgres, Redis, and InfluxDB.
- Notification target pre-validation — POST /api/team/notification/validate validates targets before saving.
- OIDC protocol selection for OAuth providers.
- Generic webhook notifications with template allowlist and redirect policy.
Fix
- Audit log writes are now queued & drained (bounded queue, graceful shutdown drain) instead of unbounded fire-and-forget goroutines.
- Cleaner server connection lifecycle — duplicate monitoring connections replaced, old connections awaited on edit/delete/reinstall, agent connections closed on access revocation.
- Passive-agent WebSocket shutdown is now permanent instead of silently reconnecting after server-initiated close.
- Database transactions now roll back on every exit path.
- Auto-renewals catch up — long-expired auto-renew servers advance to the next future period instead of one period per hour.
- Unified Redis password config (REDIS_PASSWORD / REDIS_PASS).
- Preserved legacy SSH connectivity during host-key pinning rollout.
- Alert configuration bounds enforced on both write paths and existing data.
- Consistent email sending and base-host / trust-proxy handling.
Web
- Validate notification targets before saving (dedicated validation endpoint).
- Password re-authentication dialogs for privileged changes and protected user deletion.
- Team owner role / removal controls disabled in the member editor.
- SSH host key confirmation when adding or editing servers.
- Graceful handling of revoked team sessions (redirect instead of broken state).
- OAuth identity protocol configuration (OAuth 2.0 / OIDC).
- Edit & delete actions on dashboard server cards, exposed via a shared context menu with a touch-friendly kebab trigger. (web#5)
- Avatar source switched from gravatar.webp.se → www.gravatar.com. (web#2)