Skip to content

revel-backend

v1.70.0 Security

This release includes 2 security fixes for security teams reviewing exposed deployments.

Published 13d Productivity & Wikis
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 2 known CVEs

Affected surfaces

deps

ReleasePort's take

Moderate signal
editorial:auto 13d

The release upgrades Django to 5.2.16 and click to 8.4.2, patching three security vulnerabilities (PYSEC-2026‑2090, ‑2091, ‑2092) and one additional vulnerability (PYSEC-2026‑2132).

Why it matters: Patch Django 5.2.15 → 5.2.16 and click 8.2.1 → 8.4.2 to remediate three high‑severity PYSEC vulnerabilities.

Summary

AI summary

Updates fix, feat, and PYSEC-2026-2090/2091/2092 across a mixed release.

Changes in this release

Security Critical

Upgraded Django 5.2.15 → 5.2.16 to patch three known vulnerabilities (PYSEC-2026-2090, PYSEC-2026-2091, PYSEC-2026-2092).

Upgraded Django 5.2.15 → 5.2.16 to patch three known vulnerabilities (PYSEC-2026-2090, PYSEC-2026-2091, PYSEC-2026-2092).

Source: llm_adapter@2026-07-14

Confidence: high

Security High

Upgraded click 8.2.1 → 8.4.2 to patch PYSEC-2026-2132 vulnerability.

Upgraded click 8.2.1 → 8.4.2 to patch PYSEC-2026-2132 vulnerability.

Source: llm_adapter@2026-07-14

Confidence: high

Feature Medium

Added `PATCH /organization-admin/{slug}/membership-tiers/reorder` endpoint to set display order of membership tiers.

Added `PATCH /organization-admin/{slug}/membership-tiers/reorder` endpoint to set display order of membership tiers.

Source: llm_adapter@2026-07-14

Confidence: high

Feature Medium

Exposed `membership_grace_period_days` and `membership_refund_policy` fields on org-admin detail/edit schemas, requiring `manage_subscriptions` permission to change.

Exposed `membership_grace_period_days` and `membership_refund_policy` fields on org-admin detail/edit schemas, requiring `manage_subscriptions` permission to change.

Source: llm_adapter@2026-07-14

Confidence: high

Feature Medium

Public `OrganizationRetrieveSchema` now includes `membership_refund_policy` for prospective and active subscribers.

Public `OrganizationRetrieveSchema` now includes `membership_refund_policy` for prospective and active subscribers.

Source: llm_adapter@2026-07-14

Confidence: high

Feature Medium

Public organization-token preview (`GET /organizations/tokens/{token_id}`) now includes inviting organization's name, slug, logo URL, and granted membership tier name.

Public organization-token preview (`GET /organizations/tokens/{token_id}`) now includes inviting organization's name, slug, logo URL, and granted membership tier name.

Source: llm_adapter@2026-07-14

Confidence: high

Feature Medium

Public event-token preview (`GET /events/tokens/{token_id}`) now includes event name, slug, organization slug, start time, and cover URL.

Public event-token preview (`GET /events/tokens/{token_id}`) now includes event name, slug, organization slug, start time, and cover URL.

Source: llm_adapter@2026-07-14

Confidence: high

Feature Low

Any organization staff member can list members via `GET /organization-admin/{slug}/members` without needing `manage_members` permission.

Any organization staff member can list members via `GET /organization-admin/{slug}/members` without needing `manage_members` permission.

Source: granite4.1:30b@2026-07-14-audit

Confidence: low

Feature Low

`PUT /organization-admin/{slug}` now echoes the full admin representation, including updated subscription‑policy and billing/VAT fields.

`PUT /organization-admin/{slug}` now echoes the full admin representation, including updated subscription‑policy and billing/VAT fields.

Source: granite4.1:30b@2026-07-14-audit

Confidence: low

Bugfix Medium

Search results no longer contain duplicates when matching on multiplying relations (e.g., tags).

Search results no longer contain duplicates when matching on multiplying relations (e.g., tags).

Source: llm_adapter@2026-07-14

Confidence: high

Bugfix Medium

Membership request approval and rejection notifications are now reliably sent to applicants.

Membership request approval and rejection notifications are now reliably sent to applicants.

Source: llm_adapter@2026-07-14

Confidence: high

Bugfix Medium

Organization staff with appropriate permissions can now delete resources and manage discount codes via org‑admin routes.

Organization staff with appropriate permissions can now delete resources and manage discount codes via org‑admin routes.

Source: llm_adapter@2026-07-14

Confidence: high

Bugfix Medium

Public token previews (`GET /events/tokens/{token_id}` and `GET /organizations/tokens/{token_id}`) return 410 Gone with a machine‑readable `reason` for expired or used‑up tokens, and include minimal display fields; unknown token IDs now return 404.

Public token previews (`GET /events/tokens/{token_id}` and `GET /organizations/tokens/{token_id}`) return 410 Gone with a machine‑readable `reason` for expired or used‑up tokens, and include minimal display fields; unknown token IDs now return 404.

Source: granite4.1:30b@2026-07-14-audit

Confidence: low

Bugfix Medium

Attendees can change or withdraw RSVP on full events (yes→no/maybe, maybe→no) without `event_is_full` rejection; seat freeing triggers waitlist processing.

Attendees can change or withdraw RSVP on full events (yes→no/maybe, maybe→no) without `event_is_full` rejection; seat freeing triggers waitlist processing.

Source: granite4.1:30b@2026-07-14-audit

Confidence: low

Full changelog

