-
v2.1.0 Stable
released this
2026-09-03 12:53:05 +00:00 | 19 commits to main since this release⚠ Breaking changes since v1.5.0 — read before upgrading
- Bind default changed to
127.0.0.1(was0.0.0.0). The webhook server
no longer listens on all interfaces; expose it via a reverse proxy (set
webhook_hostexplicitly to change). webhook_secretis now mandatory. A missing/empty secret is a hard
401; the old "skip verification" path is gone./healthno longer leaks state — it returns only{"status": "ok"}and
is IP-restricted (default: private ranges only).- At least one integration must be enabled — with both
integrations.matrixandintegrations.webuioff, the bot exits at startup. - Emails are logged as a fingerprint by default (set
LOG_PII=1for full). - Security headers are now sent on every response.
- New optional config options:
integrations.webui_refresh,health,
matrix.allowed_users,trust_proxy,webui_secure_cookie, and the DoS
limits:# DoS limits (all optional): max_concurrent_reviews: 50 # in-flight review pollers (semaphore) review_queue_wait: 10 # seconds to wait for a slot before 429 max_pending_reviews: 500 # cap on the in-memory pending queue
Changes
- Web UI: theme picker (light/dark/system), background auto-refresh
(integrations.webui_refresh, default 15,0disables), a11y hardening;
fixed theNameErroronGET /webui. - CSRF token is now sticky per browser (no longer rotated by the
auto-refresh poll), so Accept/Reject no longer 403 after ~15 s. account_idvalidated (isdigit) at both the webhook and web-UI
boundaries before any Admin API call (400 / skip otherwise).- Optional
matrix.allowed_usersmoderator MXID allowlist (empty =
legacy behaviour). - IP enrichment over HTTPS; webhook-supplied
ipvalidated with
ipaddressbefore any egress. - Webhook replay protection (sha256 body cache, 600 s TTL → 409);
signature verified before ping detection;webhook_secretmandatory. - Binds
127.0.0.1by default; security-headers middleware on every
response (nosniff, no-referrer,X-Frame-Options: DENY, CSP
frame-ancestors 'none', HSTS over HTTPS). /healthreturns only{"status": "ok"}and is IP-allowlisted
(default private ranges;healthacceptstrue/false/CIDR list).- Matrix card escapes quotes (
_html.escape(…, quote=True)). - Clickjacking headers verified on
/webui. - Theme cookie
Secure(webui_secure_cookie); emails logged as a
fingerprint (LOG_PII=1for full); audit IP honoursX-Forwarded-Foronly
whentrust_proxy: true. requirements.txtpinned to exact versions.- New
bot.yamloptions: the DoS limits (max_concurrent_reviews,
review_queue_wait,max_pending_reviews), plusintegrations.webui_refresh,
health,matrix.allowed_users,trust_proxy,webui_secure_cookie.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Bind default changed to