• v2.3.1 c41b8f7c7c

    v2.3.1 Stable

    david.gabriel released this 2026-09-05 15:20:13 +00:00 | 14 commits to main since this release

    Changes

    • Fix: switching light/dark theme on the IP/email check view (/webui?view=check)
      no longer bounces to the pending list or clears the form — the theme now applies
      client-side (input preserved), and the fallback links keep ?view=check.
    Downloads
  • v2.3.0 861c4b961c

    v2.3.0 Stable

    david.gabriel released this 2026-09-05 14:44:21 +00:00 | 15 commits to main since this release

    Changes

    • New web UI view — IP and email check (/webui?view=check), selectable from
      a split header bar beside the pending list. A small form runs an IP lookup
      and/or the configured email checks (UserCheck / Reacher) on any address on
      demand, reusing the existing providers.
    • Input is validated server-side on submit: an IP must parse as IPv4/IPv6 and
      an email must match a strict character allow-list (only address-necessary
      characters are accepted).
    Downloads
  • v2.2.0 67646273fc

    v2.2.0 Stable

    david.gabriel released this 2026-09-04 18:51:59 +00:00 | 17 commits to main since this release

    Changes

    • New opt-in feature — reject + block signup email domain
      (email_domain_block.enabled, default off). Triggers: Matrix reply
      reject+block / reject block or ⛔, plus a third web-UI button "⛔ Reject +
      block domain". The reject always runs first; the Mastodon admin email-domain
      block is best-effort and never loses the reject (failures are reported in the
      notice). Requires token scope admin:write:email_domain_blocks (or broad
      admin:write) — a non-fatal startup check warns when it's missing.
      Per-instance override: domain_block_enabled. See README §7.2.
    • Webhook replay cache now persists to disk (webhook_cache.json, override
      with WEBHOOK_CACHE_FILE) so the dedup window survives restarts; a startup
      log line states which case you're in.
    • Pending-queue cap policy on_pending_cap: evict (default — drop the oldest
      pending review, ERROR log) or reject (answer 429 to new webhooks).
    • On SIGTERM the bot logs a WARNING naming any in-flight reviews it abandons.
    Downloads
  • v2.0.0 cd0ff54e76

    v2.0.0 Stable

    david.gabriel released this 2026-09-03 13:10:46 +00:00 | 19 commits to main since this release

    Changes

    • New web UI review surface at GET /webui (same port as the webhook)
      listing pending signups with Accept/Reject; plain HTML + embedded CSS, no JS,
      no auth.
    • integrations block selects active surfaces (matrix default true,
      webui default false); both disabled → startup error (exit 1).
    • Shared pending queue + action path across surfaces; state keyed by account ID
      with a Matrix event-ID secondary index.
    • Enrichment stored on the pending review so the web UI matches the Matrix card.
    • Manual-action detection works with either/both surfaces.
    • Security: the web UI is unauthenticated by design — restrict /webui at
      the reverse proxy (see README §14).
    Downloads
  • v2.1.0 cd0ff54e76

    v2.1.0 Stable

    david.gabriel 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 (was 0.0.0.0). The webhook server
      no longer listens on all interfaces; expose it via a reverse proxy (set
      webhook_host explicitly to change).
    • webhook_secret is now mandatory. A missing/empty secret is a hard
      401; the old "skip verification" path is gone.
    • /health no 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.matrix and integrations.webui off, the bot exits at startup.
    • Emails are logged as a fingerprint by default (set LOG_PII=1 for 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, 0 disables), a11y hardening;
      fixed the NameError on GET /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_id validated (isdigit) at both the webhook and web-UI
      boundaries before any Admin API call (400 / skip otherwise).
    • Optional matrix.allowed_users moderator MXID allowlist (empty =
      legacy behaviour).
    • IP enrichment over HTTPS; webhook-supplied ip validated with
      ipaddress before any egress.
    • Webhook replay protection (sha256 body cache, 600 s TTL → 409);
      signature verified before ping detection; webhook_secret mandatory.
    • Binds 127.0.0.1 by default; security-headers middleware on every
      response (nosniff, no-referrer, X-Frame-Options: DENY, CSP
      frame-ancestors 'none', HSTS over HTTPS).
    • /health returns only {"status": "ok"} and is IP-allowlisted
      (default private ranges; health accepts true/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=1 for full); audit IP honours X-Forwarded-For only
      when trust_proxy: true.
    • requirements.txt pinned to exact versions.
    • New bot.yaml options: the DoS limits (max_concurrent_reviews,
      review_queue_wait, max_pending_reviews), plus integrations.webui_refresh,
      health, matrix.allowed_users, trust_proxy, webui_secure_cookie.
    Downloads
  • v1.5.0 23ee3a9c68

    v1.5.0 Stable

    david.gabriel released this 2026-07-11 13:23:12 +00:00 | 22 commits to main since this release

    Changes

    • Reacher as a second email-check provider (provider: reacher); both can run
      together; combined "🔍 Email check" line; Reacher thread detail; "disabled in
      config" notice when none enabled.
    Downloads
  • v1.4.1 8703d46557

    v1.4.1 Stable

    david.gabriel released this 2026-07-10 11:30:25 +00:00 | 24 commits to main since this release

    Changes

    • email_check refactored to a provider list (multiple providers); startup +
      UserCheck INFO logging; redesigned card (user+locale one line, email-check
      one-liner, no URLs in body); IP link moved to a thread message.
    Downloads
  • v1.4.0 eaee6f5669

    v1.4.0 Stable

    david.gabriel released this 2026-07-10 06:28:29 +00:00 | 25 commits to main since this release

    Changes

    • Optional email validation via UserCheck; runs concurrently with IP lookup;
      free + paid tiers; graceful degradation when unavailable/rate-limited.
    Downloads
  • v1.3.0 024166b475

    v1.3.0 Stable

    david.gabriel released this 2026-07-09 06:04:13 +00:00 | 27 commits to main since this release

    Changes

    • Configurable email_confirmation.on_timeout: notify (default) / reject /
      silent, overridable per instance.
    Downloads
  • v1.2.0 ca2c5867be

    v1.2.0 Stable

    david.gabriel released this 2026-07-08 11:40:46 +00:00 | 28 commits to main since this release

    Changes

    • Detect manual approvals/rejections done directly in Mastodon (pre-card and
      post-card watcher polling every manual_action_poll_interval s); track the
      bot’s own actions to avoid self-misidentification.
    Downloads