Added

  • Membership tiers now carry a persistable display order: a new PATCH /organization-admin/{slug}/membership-tiers/reorder endpoint sets the order, display_order is exposed on the tier schema, and newly created tiers append at the bottom — enabling drag-to-reorder in the org-admin UI. Existing tiers are backfilled in their current alphabetical order on deploy.
  • Organization subscription-policy fields membership_grace_period_days and membership_refund_policy are now exposed on the org-admin detail and edit schemas, so the org-admin UI can display and edit them. Changing them requires the manage_subscriptions permission (consistent with the rest of the subscription management surface); staff with only edit_organization cannot alter subscription policy.
  • The public organization schema (OrganizationRetrieveSchema) now includes membership_refund_policy, so prospective and active subscribers can read the refund policy before requesting or paying for a membership (the grace period stays admin-internal).
  • Public organization-token preview (GET /organizations/tokens/{token_id}) now includes the inviting organization's organization_name, organization_slug, organization_logo_url, and the granted membership_tier_name, so the pre-claim join page can show which organization (and tier) is inviting.
  • Public event-token preview (GET /events/tokens/{token_id}) now includes event_name, event_slug, organization_slug, event_start, and event_cover_url, so the pre-claim join page can render the event instead of "Join undefined".

Changed

  • Any organization staff member can now list members (GET /organization-admin/{slug}/members); this previously required the manage_members permission, so staff who could already create RSVPs on behalf of a user had no way to look them up.
  • Public token previews (GET /events/tokens/{token_id} and GET /organizations/tokens/{token_id}) now return 410 Gone with a machine-readable reason (expired or used_up) plus minimal display fields for tokens that exist but are no longer servable, instead of a generic 404 — so the join pages can distinguish an expired invitation from a used-up one. A 404 is now returned only for genuinely unknown token ids.

Fixed

  • Search results no longer contain duplicates when the search term matches on a multiplying relation (e.g. tags): an event with 3 matching tags used to appear 3× in events, event-series, organization, dashboard, and questionnaire listings.
  • Membership request approval and rejection notifications are no longer silently dropped — approved and rejected applicants now receive their in-app/email notification (the notification context previously failed schema validation).
  • Organization staff granted the relevant permissions can now use org-admin routes that previously denied every non-owner staff member regardless of their grants: deleting organization resources (requires edit_organization) and managing discount codes (requires manage_tickets). Revenue & VAT report endpoints are now explicitly owner-only.
  • Attendees can now change or withdraw their RSVP on a full event: a yes → no/maybe, a maybe → no, or a new decline are no longer rejected with event_is_full — capacity is only enforced on seat-claiming (a new yes) writes. Freeing a seat this way triggers waitlist processing for the next person in line.
  • PUT /organization-admin/{slug} now echoes the full admin representation (the same schema as GET), so a successful edit returns every updated field — including the subscription-policy and billing/VAT fields it previously omitted — instead of forcing a follow-up GET.

Security

  • Upgraded Django 5.2.15 → 5.2.16 to patch three known vulnerabilities (PYSEC-2026-2090, PYSEC-2026-2091, PYSEC-2026-2092).
  • Upgraded click 8.2.1 → 8.4.2 to patch PYSEC-2026-2132.

What's Changed

  • docs: document macOS GDAL/WeasyPrint native-lib fix by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/658
  • fix: bootstrap seeding gaps blocking E2E journeys (#659–#662) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/663
  • fix: make bootstrap global-ban seeding idempotent (#665) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/666
  • fix: de-duplicate search results across M2M joins (#664) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/667
  • fix: bump django to 5.2.16 (PYSEC-2026-2090/2091/2092) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/669
  • test(#670) attempt-burn regression guard + docs(#671) silk E2E deadlock by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/672
  • fix: stop swallowing membership request approval/rejection notifications (#673) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/674
  • feat: expose org name/slug/logo on public org-token preview (#675) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/676
  • feat: enrich public org/event token previews (#677, #679) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/680
  • fix: 410 + rejection reason for expired/used-up token previews (#681) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/682
  • fix: guard org-admin routes on real PermissionMap keys (#683) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/685
  • feat: prod-like E2E run target with PgBouncer by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/688
  • feat: let any org staff list members (#686) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/689
  • feat: add display_order + reorder endpoint for membership tiers (#687) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/690
  • fix: allow RSVP no/maybe on full events (#691) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/692
  • fix(e2e): stop macOS fork crash; expose org subscription-policy fields by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/696
  • fix: PUT /organization-admin/{slug} echoes the full admin schema (#697) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/698
  • feat(orgs): expose membership_refund_policy on public org schema (FE #633) by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/699
  • chore(release): v1.70.0 by @biagiodistefano in https://github.com/letsrevel/revel-backend/pull/678

Full Changelog: https://github.com/letsrevel/revel-backend/compare/v1.69.0...v1.70.0

Security Fixes

  • Upgraded Django from 5.2.15 to 5.2.16 to patch CVEs PYSEC-2026-2090, PYSEC-2026-2091, and PYSEC-2026-2092.
  • Upgraded click from 8.2.1 to 8.4.2 to patch CVE PYSEC-2026-2132.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track revel-backend

Get notified when new releases ship.

Sign up free

About revel-backend

The Django backend of the Revel event platform project

All releases →

Related context

Earlier breaking changes

  • v1.72.1 Makes payment base fields (`amount`, `currency`, `platform_fee`) read-only
  • v1.72.1 Restricts organization ownership transfer to superusers only
  • v1.71.0 Checkout flow now uses a two-step reserve then session creation process.
  • v1.68.0 check-in endpoint path renamed to use ticket code (UUID or series:<uuid>) instead of ticket ID.

Beta — feedback welcome: [email protected]